@netdata/charts
Version:
Netdata frontend SDK and chart utilities
82 lines • 3.22 kB
JavaScript
import scalableUnits, { keys as scalableUnitKeys } from "./units/scalableUnits";
var heatmapValueRegex = /^\d*\.?\d+$/;
var heatmapInfRegex = /^\+inf$/i;
var heatmapPrefixRegex = /^.+_(\d*\.?\d+|\+[Ii]nf)$/;
var getHeatmapValueLabel = function getHeatmapValueLabel(value) {
var _value$match;
if (typeof value !== "string") return value;
return ((_value$match = value.match(heatmapPrefixRegex)) === null || _value$match === void 0 ? void 0 : _value$match[1]) || value;
};
export var parseHeatmapValue = function parseHeatmapValue(value) {
var label = getHeatmapValueLabel(value);
if (typeof label !== "string") return NaN;
if (heatmapInfRegex.test(label)) return Infinity;
if (!heatmapValueRegex.test(label)) return NaN;
return parseFloat(label);
};
export var isHeatmapNumeric = function isHeatmapNumeric(values) {
return values.every(function (value) {
return !isNaN(parseHeatmapValue(value));
});
};
export var isHeatmapBinary = function isHeatmapBinary(values) {
var hasBinaryCandidate = false;
return values.every(function (value) {
var parsed = parseHeatmapValue(value);
if (!isFinite(parsed) || parsed <= 1) return true;
hasBinaryCandidate = true;
return Number.isInteger(parsed) && parsed > 0 && Number.isInteger(Math.log2(parsed));
}) && hasBinaryCandidate;
};
export var detectHeatmapScale = function detectHeatmapScale(values) {
if (!values.length || !isHeatmapNumeric(values)) return null;
return isHeatmapBinary(values) ? "binary" : "num";
};
export var sortHeatmapValues = function sortHeatmapValues(values) {
if (!isHeatmapNumeric(values)) return null;
return values.map(function (value, index) {
return {
value: value,
index: index,
parsed: parseHeatmapValue(value)
};
}).sort(function (a, b) {
return a.parsed - b.parsed || a.index - b.index;
}).map(function (_ref) {
var value = _ref.value;
return value;
});
};
var getScaleEntries = function getScaleEntries(scale) {
return (scalableUnitKeys[scale] || []).map(function (prefix) {
return {
prefix: prefix === "1" ? "" : prefix,
divider: prefix === "1" ? 1 : scalableUnits[scale][prefix]
};
});
};
var formatNumber = function formatNumber(value) {
if (value > 0 && value < 0.01) return parseFloat(value.toPrecision(3)).toString();
return parseFloat(value.toFixed(2)).toString();
};
export var formatScaledValue = function formatScaledValue(value, scale) {
if (!value) return "0";
var entries = getScaleEntries(scale);
var entry = entries.reduce(function (selected, candidate) {
return candidate.divider <= value && candidate.divider > selected.divider ? candidate : selected;
}, {
prefix: "",
divider: 0
});
if (!entry.divider) return formatNumber(value);
return "".concat(formatNumber(value / entry.divider)).concat(entry.prefix);
};
export var formatHeatmapLabel = function formatHeatmapLabel(value, scale) {
var label = getHeatmapValueLabel(value);
if (typeof label !== "string") return value;
if (heatmapInfRegex.test(label)) return "+Inf";
if (!scale) return label;
var parsed = parseHeatmapValue(label);
if (isNaN(parsed)) return label;
return formatScaledValue(parsed, scale);
};