useResourcesQuery.ts 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. import {useDiscoverQuery} from 'sentry/utils/discover/discoverQuery';
  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 useOrganization from 'sentry/utils/useOrganization';
  6. import usePageFilters from 'sentry/utils/usePageFilters';
  7. import {useResourceModuleFilters} from 'sentry/views/performance/browser/resources/utils/useResourceFilters';
  8. import {ValidSort} from 'sentry/views/performance/browser/resources/utils/useResourceSort';
  9. export const useResourcesQuery = ({sort}: {sort: ValidSort}) => {
  10. const pageFilters = usePageFilters();
  11. const location = useLocation();
  12. const resourceFilters = useResourceModuleFilters();
  13. const {slug: orgSlug} = useOrganization();
  14. const queryConditions = [
  15. `span.op:[${resourceFilters.type || 'resource.script, resource.img'}]`,
  16. ];
  17. // TODO - we should be using metrics data here
  18. const eventView = EventView.fromNewQueryWithPageFilters(
  19. {
  20. fields: ['span.description', 'span.op', 'count()', 'avg(span.self_time)', 'spm()'],
  21. name: 'Resource module - resource table',
  22. query: queryConditions.join(' '),
  23. orderby: '-count',
  24. version: 2,
  25. dataset: DiscoverDatasets.SPANS_METRICS,
  26. },
  27. pageFilters.selection
  28. );
  29. if (sort) {
  30. eventView.sorts = [sort];
  31. }
  32. const result = useDiscoverQuery({eventView, limit: 100, location, orgSlug});
  33. const data = result?.data?.data.map(row => ({
  34. 'span.op': row['span.op'].toString() as 'resource.script' | 'resource.img',
  35. 'span.description': row['span.description'].toString(),
  36. 'avg(span.self_time)': row['avg(span.self_time)'] as number,
  37. 'count()': row['count()'] as number,
  38. 'spm()': row['spm()'] as number,
  39. }));
  40. return {...result, data: data || []};
  41. };