123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145 |
- import {Client, ResponseMeta} from 'sentry/api';
- import {getInterval} from 'sentry/components/charts/utils';
- import {normalizeDateTimeParams} from 'sentry/components/organizations/pageFilters/parse';
- import {DateString, MetricsApiResponse, Organization} from 'sentry/types';
- import {defined} from 'sentry/utils';
- import {getDateTimeParams, getMetricsInterval, parseMRI} from 'sentry/utils/metrics';
- export type DoReleaseHealthRequestOptions = {
- field: string[];
- orgSlug: Organization['slug'];
- cursor?: string;
- end?: DateString;
- environment?: Readonly<string[]>;
- groupBy?: string[];
- includeAllArgs?: boolean;
- includeSeries?: number;
- includeTotals?: number;
- interval?: string;
- limit?: number;
- orderBy?: string;
- project?: Readonly<number[]>;
- query?: string;
- start?: DateString;
- statsPeriod?: string | null;
- statsPeriodEnd?: string;
- statsPeriodStart?: string;
- };
- export const doReleaseHealthRequest = (
- api: Client,
- {
- field,
- orgSlug,
- cursor,
- environment,
- groupBy,
- includeSeries,
- includeTotals,
- interval,
- limit,
- orderBy,
- project,
- query,
- includeAllArgs = false,
- statsPeriodStart,
- statsPeriodEnd,
- ...dateTime
- }: DoReleaseHealthRequestOptions
- ): Promise<MetricsApiResponse | [MetricsApiResponse, string, ResponseMeta]> => {
- const {start, end, statsPeriod} = normalizeDateTimeParams(dateTime, {
- allowEmptyPeriod: true,
- });
- const urlQuery = Object.fromEntries(
- Object.entries({
- field: field.filter(f => !!f),
- cursor,
- end,
- environment,
- groupBy: groupBy?.filter(g => !!g),
- includeSeries,
- includeTotals,
- interval: interval || getInterval({start, end, period: statsPeriod}),
- query: query || undefined,
- per_page: limit,
- project,
- orderBy,
- start,
- statsPeriod,
- statsPeriodStart,
- statsPeriodEnd,
- }).filter(([, value]) => defined(value) && value !== '')
- );
- const pathname = `/organizations/${orgSlug}/metrics/data/`;
- return api.requestPromise(pathname, {includeAllArgs, query: urlQuery});
- };
- export type DoMetricsRequestOptions = {
- field: string[];
- orgSlug: Organization['slug'];
- cursor?: string;
- end?: DateString;
- environment?: Readonly<string[]>;
- groupBy?: string[];
- includeAllArgs?: boolean;
- includeSeries?: number;
- includeTotals?: number;
- interval?: string;
- limit?: number;
- orderBy?: string;
- project?: Readonly<number[]>;
- query?: string;
- start?: DateString;
- statsPeriod?: string | null;
- statsPeriodEnd?: string;
- statsPeriodStart?: string;
- };
- export const doMetricsRequest = (
- api: Client,
- {
- field,
- orgSlug,
- environment,
- groupBy,
- interval,
- limit,
- project,
- query,
- includeAllArgs = false,
- ...dateTime
- }: DoReleaseHealthRequestOptions
- ): Promise<MetricsApiResponse | [MetricsApiResponse, string, ResponseMeta]> => {
- const {useCase} = parseMRI(field[0]) ?? {useCase: 'custom'};
- const {start, end, statsPeriod, utc} = normalizeDateTimeParams(dateTime, {
- allowEmptyPeriod: true,
- allowAbsoluteDatetime: true,
- allowAbsolutePageDatetime: true,
- });
- // @ts-expect-error
- const datetime = getDateTimeParams({start, end, period: statsPeriod, utc});
- const metricsInterval = getMetricsInterval(datetime, useCase);
- const urlQuery = {
- ...datetime,
- query,
- project,
- environment,
- field,
- useCase,
- interval: interval || metricsInterval,
- groupBy,
- per_page: limit,
- useNewMetricsLayer: false,
- };
- const pathname = `/organizations/${orgSlug}/metrics/data/`;
- return api.requestPromise(pathname, {includeAllArgs, query: urlQuery});
- };
|