123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141 |
- import {addErrorMessage} from 'sentry/actionCreators/indicator';
- import MetricsMetaActions from 'sentry/actions/metricsMetaActions';
- import MetricsTagActions from 'sentry/actions/metricTagActions';
- import {Client} from 'sentry/api';
- import {getInterval} from 'sentry/components/charts/utils';
- import {normalizeDateTimeParams} from 'sentry/components/organizations/pageFilters/parse';
- import {t} from 'sentry/locale';
- import MetricsMetaStore from 'sentry/stores/metricsMetaStore';
- import MetricsTagStore from 'sentry/stores/metricsTagStore';
- import {
- DateString,
- MetricsApiResponse,
- MetricsMeta,
- MetricsTag,
- Organization,
- } from 'sentry/types';
- import {defined} from 'sentry/utils';
- import handleXhrErrorResponse from 'sentry/utils/handleXhrErrorResponse';
- export type DoMetricsRequestOptions = {
- field: string[];
- orgSlug: Organization['slug'];
- cursor?: string;
- end?: DateString;
- environment?: Readonly<string[]>;
- groupBy?: string[];
- includeAllArgs?: boolean;
- 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,
- cursor,
- environment,
- groupBy,
- interval,
- limit,
- orderBy,
- project,
- query,
- includeAllArgs = false,
- statsPeriodStart,
- statsPeriodEnd,
- ...dateTime
- }: DoMetricsRequestOptions
- ): Promise<MetricsApiResponse> => {
- 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),
- 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});
- };
- function tagFetchSuccess(tags: MetricsTag[]) {
- MetricsTagActions.loadMetricsTagsSuccess(tags);
- }
- export function fetchMetricsTags(
- api: Client,
- orgSlug: Organization['slug'],
- projects?: number[],
- fields?: string[]
- ): Promise<MetricsTag[]> {
- MetricsTagStore.reset();
- const promise = api.requestPromise(`/organizations/${orgSlug}/metrics/tags/`, {
- query: {
- project: projects,
- metric: fields,
- },
- });
- promise.then(tagFetchSuccess).catch(response => {
- const errorResponse = response?.responseJSON ?? t('Unable to fetch metric tags');
- addErrorMessage(errorResponse);
- handleXhrErrorResponse(errorResponse)(response);
- });
- return promise;
- }
- function metaFetchSuccess(metricsMeta: MetricsMeta[]) {
- MetricsMetaActions.loadMetricsMetaSuccess(metricsMeta);
- }
- export function fetchMetricsFields(
- api: Client,
- orgSlug: Organization['slug'],
- projects?: number[]
- ): Promise<MetricsMeta[]> {
- MetricsMetaStore.reset();
- const promise: Promise<MetricsMeta[]> = api.requestPromise(
- `/organizations/${orgSlug}/metrics/meta/`,
- {
- query: {
- project: projects,
- },
- }
- );
- promise.then(metaFetchSuccess).catch(response => {
- const errorResponse = response?.responseJSON ?? t('Unable to fetch metric fields');
- addErrorMessage(errorResponse);
- handleXhrErrorResponse(errorResponse)(response);
- });
- return promise;
- }
|