UNPKG

@netdata/charts

Version:

Netdata frontend SDK and chart utilities

229 lines (228 loc) 8.1 kB
"use strict"; 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"); }); });