mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
* Fix lint error in types.ts * Bump eslint and its deps to latest * Add eslintignore and remove not needed eslintrcs * Change webpack configs eslint config * Update package.jsons and removed unused eslintrc files * Chore yarn lint --fix 💅 * Add devenv to eslintignore * Remove eslint disable comments for rules that are not used * Remaining eslint fixes 💅 * Bump grafana/eslint-config 💥 * Modify package.json No need for duplicate checks. * Modify eslintignore to ignore data and dist folders * Revert removing .eslintrc to make sure not to use certain packages * Modify package.json to remove not needed command * Use gitignore for ignoring paths
124 lines
3.9 KiB
TypeScript
124 lines
3.9 KiB
TypeScript
// Copyright (c) 2017 Uber Technologies, Inc.
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
import moment from 'moment-timezone';
|
|
import _round from 'lodash/round';
|
|
|
|
import { toFloatPrecision } from './number';
|
|
|
|
const TODAY = 'Today';
|
|
const YESTERDAY = 'Yesterday';
|
|
|
|
export const STANDARD_DATE_FORMAT = 'YYYY-MM-DD';
|
|
export const STANDARD_TIME_FORMAT = 'HH:mm';
|
|
export const STANDARD_DATETIME_FORMAT = 'MMMM D YYYY, HH:mm:ss.SSS';
|
|
export const ONE_MILLISECOND = 1000;
|
|
export const ONE_SECOND = 1000 * ONE_MILLISECOND;
|
|
export const DEFAULT_MS_PRECISION = Math.log10(ONE_MILLISECOND);
|
|
|
|
/**
|
|
* @param {number} timestamp
|
|
* @param {number} initialTimestamp
|
|
* @param {number} totalDuration
|
|
* @return {number} 0-100 percentage
|
|
*/
|
|
export function getPercentageOfDuration(duration: number, totalDuration: number) {
|
|
return (duration / totalDuration) * 100;
|
|
}
|
|
|
|
const quantizeDuration = (duration: number, floatPrecision: number, conversionFactor: number) =>
|
|
toFloatPrecision(duration / conversionFactor, floatPrecision) * conversionFactor;
|
|
|
|
/**
|
|
* @param {number} duration (in microseconds)
|
|
* @return {string} formatted, unit-labelled string with time in milliseconds
|
|
*/
|
|
export function formatDate(duration: number) {
|
|
return moment(duration / ONE_MILLISECOND).format(STANDARD_DATE_FORMAT);
|
|
}
|
|
|
|
/**
|
|
* @param {number} duration (in microseconds)
|
|
* @return {string} formatted, unit-labelled string with time in milliseconds
|
|
*/
|
|
export function formatTime(duration: number) {
|
|
return moment(duration / ONE_MILLISECOND).format(STANDARD_TIME_FORMAT);
|
|
}
|
|
|
|
/**
|
|
* @param {number} duration (in microseconds)
|
|
* @return {string} formatted, unit-labelled string with time in milliseconds
|
|
*/
|
|
export function formatDatetime(duration: number) {
|
|
return moment(duration / ONE_MILLISECOND).format(STANDARD_DATETIME_FORMAT);
|
|
}
|
|
|
|
/**
|
|
* @param {number} duration (in microseconds)
|
|
* @return {string} formatted, unit-labelled string with time in milliseconds
|
|
*/
|
|
export function formatMillisecondTime(duration: number) {
|
|
const targetDuration = quantizeDuration(duration, DEFAULT_MS_PRECISION, ONE_MILLISECOND);
|
|
return `${moment.duration(targetDuration / ONE_MILLISECOND).asMilliseconds()}ms`;
|
|
}
|
|
|
|
/**
|
|
* @param {number} duration (in microseconds)
|
|
* @return {string} formatted, unit-labelled string with time in seconds
|
|
*/
|
|
export function formatSecondTime(duration: number) {
|
|
const targetDuration = quantizeDuration(duration, DEFAULT_MS_PRECISION, ONE_SECOND);
|
|
return `${moment.duration(targetDuration / ONE_MILLISECOND).asSeconds()}s`;
|
|
}
|
|
|
|
/**
|
|
* Humanizes the duration based on the inputUnit
|
|
*
|
|
* Example:
|
|
* 5000ms => 5s
|
|
* 1000μs => 1ms
|
|
*/
|
|
export function formatDuration(duration: number, inputUnit = 'microseconds'): string {
|
|
let d = duration;
|
|
if (inputUnit === 'microseconds') {
|
|
d = duration / 1000;
|
|
}
|
|
let units = 'ms';
|
|
if (d >= 1000) {
|
|
units = 's';
|
|
d /= 1000;
|
|
}
|
|
return _round(d, 2) + units;
|
|
}
|
|
|
|
export function formatRelativeDate(value: any, fullMonthName = false) {
|
|
const m = moment.isMoment(value) ? value : moment(value);
|
|
const monthFormat = fullMonthName ? 'MMMM' : 'MMM';
|
|
const dt = new Date();
|
|
if (dt.getFullYear() !== m.year()) {
|
|
return m.format(`${monthFormat} D, YYYY`);
|
|
}
|
|
const mMonth = m.month();
|
|
const mDate = m.date();
|
|
const date = dt.getDate();
|
|
if (mMonth === dt.getMonth() && mDate === date) {
|
|
return TODAY;
|
|
}
|
|
dt.setDate(date - 1);
|
|
if (mMonth === dt.getMonth() && mDate === dt.getDate()) {
|
|
return YESTERDAY;
|
|
}
|
|
return m.format(`${monthFormat} D`);
|
|
}
|