@netdata/charts
Version:
Netdata frontend SDK and chart utilities
293 lines (292 loc) • 11.3 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.makeConversableKey = exports.keys = exports.isCompactDurationUnit = exports["default"] = exports.compactDurationUnitKeys = void 0;
var _zeropad = _interopRequireDefault(require("../zeropad"));
function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure 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 _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; }
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
var makeConversableKey = exports.makeConversableKey = function makeConversableKey(unit, scale) {
return "".concat(unit, "-").concat(scale);
};
var compactDurationUnitKeys = exports.compactDurationUnitKeys = ["a:mo:d", "mo:d:h", "d:h:mm", "h:mm:ss", "mm:ss", "dHH:MM:ss"];
var isCompactDurationUnit = exports.isCompactDurationUnit = function isCompactDurationUnit(unit) {
return compactDurationUnitKeys.includes(unit);
};
var seconds2time = function seconds2time(seconds, maxTimeUnit) {
var minTimeUnit = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : "MS";
var precision = minTimeUnit === "MS" ? 100 : 1;
var durationUnits = [["YEARS", "yr", 86400 * 365], ["MONTHS", "mo", 86400 * 30], ["DAYS", "d", 86400], ["HOURS", "h", 3600], ["MINUTES", "m", 60]];
var startIndex = durationUnits.findIndex(function (_ref) {
var _ref2 = _slicedToArray(_ref, 1),
unit = _ref2[0];
return unit === maxTimeUnit;
});
var selectedUnits = durationUnits.slice(startIndex === -1 ? durationUnits.length : startIndex);
var sign = seconds < 0 ? "-" : "";
var ticks = Math.round(Math.abs(seconds) * precision);
var parts = [];
selectedUnits.forEach(function (_ref3) {
var _ref4 = _slicedToArray(_ref3, 3),
suffix = _ref4[1],
secondsPerUnit = _ref4[2];
var unitTicks = secondsPerUnit * precision;
var value = Math.floor(ticks / unitTicks);
ticks -= value * unitTicks;
if (value) parts.push("".concat(value).concat(suffix));
});
var wholeSeconds = Math.floor(ticks / precision);
var fraction = ticks - wholeSeconds * precision;
var secondsString = fraction ? "".concat(wholeSeconds, "s.").concat(fraction.toString().padStart(2, "0")) : "".concat(wholeSeconds, "s");
if (secondsString !== "0s" || !parts.length) parts.push(secondsString);
return "".concat(sign).concat(parts.join(""));
};
var twoFixed = function twoFixed() {
var multiplier = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;
return function (value) {
return value * multiplier;
};
};
var secondConverters = {
ns: {
check: function check(chart, max) {
return chart.getAttribute("secondsAsTime") && max < 0.000001;
},
convert: twoFixed(1000000000)
},
us: {
check: function check(chart, max) {
return chart.getAttribute("secondsAsTime") && max >= 0.000001 && max < 0.001;
},
convert: twoFixed(1000000)
},
ms: {
check: function check(chart, max) {
return chart.getAttribute("secondsAsTime") && max >= 0.001 && max < 1;
},
convert: twoFixed(1000)
},
s: {
check: function check(chart, max) {
return chart.getAttribute("secondsAsTime") && max >= 1 && max < 60;
},
convert: twoFixed(1)
},
"mm:ss": {
check: function check(chart, max) {
return chart.getAttribute("secondsAsTime") && max >= 60 && max < 3600;
},
convert: function convert(value) {
return seconds2time(value, "MINUTES");
}
},
"h:mm:ss": {
check: function check(chart, max) {
return chart.getAttribute("secondsAsTime") && max >= 3600 && max < 86400;
},
convert: function convert(value) {
return seconds2time(value, "HOURS");
}
},
"d:h:mm": {
check: function check(chart, max) {
return chart.getAttribute("secondsAsTime") && max >= 86400;
},
convert: function convert(value) {
return seconds2time(value, "DAYS");
}
},
"mo:d:h": {
check: function check(chart, max) {
return chart.getAttribute("secondsAsTime") && max >= 86400 * 30;
},
convert: function convert(value) {
return seconds2time(value, "MONTHS");
}
},
"a:mo:d": {
check: function check(chart, max) {
return chart.getAttribute("secondsAsTime") && max >= 86400 * 365;
},
convert: function convert(value) {
return seconds2time(value, "YEARS");
}
},
"dHH:MM:ss": {
check: function check() {
return false;
},
convert: function convert(value) {
return seconds2time(value, "DAYS", "SECONDS");
}
}
};
var makeSecondSourceConverters = function makeSecondSourceConverters(multiplier) {
return Object.entries(secondConverters).reduce(function (acc, _ref5) {
var _ref6 = _slicedToArray(_ref5, 2),
key = _ref6[0],
converter = _ref6[1];
acc[key] = {
check: function check(chart, max) {
return converter.check(chart, max * multiplier);
},
convert: function convert(value, chart) {
return converter.convert(value * multiplier, chart);
}
};
return acc;
}, {});
};
var millisecondKeys = ["ns", "us", "ms", "s", "a:mo:d", "mo:d:h", "d:h:mm", "h:mm:ss", "mm:ss"];
var secondKeys = [].concat(millisecondKeys, ["dHH:MM:ss"]);
var keys = exports.keys = {
Cel: ["[degF]"],
ns: ["ns", "us", "ms", "s"],
ms: millisecondKeys,
s: secondKeys,
min: secondKeys,
h: secondKeys,
d: secondKeys,
wk: secondKeys,
mo: secondKeys,
a: secondKeys
};
var _default = exports["default"] = {
Cel: {
"[degF]": {
check: function check(chart) {
return chart.getAttribute("temperature") === "fahrenheit";
},
convert: function convert(value) {
return value * 9 / 5 + 32;
}
}
},
ns: {
ns: {
check: function check(chart, max) {
return chart.getAttribute("secondsAsTime") && max < 1000;
},
convert: function convert(nanoseconds) {
var tms = Math.round(nanoseconds * 10);
nanoseconds = Math.floor(tms / 10);
tms -= nanoseconds * 10;
return "".concat(nanoseconds, ".").concat((0, _zeropad["default"])(tms));
}
},
us: {
check: function check(chart, max) {
return chart.getAttribute("secondsAsTime") && max >= 1000 && max < 1000 * 1000;
},
convert: function convert(nanoseconds) {
nanoseconds = Math.round(nanoseconds);
var microseconds = Math.floor(nanoseconds / 1000);
nanoseconds -= microseconds * 1000;
nanoseconds = Math.round(nanoseconds / 10);
return "".concat(microseconds, ".").concat((0, _zeropad["default"])(nanoseconds));
}
},
ms: {
check: function check(chart, max) {
return chart.getAttribute("secondsAsTime") && max >= 1000 * 1000 && max < 1000 * 1000 * 1000;
},
convert: function convert(nanoseconds) {
nanoseconds = Math.round(nanoseconds);
var milliseconds = Math.floor(nanoseconds / 1000 / 1000);
nanoseconds -= milliseconds * 1000 * 1000;
nanoseconds = Math.round(nanoseconds / 1000 / 10);
return "".concat(milliseconds, ".").concat((0, _zeropad["default"])(nanoseconds));
}
},
s: {
check: function check(chart, max) {
return chart.getAttribute("secondsAsTime") && max >= 1000 * 1000 * 1000;
},
convert: function convert(nanoseconds) {
nanoseconds = Math.round(nanoseconds);
var seconds = Math.floor(nanoseconds / 1000 / 1000 / 1000);
nanoseconds -= seconds * 1000 * 1000 * 1000;
nanoseconds = Math.round(nanoseconds / 1000 / 1000 / 10);
return "".concat(seconds, ".").concat((0, _zeropad["default"])(nanoseconds));
}
}
},
ms: {
ns: {
check: function check(chart, max) {
return chart.getAttribute("secondsAsTime") && max < 0.001;
},
convert: twoFixed(1000000)
},
us: {
check: function check(chart, max) {
return chart.getAttribute("secondsAsTime") && max >= 0.001 && max < 1;
},
convert: twoFixed(1000)
},
ms: {
check: function check(chart, max) {
return chart.getAttribute("secondsAsTime") && max >= 1 && max < 1000;
},
convert: twoFixed()
},
s: {
check: function check(chart, max) {
return chart.getAttribute("secondsAsTime") && max >= 1000 && max < 60000;
},
convert: twoFixed(0.001)
},
"mm:ss": {
check: function check(chart, max) {
return chart.getAttribute("secondsAsTime") && max >= 60000 && max < 3600000;
},
convert: function convert(value) {
return seconds2time(value / 1000, "MINUTES");
}
},
"h:mm:ss": {
check: function check(chart, max) {
return chart.getAttribute("secondsAsTime") && max >= 3600000 && max < 86400000;
},
convert: function convert(value) {
return seconds2time(value / 1000, "HOURS");
}
},
"d:h:mm": {
check: function check(chart, max) {
return chart.getAttribute("secondsAsTime") && max >= 86400000;
},
convert: function convert(value) {
return seconds2time(value / 1000, "DAYS");
}
},
"mo:d:h": {
check: function check(chart, max) {
return chart.getAttribute("secondsAsTime") && max >= 86400000 * 30;
},
convert: function convert(value) {
return seconds2time(value / 1000, "MONTHS");
}
},
"a:mo:d": {
check: function check(chart, max) {
return chart.getAttribute("secondsAsTime") && max >= 86400000 * 365;
},
convert: function convert(value) {
return seconds2time(value / 1000, "YEARS");
}
}
},
s: secondConverters,
min: makeSecondSourceConverters(60),
h: makeSecondSourceConverters(3600),
d: makeSecondSourceConverters(86400),
wk: makeSecondSourceConverters(604800),
mo: makeSecondSourceConverters(86400 * 30),
a: makeSecondSourceConverters(86400 * 365)
};