123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- import {
- defaultConfig,
- parseSearch,
- type SearchConfig,
- } from 'sentry/components/searchSyntax/parser';
- import type {TraceTree} from 'sentry/views/performance/newTraceDetails/traceModels/traceTree';
- // Span keys
- type TransactionPrefix = 'Transaction';
- // The keys can be prefixed by the entity type they belong to, this ensures that
- // conflicting keys on different entities are resolved to the correct entity.
- type TransactionKey =
- | `${TransactionPrefix}.${keyof TraceTree.Transaction}`
- | keyof TraceTree.Transaction;
- // Transaction keys
- const TRANSACTION_TEXT_KEYS: TransactionKey[] = [
- 'event_id',
- 'project_slug',
- 'parent_event_id',
- 'parent_span_id',
- 'span_id',
- 'transaction',
- 'transaction.op',
- 'transaction.status',
- ];
- const TRANSACTION_NUMERIC_KEYS: TransactionKey[] = [
- 'project_id',
- 'start_timestamp',
- 'timestamp',
- ];
- const TRANSACTION_DURATION_KEYS: TransactionKey[] = ['transaction.duration'];
- const TRANSACTION_DURATION_SYNTHETIC_KEYS: TransactionKey[] = [
- // @ts-expect-error
- 'duration',
- // @ts-expect-error
- 'total_time',
- ];
- // @TODO the current date parsing does not support timestamps, so we
- // exclude these keys for now and parse them as numeric keys
- const TRANSACTION_DATE_KEYS: TransactionKey[] = [
- // 'start_timestamp',
- // 'timestamp',
- ];
- const TRANSACTION_BOOLEAN_KEYS: TransactionKey[] = [];
- // Span keys
- type SpanPrefix = 'span';
- // The keys can be prefixed by the entity type they belong to, this ensures that
- // conflicting keys on different entities are resolved to the correct entity.
- type SpanKey = `${SpanPrefix}.${keyof TraceTree.Span}` | keyof TraceTree.Span;
- const SPAN_TEXT_KEYS: SpanKey[] = [
- 'hash',
- 'description',
- 'op',
- 'origin',
- 'parent_span_id',
- 'span_id',
- 'trace_id',
- 'status',
- ];
- const SPAN_NUMERIC_KEYS: SpanKey[] = ['timestamp', 'start_timestamp'];
- const SPAN_DURATION_KEYS: SpanKey[] = ['exclusive_time'];
- // The keys below are not real keys returned by the API, but are instead
- // mapped by the frontend to the correct keys for convenience and UX reasons
- const SPAN_DURATION_SYNTHETIC_KEYS: SpanKey[] = [
- // @ts-expect-error
- 'duration',
- // @ts-expect-error
- 'total_time',
- // @ts-expect-error
- 'self_time',
- ];
- // @TODO the current date parsing does not support timestamps, so we
- // exclude these keys for now and parse them as numeric keys
- const SPAN_DATE_KEYS: SpanKey[] = [
- // 'timestamp', 'start_timestamp'
- ];
- const SPAN_BOOLEAN_KEYS: SpanKey[] = ['same_process_as_parent'];
- function withPrefixedPermutation(
- prefix: 'span' | 'transaction',
- keys: string[]
- ): string[] {
- return [...keys, ...keys.map(key => `${prefix}.${key}`)];
- }
- // Keys that do not belong to a particular entity, and can be inferred from the context
- const SYNTHETIC_KEYS = new Set(['has']);
- // @TODO Add issue keys
- const TEXT_KEYS = new Set([
- ...SYNTHETIC_KEYS,
- ...withPrefixedPermutation('transaction', TRANSACTION_TEXT_KEYS),
- ...withPrefixedPermutation('span', SPAN_TEXT_KEYS),
- ]);
- const NUMERIC_KEYS = new Set([
- ...withPrefixedPermutation('transaction', TRANSACTION_NUMERIC_KEYS),
- ...withPrefixedPermutation('span', SPAN_NUMERIC_KEYS),
- ]);
- const DURATION_KEYS = new Set([
- ...withPrefixedPermutation('transaction', TRANSACTION_DURATION_KEYS),
- ...withPrefixedPermutation('transaction', TRANSACTION_DURATION_SYNTHETIC_KEYS),
- ...withPrefixedPermutation('span', SPAN_DURATION_KEYS),
- ...withPrefixedPermutation('span', SPAN_DURATION_SYNTHETIC_KEYS),
- ]);
- const DATE_KEYS = new Set([
- ...withPrefixedPermutation('transaction', TRANSACTION_DATE_KEYS),
- ...withPrefixedPermutation('span', SPAN_DATE_KEYS),
- ]);
- const BOOLEAN_KEYS = new Set([
- ...withPrefixedPermutation('transaction', TRANSACTION_BOOLEAN_KEYS),
- ...withPrefixedPermutation('span', SPAN_BOOLEAN_KEYS),
- ]);
- export const TRACE_SEARCH_CONFIG: SearchConfig = {
- ...defaultConfig,
- textOperatorKeys: TEXT_KEYS,
- durationKeys: DURATION_KEYS,
- percentageKeys: new Set(),
- numericKeys: NUMERIC_KEYS,
- dateKeys: DATE_KEYS,
- booleanKeys: BOOLEAN_KEYS,
- };
- export function parseTraceSearch(query: string) {
- return parseSearch(query, {...TRACE_SEARCH_CONFIG, parse: true});
- }
|