@netdata/charts
Version:
Netdata frontend SDK and chart utilities
363 lines (362 loc) • 15.8 kB
JavaScript
;
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _deepEqual = _interopRequireDefault(require("../../../helpers/deepEqual"));
var _pristine = _interopRequireWildcard(require("../../pristine"));
var _getInitialAttributes = _interopRequireDefault(require("./getInitialAttributes"));
var _heatmap = require("../../../helpers/heatmap");
var _makeLog = _interopRequireDefault(require("../../makeLog"));
var _excluded = ["value"];
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
var _default = exports["default"] = function _default(chart) {
var log = function log(_ref) {
var value = _ref.value,
rest = _objectWithoutProperties(_ref, _excluded);
return (0, _makeLog["default"])(chart)(_objectSpread(_objectSpread({}, rest), {}, {
value: value && typeof value !== "string" ? JSON.stringify(value) : value
}));
};
var allowedGroupByValues = {
node: true,
instance: true,
dimension: true,
"percentage-of-instance": true,
selected: true
};
var baseUpdateGroupBy = function baseUpdateGroupBy(selected, _ref2) {
var _ref2$groupByKey = _ref2.groupByKey,
groupByKey = _ref2$groupByKey === void 0 ? "groupBy" : _ref2$groupByKey,
_ref2$groupByLabelKey = _ref2.groupByLabelKey,
groupByLabelKey = _ref2$groupByLabelKey === void 0 ? "groupByLabel" : _ref2$groupByLabelKey,
_ref2$fallbackGroupBy = _ref2.fallbackGroupBy,
fallbackGroupBy = _ref2$fallbackGroupBy === void 0 ? ["dimension"] : _ref2$fallbackGroupBy,
_ref2$dataKey = _ref2.dataKey,
dataKey = _ref2$dataKey === void 0 ? null : _ref2$dataKey,
_ref2$loadingKey = _ref2.loadingKey,
loadingKey = _ref2$loadingKey === void 0 ? null : _ref2$loadingKey;
var selectedLabels = selected.filter(function (sel) {
return sel.isLabel;
});
var groupByLabel = selectedLabels.map(function (sel) {
return sel.value;
});
var groupBy = selected.reduce(function (h, sel) {
if (!allowedGroupByValues[sel.value]) return h;
h.push(sel.value);
return h;
}, []);
if (selectedLabels.length) groupBy.push("label");
if (!groupBy.length) groupBy = fallbackGroupBy;
if ((0, _deepEqual["default"])(groupBy, chart.getAttribute(groupByKey)) && (0, _deepEqual["default"])(groupByLabel, chart.getAttribute(groupByLabelKey))) return false;
var updates = _defineProperty(_defineProperty(_defineProperty({}, groupByLabelKey, groupByLabel), groupByKey, groupBy), "processing", true);
if (dataKey) updates[dataKey] = null;
if (loadingKey) updates[loadingKey] = true;
chart.updateAttributes(updates);
return true;
};
var updateGroupByAttribute = function updateGroupByAttribute(selected) {
var changed = baseUpdateGroupBy(selected, {});
if (!changed) return;
chart.updateAttribute("selectedLegendDimensions", []);
chart.updateAttributes((0, _getInitialAttributes["default"])(chart));
chart.fetch({
processing: true
});
log({
chartAction: "chart-groupby-change",
value: selected
});
};
var updatePostGroupByAttribute = function updatePostGroupByAttribute(selected) {
var selectedLabels = selected.filter(function (sel) {
return sel.isLabel;
});
var groupByLabel = selectedLabels.map(function (sel) {
return sel.value;
});
var groupBy = selected.reduce(function (h, sel) {
if (!allowedGroupByValues[sel.value]) return h;
h.push(sel.value);
return h;
}, []);
if (selectedLabels.length) groupBy.push("label");
if ((0, _deepEqual["default"])(groupBy, chart.getAttribute("postGroupBy")) && (0, _deepEqual["default"])(groupByLabel, chart.getAttribute("postGroupByLabel"))) return;
chart.updateAttributes({
postGroupByLabel: groupByLabel,
postGroupBy: groupBy,
processing: true
});
chart.updateAttributes((0, _getInitialAttributes["default"])(chart));
chart.fetch({
processing: true
});
log({
chartAction: "chart-postgroupby-change",
value: selected
});
};
var chartLibraries = {
dygraph: true,
easypiechart: true,
gauge: true,
number: true,
d3pie: true,
bars: true,
groupBoxes: true,
table: true
};
var updateChartTypeAttribute = function updateChartTypeAttribute(selected) {
var prevChartLibrary = chart.getAttribute("chartLibrary");
var prevGroupBy = chart.getAttribute("groupBy");
if (!chartLibraries[selected]) {
chart.updateAttributes({
chartLibrary: "dygraph",
chartType: selected,
processing: true
});
if (prevChartLibrary !== "dygraph") {
chart.getUI().unmount();
chart.setUI(_objectSpread(_objectSpread({}, chart.sdk.makeChartUI(chart)), chart.ui || {}), "default");
}
} else {
chart.updateAttributes(_objectSpread({
chartLibrary: selected,
processing: true
}, (0, _heatmap.isHeatmap)(selected) && {
dimensionsSort: "default"
}));
chart.getUI().unmount();
chart.setUI(_objectSpread(_objectSpread({}, chart.sdk.makeChartUI(chart)), chart.ui || {}), "default");
}
chartLibraries[selected];
if ((0, _heatmap.isHeatmap)(selected)) {
updateGroupByAttribute(["dimension"]);
if (!(0, _deepEqual["default"])(prevGroupBy, chart.getAttribute("groupBy"))) return;
}
chart.trigger("fetch", {
processing: true
});
log({
chartAction: "chart-type-change",
value: selected
});
};
var updateNodesAttribute = function updateNodesAttribute(selected) {
var _selected$reduce = selected.reduce(function (h, sel) {
if (sel.isInstance) {
h.selectedInstances.push(sel.value);
} else {
h.selectedNodes.push(sel.value);
}
return h;
}, {
selectedNodes: [],
selectedInstances: []
}),
selectedNodes = _selected$reduce.selectedNodes,
selectedInstances = _selected$reduce.selectedInstances;
var nodesHaveChanges = !(0, _deepEqual["default"])(selectedNodes, chart.getAttribute("selectedNodes"));
if (nodesHaveChanges) chart.updateAttributes({
selectedNodes: selectedNodes,
processing: true
});
var instancesHaveChanges = !(0, _deepEqual["default"])(selectedInstances, chart.getAttribute("selectedInstances"));
if (instancesHaveChanges) chart.updateAttributes({
selectedInstances: selectedInstances,
processing: true
});
if (instancesHaveChanges || nodesHaveChanges) chart.trigger("fetch", {
processing: true
});
log({
chartAction: "chart-node-change",
value: selected
});
};
var updateNodeLabelsFilter = function updateNodeLabelsFilter(selectedLabels) {
if (typeof selectedLabels === "function") {
var selected = chart.getAttribute("selectedNodeLabelsFilter");
selectedLabels = selectedLabels(selected);
}
if ((0, _deepEqual["default"])(selectedLabels, chart.getAttribute("selectedNodeLabelsFilter"))) return;
chart.updateAttributes({
selectedNodeLabelsFilter: selectedLabels,
processing: true
});
chart.trigger("fetch", {
processing: true
});
log({
chartAction: "chart-host-labels-filter-change",
value: selectedLabels
});
};
var updateInstancesAttribute = function updateInstancesAttribute(selected) {
var selectedInstances = selected.map(function (sel) {
return sel.value;
});
if ((0, _deepEqual["default"])(selectedInstances, chart.getAttribute("selectedInstances"))) return;
chart.updateAttributes({
selectedInstances: selectedInstances,
processing: true
});
chart.trigger("fetch", {
processing: true
});
log({
chartAction: "chart-instance-change",
value: selected
});
};
var updateDimensionsAttribute = function updateDimensionsAttribute(selected) {
var selectedDimensions = selected.map(function (sel) {
return sel.value;
});
if ((0, _deepEqual["default"])(selectedDimensions, chart.getAttribute("selectedDimensions"))) return;
chart.updateAttributes({
selectedDimensions: selectedDimensions,
processing: true
});
chart.trigger("fetch", {
processing: true
});
log({
chartAction: "chart-dimensions-change",
value: selected
});
};
var updateLabelsAttribute = function updateLabelsAttribute(selected) {
var selectedLabels = selected.map(function (sel) {
return sel.value;
});
if ((0, _deepEqual["default"])(selectedLabels, chart.getAttribute("selectedLabels"))) return;
chart.updateAttributes({
selectedLabels: selectedLabels,
processing: true
});
chart.trigger("fetch", {
processing: true
});
log({
chartAction: "chart-labels-change",
value: selected
});
};
var updateAggregationMethodAttribute = function updateAggregationMethodAttribute(value) {
if (chart.getAttribute("aggregationMethod") === value) return;
chart.updateAttributes({
aggregationMethod: value,
processing: true
});
chart.trigger("fetch", {
processing: true
});
log({
chartAction: "chart-aggregation-method-change",
value: value
});
};
var updatePostAggregationMethodAttribute = function updatePostAggregationMethodAttribute(value) {
if (chart.getAttribute("postAggregationMethod") === value) return;
chart.updateAttributes({
postAggregationMethod: value,
processing: true
});
chart.trigger("fetch", {
processing: true
});
log({
chartAction: "chart-aggregation-method-change",
value: value
});
};
var updateContextScopeAttribute = function updateContextScopeAttribute(value) {
if (chart.getAttribute("contextScope")[0] === value) return;
chart.updateAttributes({
contextScope: [value],
processing: true
});
chart.updateAttributes((0, _getInitialAttributes["default"])(chart));
chart.trigger("fetch", {
processing: true
});
log({
chartAction: "chart-context-scope-change",
value: value
});
};
var updateTimeAggregationMethodAttribute = function updateTimeAggregationMethodAttribute(_ref3) {
var alias = _ref3.alias,
method = _ref3.method;
var value = alias ? "".concat(method).concat(alias) : method;
if (chart.getAttribute("groupingMethod") === value) return;
chart.updateAttributes({
groupingMethod: value,
processing: true
});
chart.trigger("fetch", {
processing: true
});
log({
chartAction: "chart-time-aggregation-method-change",
value: value
});
};
var resetPristine = function resetPristine() {
var attributes = chart.getAttributes();
var prev = _objectSpread({}, attributes[_pristine.pristineKey]);
var hasChangedLibrary = "chartLibrary" in prev && attributes.chartLibrary !== prev.chartLibrary;
_pristine["default"].reset(attributes);
chart.attributeListeners.trigger(_pristine.pristineKey, attributes[_pristine.pristineKey], prev);
chart.sdk.trigger("pristineChanged", chart, _pristine.pristineKey, attributes[_pristine.pristineKey], prev);
Object.keys(prev).forEach(function (key) {
return chart.attributeListeners.trigger(key, attributes[key], prev[key]);
});
if (hasChangedLibrary) {
chart.getUI().unmount();
chart.setUI(_objectSpread(_objectSpread({}, chart.sdk.makeChartUI(chart)), chart.ui || {}), "default");
}
chart.trigger("fetch", {
processing: true
});
};
var removePristine = function removePristine() {
var prev = chart.getAttribute(_pristine.pristineKey);
var next = {};
chart.updateAttribute(_pristine.pristineKey, next);
chart.sdk.trigger("pristineChanged", chart, _pristine.pristineKey, next, prev);
};
var toggleFullscreen = function toggleFullscreen() {
var fullscreen = chart.getAttribute("fullscreen");
chart.updateAttribute("fullscreen", !fullscreen);
};
return {
updateGroupByAttribute: updateGroupByAttribute,
updatePostGroupByAttribute: updatePostGroupByAttribute,
updateChartTypeAttribute: updateChartTypeAttribute,
updateNodesAttribute: updateNodesAttribute,
updateInstancesAttribute: updateInstancesAttribute,
updateDimensionsAttribute: updateDimensionsAttribute,
updateLabelsAttribute: updateLabelsAttribute,
updateAggregationMethodAttribute: updateAggregationMethodAttribute,
updatePostAggregationMethodAttribute: updatePostAggregationMethodAttribute,
updateTimeAggregationMethodAttribute: updateTimeAggregationMethodAttribute,
updateContextScopeAttribute: updateContextScopeAttribute,
updateNodeLabelsFilter: updateNodeLabelsFilter,
resetPristine: resetPristine,
removePristine: removePristine,
toggleFullscreen: toggleFullscreen,
baseUpdateGroupBy: baseUpdateGroupBy
};
};