useTraceSpans.tsx 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. import {normalizeDateTimeParams} from 'sentry/components/organizations/pageFilters/parse';
  2. import type {PageFilters} from 'sentry/types/core';
  3. import {DiscoverDatasets} from 'sentry/utils/discover/types';
  4. import {useApiQuery} from 'sentry/utils/queryClient';
  5. import useOrganization from 'sentry/utils/useOrganization';
  6. import usePageFilters from 'sentry/utils/usePageFilters';
  7. import type {TraceResult} from './useTraces';
  8. export type SpanResult<F extends string> = Record<F, any>;
  9. export interface SpanResults<F extends string> {
  10. data: Array<SpanResult<F>>;
  11. meta: any;
  12. }
  13. interface UseTraceSpansOptions<F extends string> {
  14. fields: F[];
  15. trace: TraceResult;
  16. dataset?: DiscoverDatasets;
  17. datetime?: PageFilters['datetime'];
  18. enabled?: boolean;
  19. limit?: number;
  20. query?: string | string[];
  21. sort?: string[];
  22. }
  23. export function useTraceSpans<F extends string>({
  24. fields,
  25. trace,
  26. dataset,
  27. datetime,
  28. enabled,
  29. limit,
  30. query,
  31. sort,
  32. }: UseTraceSpansOptions<F>) {
  33. const organization = useOrganization();
  34. const {selection} = usePageFilters();
  35. const path = `/organizations/${organization.slug}/trace/${trace.trace}/spans/`;
  36. const endpointOptions = {
  37. query: {
  38. project: selection.projects,
  39. environment: selection.environments,
  40. ...normalizeDateTimeParams(datetime ?? selection.datetime),
  41. // RPC not supported here yet, fall back to EAP directly
  42. dataset:
  43. dataset === DiscoverDatasets.SPANS_EAP_RPC ? DiscoverDatasets.SPANS_EAP : dataset,
  44. field: fields,
  45. query,
  46. sort,
  47. per_page: limit,
  48. maxSpansPerTrace: 10,
  49. },
  50. };
  51. const result = useApiQuery<SpanResults<F>>([path, endpointOptions], {
  52. staleTime: 0,
  53. refetchOnWindowFocus: false,
  54. retry: false,
  55. enabled,
  56. });
  57. return result;
  58. }