Files
2024-02-15 17:01:50 +00:00

79 lines
1.9 KiB
TypeScript

import type {Theme} from '@emotion/react';
import type {Location, Query} from 'history';
import EventView from 'sentry/utils/discover/eventView';
import type {AnomalyConfidence} from 'sentry/utils/performance/anomalies/anomaliesQuery';
import {decodeScalar} from 'sentry/utils/queryString';
import {MutableSearch} from 'sentry/utils/tokenizeSearch';
export function generateAnomaliesRoute({orgSlug}: {orgSlug: string}): string {
return `/organizations/${orgSlug}/performance/summary/anomalies/`;
}
export const ANOMALY_FLAG = 'performance-anomaly-detection-ui';
export function anomaliesRouteWithQuery({
orgSlug,
transaction,
projectID,
query,
}: {
orgSlug: string;
query: Query;
transaction: string;
projectID?: string | string[];
}) {
const pathname = generateAnomaliesRoute({
orgSlug,
});
return {
pathname,
query: {
transaction,
project: projectID,
environment: query.environment,
statsPeriod: query.statsPeriod,
start: query.start,
end: query.end,
query: query.query,
},
};
}
export function anomalyToColor(anomalyConfidence: AnomalyConfidence, theme: Theme) {
// Map inside function so it's reactive to theme.
const map: Record<AnomalyConfidence, string> = {
high: theme.red300,
low: theme.yellow300,
};
return map[anomalyConfidence];
}
export function generateAnomaliesEventView({
location,
transactionName,
}: {
location: Location;
transactionName: string;
}): EventView {
const query = decodeScalar(location.query.query, '');
const conditions = new MutableSearch(query);
conditions.setFilterValues('transaction', [transactionName]);
const eventView = EventView.fromNewQueryWithLocation(
{
id: undefined,
version: 2,
name: transactionName,
fields: ['tpm()'], // TODO(k-fish): Modify depending on api url later.
query: conditions.formatString(),
projects: [],
},
location
);
return eventView;
}