1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- import * as Sentry from '@sentry/react';
- import type {MetricMeta} from 'sentry/types/metrics';
- import {
- getDefaultAggregation,
- isAllowedAggregation,
- isVirtualMetric,
- } from 'sentry/utils/metrics';
- import {emptyMetricsQueryWidget} from 'sentry/utils/metrics/constants';
- /**
- * Creates a new widget, can be passed a metrics meta object to base the new widget on it
- * @param metricsMeta metrics meta on which the widget should be based
- * @param defaultCondition selected condition. only needed for virtual metrics
- * @returns
- */
- export function getNewMetricsWidget(metricsMeta?: MetricMeta, defaultCondition?: number) {
- const mri = metricsMeta?.mri || emptyMetricsQueryWidget.mri;
- let condition = emptyMetricsQueryWidget.condition;
- let aggregation = getDefaultAggregation(mri);
- if (metricsMeta && isVirtualMetric(metricsMeta)) {
- if (!defaultCondition) {
- Sentry.captureMessage(
- 'Metrics: Trying to create widget from virtual MRI without condition'
- );
- // Invalid data -> falling back to default
- return emptyMetricsQueryWidget;
- }
- condition = defaultCondition;
- const allowedAggregation = metricsMeta.operations.find(isAllowedAggregation);
- if (!allowedAggregation) {
- Sentry.captureMessage(
- 'Metrics: No allowed aggregations available for virtual metric found'
- );
- // Invalid data -> falling back to default
- return emptyMetricsQueryWidget;
- }
- aggregation = allowedAggregation;
- }
- return {
- ...emptyMetricsQueryWidget,
- mri,
- condition,
- aggregation,
- };
- }
|