UNPKG

@netdata/charts

Version:

Netdata frontend SDK and chart utilities

82 lines 3.22 kB
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); };