1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- import * as Sentry from '@sentry/react';
- import type {DateTimeObject, GranularityLadder} from 'sentry/components/charts/utils';
- import {getDiffInMinutes} from 'sentry/components/charts/utils';
- import {
- COUNTER_GRANULARITIES,
- DISTRIBUTION_GRANULARITIES,
- } from 'sentry/views/performance/database/settings';
- import type {Aggregate, SpanFunctions} from 'sentry/views/starfish/types';
- import {
- COUNTER_AGGREGATES,
- DISTRIBUTION_AGGREGATES,
- SPAN_FUNCTIONS,
- } from 'sentry/views/starfish/types';
- export function getIntervalForMetricFunction(
- metricFunction: Aggregate | SpanFunctions | string,
- datetimeObj: DateTimeObject
- ) {
- const {start, end, period, utc} = datetimeObj;
- const interval = Sentry.startSpan(
- {
- op: 'function',
- name: 'getIntervalForMetricFunction',
- attributes: {
- start: start ? start.toString() : undefined,
- end: end ? end.toString() : undefined,
- period: period || undefined,
- utc: utc || undefined,
- },
- },
- () => {
- const ladder = GRANULARITIES[metricFunction] ?? COUNTER_GRANULARITIES;
- return ladder.getInterval(getDiffInMinutes(datetimeObj));
- }
- );
- return interval;
- }
- type GranularityLookup = {
- [metricName: string]: GranularityLadder;
- };
- const GRANULARITIES: GranularityLookup = {};
- function registerGranularities(
- spanFunctionNames: readonly string[],
- granularities: GranularityLadder
- ) {
- spanFunctionNames.forEach(spanFunctionName => {
- GRANULARITIES[spanFunctionName] = granularities;
- });
- }
- registerGranularities(COUNTER_AGGREGATES, COUNTER_GRANULARITIES);
- registerGranularities(DISTRIBUTION_AGGREGATES, DISTRIBUTION_GRANULARITIES);
- registerGranularities(SPAN_FUNCTIONS, COUNTER_GRANULARITIES);
|