mirror of
https://github.com/hanzoai/sentinel.git
synced 2026-09-29 22:34:33 +00:00
55 lines
1.7 KiB
TypeScript
55 lines
1.7 KiB
TypeScript
import moment from 'moment';
|
|
|
|
import {getFormat} from 'sentry/utils/dates';
|
|
|
|
import type {TimeWindow, TimeWindowOptions} from './types';
|
|
|
|
// Stores the elapsed minutes for each selectable resolution
|
|
export const resolutionElapsedMinutes: Record<TimeWindow, number> = {
|
|
'1h': 60,
|
|
'24h': 60 * 24,
|
|
'7d': 60 * 24 * 7,
|
|
'30d': 60 * 24 * 30,
|
|
};
|
|
|
|
export function getStartFromTimeWindow(end: Date, timeWindow: TimeWindow): Date {
|
|
const start = moment(end).subtract(resolutionElapsedMinutes[timeWindow], 'minute');
|
|
|
|
return start.toDate();
|
|
}
|
|
|
|
// The pixels to allocate to each time label based on (MMM DD HH:SS AM/PM)
|
|
const TIMELABEL_WIDTH = 100;
|
|
|
|
export function getConfigFromTimeRange(
|
|
start: Date,
|
|
end: Date,
|
|
timelineWidth: number
|
|
): TimeWindowOptions {
|
|
// Acceptable intervals between time labels, in minutes
|
|
const minuteRanges = [1, 10, 30, 60, 4 * 60, 8 * 60, 12 * 60];
|
|
const startEndMinutes = (end.getTime() - start.getTime()) / (1000 * 60);
|
|
const timeLabelMinutes = startEndMinutes * (TIMELABEL_WIDTH / timelineWidth);
|
|
const subMinutePxBuckets = startEndMinutes < timelineWidth;
|
|
|
|
for (const minutes of minuteRanges) {
|
|
if (minutes >= Math.floor(timeLabelMinutes)) {
|
|
return {
|
|
dateLabelFormat: getFormat({timeOnly: true, seconds: subMinutePxBuckets}),
|
|
elapsedMinutes: startEndMinutes,
|
|
timeMarkerInterval: minutes,
|
|
dateTimeProps: {timeOnly: true},
|
|
};
|
|
}
|
|
}
|
|
|
|
// Calculate days between each time label interval for larger time ranges
|
|
const timeLabelIntervalDays = Math.ceil(timeLabelMinutes / (60 * 24));
|
|
return {
|
|
dateLabelFormat: getFormat(),
|
|
elapsedMinutes: startEndMinutes,
|
|
timeMarkerInterval: timeLabelIntervalDays * 60 * 24,
|
|
dateTimeProps: {dateOnly: true},
|
|
};
|
|
}
|