@netdata/charts
Version:
Netdata frontend SDK and chart utilities
229 lines (228 loc) • 8.1 kB
JavaScript
;
var _camelizePayload = _interopRequireDefault(require("./camelizePayload"));
function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); }
function _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
describe("camelizePayload", function () {
it("handles minimal payload", function () {
var payload = {
result: {
data: [[1000, 1, 2]],
labels: ["time", "cpu", "memory"],
point: {
value: 0
}
}
};
var result = (0, _camelizePayload["default"])(payload);
expect(result).toHaveProperty("result");
expect(result.result).toHaveProperty("data");
expect(result.result).toHaveProperty("labels");
expect(result.result.labels).toContain("ANOMALY_RATE");
expect(result.result.labels).toContain("ANNOTATIONS");
});
it("keeps raw JSON2 cells instead of allocating per-point objects", function () {
var data = [[1000, [10, 2, 4], [20, 3, 8]], [2000, [30, 5, 16], [40, 7, 32]]];
var point = {
value: 0,
arp: 1,
pa: 2
};
var payload = {
result: {
data: data,
labels: ["time", "cpu", "memory"],
point: point
}
};
var result = (0, _camelizePayload["default"])(payload).result;
expect(result.all).toBe(data);
expect(result.all[0][1]).toBe(data[0][1]);
expect(result.point).toBe(point);
expect(result.data).toEqual([[1000, 10, 20, null, null], [2000, 30, 40, null, null]]);
expect(result.byDimension).toEqual({
cpu: {
min: 10,
max: 30
},
memory: {
min: 20,
max: 40
}
});
});
it("preserves the compact shape for thousands of dimensions", function () {
var dimensionCount = 5256;
var labels = ["time"].concat(_toConsumableArray(Array.from({
length: dimensionCount
}, function (_, index) {
return "d".concat(index);
})));
var data = Array.from({
length: 3
}, function (_, rowIndex) {
return [rowIndex * 1000].concat(_toConsumableArray(Array.from({
length: dimensionCount
}, function (_, dimensionIndex) {
return [dimensionIndex + rowIndex, 0, 0];
})));
});
var payload = {
result: {
data: data,
labels: labels,
point: {
value: 0,
arp: 1,
pa: 2
}
}
};
var result = (0, _camelizePayload["default"])(payload).result;
expect(result.all).toBe(data);
expect(result.data).toHaveLength(3);
expect(result.data[0]).toHaveLength(dimensionCount + 3);
expect(result.all[2][dimensionCount][0]).toBe(dimensionCount + 1);
});
it("handles empty payload", function () {
var payload = {
result: {
data: [],
labels: [],
point: {
value: 0
}
}
};
expect(function () {
return (0, _camelizePayload["default"])(payload);
}).not.toThrow();
});
it("processes chart metadata", function () {
var payload = {
view: {
title: "Test Chart",
chart_type: "line",
units: "bytes"
},
result: {
data: [],
labels: [],
point: {
value: 0
}
}
};
var result = (0, _camelizePayload["default"])(payload);
expect(result.title).toBe("Test Chart");
expect(result.chartType).toBe("line");
expect(result.units).toEqual(["By"]);
expect(result.stepPlot).toBe(false);
});
it("aliases chart and dimension units before they are stored", function () {
var sourceUnits = ["KiB", "KB", "MiB", "MB", "GB", "TB", "PB", "GBy", "TiB", "PiB", "MB/s", "GB/s", "Hz", "seconds", "second", "sec", "secs", "milliseconds", "millisecond", "ms", "microsecond", "us", "nanosecond", "nanoseconds", "minutes", "hours", "hr", "hrs", "days", "weeks", "months", "years", "percent", "percentage", "bits", "bits/s", "kilobits", "kbit/s", "megabits", "kilobits/s", "Mbps", "MHz", "KiB/operation", "kilobytes per operation", "milliseconds/request", "milliseconds/operation", "milliseconds/s", "ms/s", "usec/s", "gigabytes", "GiB/s", "millicpu", "mA", "millivolts", "mJ/s", "dBm", "Celcius", "Joules", "pcent"];
var expectedUnits = ["KiBy", "KBy", "MiBy", "MBy", "GBy", "TBy", "PBy", "GBy", "TiBy", "PiBy", "MBy/s", "GBy/s", "Hz", "s", "s", "s", "s", "ms", "ms", "ms", "us", "us", "ns", "ns", "min", "h", "h", "h", "d", "wk", "mo", "a", "%", "%", "bit", "bit/s", "Kibit", "Kibit/s", "Mibit", "Kibit/s", "Mibit/s", "MHz", "KiBy/{operation}", "KBy/{operation}", "ms/{request}", "ms/{operation}", "ms/s", "ms/s", "us/s", "GBy", "GiBy/s", "m[CPU]", "mA", "mV", "mW", "dB[mW]", "Cel", "J", "%"];
var ids = sourceUnits.map(function (_, index) {
return "dimension-".concat(index);
});
var payload = {
view: {
chart_type: "line",
units: sourceUnits,
dimensions: {
grouped_by: ["dimension"],
ids: ids,
units: sourceUnits,
sts: {
min: ids.map(function () {
return 0;
}),
max: ids.map(function () {
return 1;
})
}
}
},
db: {
units: sourceUnits,
dimensions: {
ids: ids,
units: sourceUnits,
sts: {
min: ids.map(function () {
return 0;
}),
max: ids.map(function () {
return 1;
})
}
}
},
result: {
data: [],
labels: ["time"].concat(_toConsumableArray(ids)),
point: {
value: 0
}
}
};
var result = (0, _camelizePayload["default"])(payload);
expect(result.units).toEqual(expectedUnits);
expect(result.viewDimensions.units).toEqual(expectedUnits);
expect(result.dbUnits).toEqual(expectedUnits);
expect(result.dbDimensions.units).toEqual(expectedUnits);
});
it("derives stepPlot for state units", function () {
var payload = {
view: {
title: "Connection State",
chart_type: "line",
units: "state"
},
result: {
data: [],
labels: [],
point: {
value: 0
}
}
};
var result = (0, _camelizePayload["default"])(payload);
expect(result.stepPlot).toBe(true);
expect(result.chartType).toBe("line");
});
it("handles summary data", function () {
var payload = {
summary: {
nodes: [{
nd: "node1",
ni: 0,
nm: "Node 1"
}],
instances: [{
id: "inst1",
ni: 0,
nm: "Instance 1"
}],
dimensions: [{
id: "dim1"
}]
},
result: {
data: [],
labels: [],
point: {
value: 0
}
}
};
var result = (0, _camelizePayload["default"])(payload);
expect(result.nodes).toHaveProperty("node1");
expect(result.dimensions).toHaveProperty("dim1");
expect(result.dimensionIds).toContain("dim1");
});
});