useIndexedResourceQuery.ts 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. import {useDiscoverQuery} from 'sentry/utils/discover/discoverQuery';
  2. import EventView from 'sentry/utils/discover/eventView';
  3. import {Sort} from 'sentry/utils/discover/fields';
  4. import {DiscoverDatasets} from 'sentry/utils/discover/types';
  5. import {useLocation} from 'sentry/utils/useLocation';
  6. import useOrganization from 'sentry/utils/useOrganization';
  7. import usePageFilters from 'sentry/utils/usePageFilters';
  8. import {SpanIndexedField} from 'sentry/views/starfish/types';
  9. const {SPAN_DESCRIPTION, HTTP_RESPONSE_CONTENT_LENGTH} = SpanIndexedField;
  10. type Options = {
  11. limit?: number;
  12. queryConditions?: string[];
  13. referrer?: string;
  14. sorts?: Sort[];
  15. };
  16. export const useIndexedResourcesQuery = ({
  17. queryConditions = [],
  18. limit = 50,
  19. sorts,
  20. referrer,
  21. }: Options) => {
  22. const pageFilters = usePageFilters();
  23. const location = useLocation();
  24. const {slug: orgSlug} = useOrganization();
  25. // TODO - we should be using metrics data here
  26. const eventView = EventView.fromNewQueryWithPageFilters(
  27. {
  28. fields: [
  29. `any(id)`,
  30. 'project',
  31. 'span.group',
  32. SPAN_DESCRIPTION,
  33. `measurements.${HTTP_RESPONSE_CONTENT_LENGTH}`,
  34. ],
  35. name: 'Indexed Resource Query',
  36. query: queryConditions.join(' '),
  37. version: 2,
  38. dataset: DiscoverDatasets.SPANS_INDEXED,
  39. },
  40. pageFilters.selection
  41. );
  42. if (sorts) {
  43. eventView.sorts = sorts;
  44. }
  45. const result = useDiscoverQuery({
  46. eventView,
  47. limit,
  48. location,
  49. orgSlug,
  50. referrer,
  51. options: {
  52. refetchOnWindowFocus: false,
  53. },
  54. });
  55. const data =
  56. result?.data?.data.map(row => ({
  57. project: row.project as string,
  58. 'transaction.id': row['transaction.id'] as string,
  59. [SPAN_DESCRIPTION]: row[SPAN_DESCRIPTION]?.toString(),
  60. 'measurements.http.response_content_length': row[
  61. `measurements.${HTTP_RESPONSE_CONTENT_LENGTH}`
  62. ] as number,
  63. })) ?? [];
  64. return {...result, data};
  65. };