UNPKG

@alauda-fe/common

Version:

Alauda frontend team common codes.

111 lines 16.2 kB
import dayjs from 'dayjs'; import { last, max } from 'lodash-es'; import { DATE_FORMAT } from '../core/constants/public-api'; import { UNITS } from '../core/utils/public-api'; export const BASE_UNITS = ['K', 'M', 'G', 'T', 'P', 'E']; export const MEMORY_UNITS = BASE_UNITS.map(unit => unit + 'i'); export var UnitType; (function (UnitType) { UnitType["MEMORY"] = "memory"; UnitType["CAPACITY"] = "capacity"; })(UnitType || (UnitType = {})); export const MATCH_UNIT_DEFAULT_BASE = 1024; export const UnitMap = { [UnitType.MEMORY]: MEMORY_UNITS, [UnitType.CAPACITY]: UNITS, }; const _matchUnit = (value, { base = MATCH_UNIT_DEFAULT_BASE, threshold = 800, unitType = UnitType.CAPACITY, groups, unitRange, baseUnit, } = {}) => { const units = unitRange || UnitMap[unitType]; if (!value) { return { unit: baseUnit || units[0], units }; } const cloneUnits = units.map(item => item); const index = units.indexOf(baseUnit || units[0]); const isPositive = value > threshold; const unitsList = isPositive ? cloneUnits.splice(index) : cloneUnits.splice(0, index + 1).reverse(); let unitBase = 1; for (const unit of unitsList) { const _base = groups?.find(g => g.range?.slice(0, -1)?.includes(unit))?.base || base; if (value <= threshold) { return { unit, base: unitBase, units: unitsList }; } isPositive ? (unitBase *= _base) : (unitBase /= _base); isPositive ? (value /= _base) : (value *= _base); } return { unit: last(unitsList), base: unitBase, units: unitsList }; }; export const matchUnit = (value, params) => { const { unit, units, base } = _matchUnit(value, params); return { unit, base, exponent: units.indexOf(unit), }; }; export const adaptUnit = (seriesOrMetrics, params) => matchUnit(max(seriesOrMetrics.flatMap(({ data, values = data }) => values.map(d => d.y))), params); export function getTimeValueOf(value) { return dayjs(value).valueOf() / 1000; } export const CHART_DATA_FORMAT = `${DATE_FORMAT} HH:mm`; export const getTimeRanges = (value, unit) => ({ start: () => dateTimeRounding(dayjs().subtract(value, unit)), end: () => dayjs().format(CHART_DATA_FORMAT), startTime: () => getTimeValueOf(dateTimeRounding(dayjs().subtract(value, unit))), endTime: () => getTimeValueOf(dayjs().format(CHART_DATA_FORMAT)), }); export function dateTimeRounding(value) { return dayjs(value).format(CHART_DATA_FORMAT); } export const PICKER_TIME_RANGES = [ { name: 'nearly_30_minute', ...getTimeRanges(30, 'm'), step: 30, zoomStep: 30, }, { name: 'nearly_1_hour', ...getTimeRanges(1, 'hour'), step: 60, zoomStep: 30, }, { name: 'nearly_3_hour', ...getTimeRanges(3, 'hour'), step: ((3 * 60) / 60) * 60, zoomStep: ((3 * 60) / 360) * 60, }, { name: 'nearly_6_hour', ...getTimeRanges(6, 'hour'), step: ((6 * 60) / 120) * 60, zoomStep: ((6 * 60) / 720) * 60, }, { name: 'nearly_12_hour', ...getTimeRanges(12, 'hour'), step: ((12 * 60) / 120) * 60, zoomStep: ((12 * 60) / 720) * 60, }, { name: 'nearly_1_day', ...getTimeRanges(1, 'day'), step: ((24 * 60) / 120) * 60, zoomStep: ((24 * 60) / 720) * 60, }, { name: 'nearly_3_day', ...getTimeRanges(3, 'day'), step: ((3 * 24 * 60) / 120) * 60, zoomStep: ((3 * 24 * 60) / 720) * 60, }, { name: 'nearly_7_day', ...getTimeRanges(7, 'day'), step: ((7 * 24 * 60) / 120) * 60, zoomStep: ((7 * 24 * 60) / 720) * 60, }, ]; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvY29tbW9uL3NyYy9tZXRyaWMtY2hhcnQvaGVscGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQWdDLE1BQU0sT0FBTyxDQUFDO0FBQ3JELE9BQU8sRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRXRDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFJakQsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQVUsQ0FBQztBQUNsRSxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQztBQUUvRCxNQUFNLENBQU4sSUFBWSxRQUdYO0FBSEQsV0FBWSxRQUFRO0lBQ2xCLDZCQUFpQixDQUFBO0lBQ2pCLGlDQUFxQixDQUFBO0FBQ3ZCLENBQUMsRUFIVyxRQUFRLEtBQVIsUUFBUSxRQUduQjtBQWFELE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLElBQUksQ0FBQztBQUU1QyxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQXlDO0lBQzNELENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLFlBQVk7SUFDL0IsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUUsS0FBSztDQUMzQixDQUFDO0FBRUYsTUFBTSxVQUFVLEdBQUcsQ0FDakIsS0FBYSxFQUNiLEVBQ0UsSUFBSSxHQUFHLHVCQUF1QixFQUM5QixTQUFTLEdBQUcsR0FBRyxFQUNmLFFBQVEsR0FBRyxRQUFRLENBQUMsUUFBUSxFQUM1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cEIsR0FBRyxhQUFhLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQztRQUMxQixJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsRUFBRTtRQUNoQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsRUFBRTtLQUNyQztJQUNEO1FBQ0UsSUFBSSxFQUFFLGNBQWM7UUFDcEIsR0FBRyxhQUFhLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQztRQUMxQixJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsRUFBRTtRQUNoQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsRUFBRTtLQUNyQztDQUNGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZGF5anMsIHsgRGF5anMsIE1hbmlwdWxhdGVUeXBlIH0gZnJvbSAnZGF5anMnO1xuaW1wb3J0IHsgbGFzdCwgbWF4IH0gZnJvbSAnbG9kYXNoLWVzJztcblxuaW1wb3J0IHsgREFURV9GT1JNQVQgfSBmcm9tICcuLi9jb3JlL2NvbnN0YW50cy9wdWJsaWMtYXBpJztcbmltcG9ydCB7IFVOSVRTIH0gZnJvbSAnLi4vY29yZS91dGlscy9wdWJsaWMtYXBpJztcblxuaW1wb3J0IHsgUGlja2VyVGltZVJhbmdlcyB9IGZyb20gJy4vdHlwZXMnO1xuXG5leHBvcnQgY29uc3QgQkFTRV9VTklUUyA9IFsnSycsICdNJywgJ0cnLCAnVCcsICdQJywgJ0UnXSBhcyBjb25zdDtcbmV4cG9ydCBjb25zdCBNRU1PUllfVU5JVFMgPSBCQVNFX1VOSVRTLm1hcCh1bml0ID0+IHVuaXQgKyAnaScpO1xuXG5leHBvcnQgZW51bSBVbml0VHlwZSB7XG4gIE1FTU9SWSA9ICdtZW1vcnknLFxuICBDQVBBQ0lUWSA9ICdjYXBhY2l0eScsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWF0Y2hVbml0UGFyYW1zIHtcbiAgYmFzZT86IG51bWJlcjtcbiAgdGhyZXNob2xkPzogbnVtYmVyO1xuICB1bml0VHlwZT86IFVuaXRUeXBlO1xuICB1bml0UmFuZ2U/OiBzdHJpbmdbXTtcbiAgZGVmYXVsdFByZWZpeD86IGJvb2xlYW47XG4gIHByZWZpeD86IHN0cmluZztcbiAgYmFzZVVuaXQ/OiBzdHJpbmc7XG4gIGdyb3Vwcz86IEFycmF5PHsgYmFzZTogbnVtYmVyOyByYW5nZTogc3RyaW5nW10gfT47XG59XG5cbmV4cG9ydCBjb25zdCBNQVRDSF9VTklUX0RFRkFVTFRfQkFTRSA9IDEwMjQ7XG5cbmV4cG9ydCBjb25zdCBVbml0TWFwOiB7IFtrZXk6IHN0cmluZ106IHJlYWRvbmx5IHN0cmluZ1tdIH0gPSB7XG4gIFtVbml0VHlwZS5NRU1PUlldOiBNRU1PUllfVU5JVFMsXG4gIFtVbml0VHlwZS5DQVBBQ0lUWV06IFVOSVRTLFxufTtcblxuY29uc3QgX21hdGNoVW5pdCA9IChcbiAgdmFsdWU6IG51bWJlcixcbiAge1xuICAgIGJhc2UgPSBNQVRDSF9VTklUX0RFRkFVTFRfQkFTRSxcbiAgICB0aHJlc2hvbGQgPSA4MDAsXG4gICAgdW5pdFR5cGUgPSBVbml0VHlwZS5DQVBBQ0lUWSxcbiAgICBncm91cHMsXG4gICAgdW5pdFJhbmdlLFxuICAgIGJhc2VVbml0LFxuICB9OiBNYXRjaFVuaXRQYXJhbXMgPSB7fSxcbikgPT4ge1xuICBjb25zdCB1bml0cyA9IHVuaXRSYW5nZSB8fCBVbml0TWFwW3VuaXRUeXBlXTtcbiAgaWYgKCF2YWx1ZSkge1xuICAgIHJldHVybiB7IHVuaXQ6IGJhc2VVbml0IHx8IHVuaXRzWzBdLCB1bml0cyB9O1xuICB9XG4gIGNvbnN0IGNsb25lVW5pdHMgPSB1bml0cy5tYXAoaXRlbSA9PiBpdGVtKTtcbiAgY29uc3QgaW5kZXggPSB1bml0cy5pbmRleE9mKGJhc2VVbml0IHx8IHVuaXRzWzBdKTtcbiAgY29uc3QgaXNQb3NpdGl2ZSA9IHZhbHVlID4gdGhyZXNob2xkO1xuICBjb25zdCB1bml0c0xpc3QgPSBpc1Bvc2l0aXZlXG4gICAgPyBjbG9uZVVuaXRzLnNwbGljZShpbmRleClcbiAgICA6IGNsb25lVW5pdHMuc3BsaWNlKDAsIGluZGV4ICsgMSkucmV2ZXJzZSgpO1xuICBsZXQgdW5pdEJhc2UgPSAxO1xuICBmb3IgKGNvbnN0IHVuaXQgb2YgdW5pdHNMaXN0KSB7XG4gICAgY29uc3QgX2Jhc2U6IG51bWJlciA9XG4gICAgICBncm91cHM/LmZpbmQoZyA9PiBnLnJhbmdlPy5zbGljZSgwLCAtMSk/LmluY2x1ZGVzKHVuaXQpKT8uYmFzZSB8fCBiYXNlO1xuICAgIGlmICh2YWx1ZSA8PSB0aHJlc2hvbGQpIHtcbiAgICAgIHJldHVybiB7IHVuaXQsIGJhc2U6IHVuaXRCYXNlLCB1bml0czogdW5pdHNMaXN0IH07XG4gICAgfVxuICAgIGlzUG9zaXRpdmUgPyAodW5pdEJhc2UgKj0gX2Jhc2UpIDogKHVuaXRCYXNlIC89IF9iYXNlKTtcbiAgICBpc1Bvc2l0aXZlID8gKHZhbHVlIC89IF9iYXNlKSA6ICh2YWx1ZSAqPSBfYmFzZSk7XG4gIH1cbiAgcmV0dXJuIHsgdW5pdDogbGFzdCh1bml0c0xpc3QpLCBiYXNlOiB1bml0QmFzZSwgdW5pdHM6IHVuaXRzTGlzdCB9O1xufTtcblxuZXhwb3J0IGNvbnN0IG1hdGNoVW5pdCA9ICh2YWx1ZTogbnVtYmVyLCBwYXJhbXM/OiBNYXRjaFVuaXRQYXJhbXMpID0+IHtcbiAgY29uc3QgeyB1bml0LCB1bml0cywgYmFzZSB9ID0gX21hdGNoVW5pdCh2YWx1ZSwgcGFyYW1zKTtcbiAgcmV0dXJuIHtcbiAgICB1bml0LFxuICAgIGJhc2UsXG4gICAgZXhwb25lbnQ6IHVuaXRzLmluZGV4T2YodW5pdCksXG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgYWRhcHRVbml0ID0gKFxuICBzZXJpZXNPck1ldHJpY3M6IEFycmF5PHtcbiAgICBkYXRhPzogQXJyYXk8eyB4OiBudW1iZXI7IHk6IG51bWJlciB9PjtcbiAgICB2YWx1ZXM/OiBBcnJheTx7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0+O1xuICB9PixcbiAgcGFyYW1zPzogTWF0Y2hVbml0UGFyYW1zLFxuKSA9PlxuICBtYXRjaFVuaXQoXG4gICAgbWF4PG51bWJlcj4oXG4gICAgICBzZXJpZXNPck1ldHJpY3MuZmxhdE1hcCgoeyBkYXRhLCB2YWx1ZXMgPSBkYXRhIH0pID0+XG4gICAgICAgIHZhbHVlcy5tYXAoZCA9PiBkLnkpLFxuICAgICAgKSxcbiAgICApLFxuICAgIHBhcmFtcyxcbiAgKTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFRpbWVWYWx1ZU9mKHZhbHVlOiBzdHJpbmcpIHtcbiAgcmV0dXJuIGRheWpzKHZhbHVlKS52YWx1ZU9mKCkgLyAxMDAwO1xufVxuXG5leHBvcnQgY29uc3QgQ0hBUlRfREFUQV9GT1JNQVQgPSBgJHtEQVRFX0ZPUk1BVH0gSEg6bW1gO1xuXG5leHBvcnQgY29uc3QgZ2V0VGltZVJhbmdlcyA9ICh2YWx1ZTogbnVtYmVyLCB1bml0OiBNYW5pcHVsYXRlVHlwZSkgPT4gKHtcbiAgc3RhcnQ6ICgpID0+IGRhdGVUaW1lUm91bmRpbmcoZGF5anMoKS5zdWJ0cmFjdCh2YWx1ZSwgdW5pdCkpLFxuICBlbmQ6ICgpID0+IGRheWpzKCkuZm9ybWF0KENIQVJUX0RBVEFfRk9STUFUKSxcbiAgc3RhcnRUaW1lOiAoKSA9PlxuICAgIGdldFRpbWVWYWx1ZU9mKGRhdGVUaW1lUm91bmRpbmcoZGF5anMoKS5zdWJ0cmFjdCh2YWx1ZSwgdW5pdCkpKSxcbiAgZW5kVGltZTogKCkgPT4gZ2V0VGltZVZhbHVlT2YoZGF5anMoKS5mb3JtYXQoQ0hBUlRfREFUQV9GT1JNQVQpKSxcbn0pO1xuXG5leHBvcnQgZnVuY3Rpb24gZGF0ZVRpbWVSb3VuZGluZyh2YWx1ZTogbnVtYmVyIHwgRGF5anMpIHtcbiAgcmV0dXJuIGRheWpzKHZhbHVlKS5mb3JtYXQoQ0hBUlRfREFUQV9GT1JNQVQpO1xufVxuXG5leHBvcnQgY29uc3QgUElDS0VSX1RJTUVfUkFOR0VTOiBQaWNrZXJUaW1lUmFuZ2VzW10gPSBbXG4gIHtcbiAgICBuYW1lOiAnbmVhcmx5XzMwX21pbnV0ZScsXG4gICAgLi4uZ2V0VGltZVJhbmdlcygzMCwgJ20nKSxcbiAgICBzdGVwOiAzMCxcbiAgICB6b29tU3RlcDogMzAsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnbmVhcmx5XzFfaG91cicsXG4gICAgLi4uZ2V0VGltZVJhbmdlcygxLCAnaG91cicpLFxuICAgIHN0ZXA6IDYwLFxuICAgIHpvb21TdGVwOiAzMCxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICduZWFybHlfM19ob3VyJyxcbiAgICAuLi5nZXRUaW1lUmFuZ2VzKDMsICdob3VyJyksXG4gICAgc3RlcDogKCgzICogNjApIC8gNjApICogNjAsXG4gICAgem9vbVN0ZXA6ICgoMyAqIDYwKSAvIDM2MCkgKiA2MCxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICduZWFybHlfNl9ob3VyJyxcbiAgICAuLi5nZXRUaW1lUmFuZ2VzKDYsICdob3VyJyksXG4gICAgc3RlcDogKCg2ICogNjApIC8gMTIwKSAqIDYwLFxuICAgIHpvb21TdGVwOiAoKDYgKiA2MCkgLyA3MjApICogNjAsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnbmVhcmx5XzEyX2hvdXInLFxuICAgIC4uLmdldFRpbWVSYW5nZXMoMTIsICdob3VyJyksXG4gICAgc3RlcDogKCgxMiAqIDYwKSAvIDEyMCkgKiA2MCxcbiAgICB6b29tU3RlcDogKCgxMiAqIDYwKSAvIDcyMCkgKiA2MCxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICduZWFybHlfMV9kYXknLFxuICAgIC4uLmdldFRpbWVSYW5nZXMoMSwgJ2RheScpLFxuICAgIHN0ZXA6ICgoMjQgKiA2MCkgLyAxMjApICogNjAsXG4gICAgem9vbVN0ZXA6ICgoMjQgKiA2MCkgLyA3MjApICogNjAsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnbmVhcmx5XzNfZGF5JyxcbiAgICAuLi5nZXRUaW1lUmFuZ2VzKDMsICdkYXknKSxcbiAgICBzdGVwOiAoKDMgKiAyNCAqIDYwKSAvIDEyMCkgKiA2MCxcbiAgICB6b29tU3RlcDogKCgzICogMjQgKiA2MCkgLyA3MjApICogNjAsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnbmVhcmx5XzdfZGF5JyxcbiAgICAuLi5nZXRUaW1lUmFuZ2VzKDcsICdkYXknKSxcbiAgICBzdGVwOiAoKDcgKiAyNCAqIDYwKSAvIDEyMCkgKiA2MCxcbiAgICB6b29tU3RlcDogKCg3ICogMjQgKiA2MCkgLyA3MjApICogNjAsXG4gIH0sXG5dO1xuIl19