useSpanMeta.tsx 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. import {Location} from 'history';
  2. import EventView from 'sentry/utils/discover/eventView';
  3. import {DiscoverDatasets} from 'sentry/utils/discover/types';
  4. import {useLocation} from 'sentry/utils/useLocation';
  5. import {SpanSummaryQueryFilters} from 'sentry/views/starfish/queries/useSpanMetrics';
  6. import {SpanMetricsFields} from 'sentry/views/starfish/types';
  7. import {useSpansQuery} from 'sentry/views/starfish/utils/useSpansQuery';
  8. const {SPAN_OP, SPAN_ACTION, SPAN_DESCRIPTION, SPAN_DOMAIN, SPAN_GROUP} =
  9. SpanMetricsFields;
  10. export type SpanMeta = {
  11. 'span.action': string;
  12. 'span.description': string;
  13. 'span.domain': string;
  14. 'span.op': string;
  15. };
  16. export const useSpanMeta = (
  17. group: string,
  18. queryFilters: SpanSummaryQueryFilters,
  19. referrer: string = 'span-metrics'
  20. ) => {
  21. const location = useLocation();
  22. return useSpansQuery<SpanMeta[]>({
  23. eventView: getEventView(group, location, queryFilters),
  24. initialData: [],
  25. referrer,
  26. });
  27. };
  28. function getEventView(
  29. groupId,
  30. location: Location,
  31. queryFilters: SpanSummaryQueryFilters
  32. ) {
  33. return EventView.fromNewQueryWithLocation(
  34. {
  35. name: '',
  36. query: `${SPAN_GROUP}:${groupId}${
  37. queryFilters?.transactionName
  38. ? ` transaction:${queryFilters?.transactionName}`
  39. : ''
  40. }${
  41. queryFilters?.['transaction.method']
  42. ? ` transaction.method:${queryFilters?.['transaction.method']}`
  43. : ''
  44. }`,
  45. fields: [SPAN_OP, SPAN_DESCRIPTION, SPAN_ACTION, SPAN_DOMAIN, 'count()'], // TODO: Failing to pass a field like `count()` causes an error
  46. dataset: DiscoverDatasets.SPANS_METRICS,
  47. version: 2,
  48. },
  49. location
  50. );
  51. }