123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157 |
- import type {Client} from 'sentry/api';
- import type {PageFilters} from 'sentry/types/core';
- import type {TagCollection} from 'sentry/types/group';
- import type {
- EventsStats,
- MultiSeriesEventsStats,
- Organization,
- } from 'sentry/types/organization';
- import toArray from 'sentry/utils/array/toArray';
- import type {CustomMeasurementCollection} from 'sentry/utils/customMeasurements/customMeasurements';
- import type {EventsTableData, TableData} from 'sentry/utils/discover/discoverQuery';
- import {getAggregations} from 'sentry/utils/discover/fields';
- import {
- type DiscoverQueryExtras,
- type DiscoverQueryRequestParams,
- doDiscoverQuery,
- } from 'sentry/utils/discover/genericDiscoverQuery';
- import {DiscoverDatasets} from 'sentry/utils/discover/types';
- import {TRACE_FIELD_DEFINITIONS} from 'sentry/utils/fields';
- import type {MEPState} from 'sentry/utils/performance/contexts/metricsEnhancedSetting';
- import type {OnDemandControlContext} from 'sentry/utils/performance/contexts/onDemandControl';
- import {
- type DatasetConfig,
- handleOrderByReset,
- } from 'sentry/views/dashboards/datasetConfig/base';
- import {
- filterAggregateParams,
- getCustomEventsFieldRenderer,
- getTableSortOptions,
- transformEventsResponseToSeries,
- transformEventsResponseToTable,
- } from 'sentry/views/dashboards/datasetConfig/errorsAndTransactions';
- import {DisplayType, type Widget, type WidgetQuery} from 'sentry/views/dashboards/types';
- import {eventViewFromWidget} from 'sentry/views/dashboards/utils';
- import {EventsSearchBar} from 'sentry/views/dashboards/widgetBuilder/buildSteps/filterResultsStep/eventsSearchBar';
- import {generateFieldOptions} from 'sentry/views/discover/utils';
- const DEFAULT_WIDGET_QUERY: WidgetQuery = {
- name: '',
- fields: ['span.op', 'count()'],
- columns: ['span.op'],
- fieldAliases: [],
- aggregates: ['count()'],
- conditions: '',
- orderby: '-count()',
- };
- export const SpansConfig: DatasetConfig<
- EventsStats | MultiSeriesEventsStats,
- TableData | EventsTableData
- > = {
- defaultWidgetQuery: DEFAULT_WIDGET_QUERY,
- enableEquations: false, // TODO: Should EAP support equations?
- getCustomFieldRenderer: getCustomEventsFieldRenderer,
- SearchBar: EventsSearchBar, // TODO: Replace with a custom EAP search bar
- filterSeriesSortOptions: () => () => true,
- filterYAxisAggregateParams: () => () => true,
- filterYAxisOptions: () => () => true,
- getTableFieldOptions: getEventsTableFieldOptions,
- // getTimeseriesSortOptions: (organization, widgetQuery, tags) =>
- // getTimeseriesSortOptions(organization, widgetQuery, tags, getEventsTableFieldOptions),
- getTableSortOptions: getTableSortOptions,
- getGroupByFieldOptions: getEventsTableFieldOptions,
- handleOrderByReset,
- supportedDisplayTypes: [
- // DisplayType.AREA,
- // DisplayType.BAR,
- // DisplayType.BIG_NUMBER,
- // DisplayType.LINE,
- DisplayType.TABLE,
- // DisplayType.TOP_N,
- ],
- getTableRequest: (
- api: Client,
- _widget: Widget,
- query: WidgetQuery,
- organization: Organization,
- pageFilters: PageFilters,
- _onDemandControlContext?: OnDemandControlContext,
- limit?: number,
- cursor?: string,
- referrer?: string,
- _mepSetting?: MEPState | null
- ) => {
- return getEventsRequest(
- api,
- query,
- organization,
- pageFilters,
- limit,
- cursor,
- referrer
- );
- },
- // getSeriesRequest: getErrorsSeriesRequest,
- transformTable: transformEventsResponseToTable,
- transformSeries: transformEventsResponseToSeries,
- filterAggregateParams,
- };
- // TODO: Update tags to use EAP tags
- function getEventsTableFieldOptions(
- organization: Organization,
- tags?: TagCollection,
- _customMeasurements?: CustomMeasurementCollection
- ) {
- return generateFieldOptions({
- organization,
- tagKeys: Object.values(tags ?? {}).map(({key}) => key),
- fieldKeys: Object.keys(TRACE_FIELD_DEFINITIONS),
- // TODO: Use EAP specific aggregations
- aggregations: getAggregations(DiscoverDatasets.TRANSACTIONS),
- });
- }
- function getEventsRequest(
- api: Client,
- query: WidgetQuery,
- organization: Organization,
- pageFilters: PageFilters,
- limit?: number,
- cursor?: string,
- referrer?: string,
- _mepSetting?: MEPState | null,
- queryExtras?: DiscoverQueryExtras
- ) {
- const url = `/organizations/${organization.slug}/events/`;
- const eventView = eventViewFromWidget('', query, pageFilters);
- const params: DiscoverQueryRequestParams = {
- per_page: limit,
- cursor,
- referrer,
- dataset: DiscoverDatasets.SPANS_EAP,
- ...queryExtras,
- };
- if (query.orderby) {
- params.sort = toArray(query.orderby);
- }
- return doDiscoverQuery<EventsTableData>(
- api,
- url,
- {
- ...eventView.generateQueryStringObject(),
- ...params,
- },
- // Tries events request up to 3 times on rate limit
- {
- retry: {
- statusCodes: [429],
- tries: 3,
- },
- }
- );
- }
|