useResourcePagesQuery.ts 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  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 {
  9. DEFAULT_RESOURCE_FILTERS,
  10. getDomainFilter,
  11. getResourceTypeFilter,
  12. } from 'sentry/views/performance/browser/resources/utils/useResourcesQuery';
  13. import {SpanMetricsField} from 'sentry/views/starfish/types';
  14. const {SPAN_DOMAIN, SPAN_OP} = SpanMetricsField;
  15. /**
  16. * Gets a list of pages that have a resource.
  17. */
  18. export const useResourcePagesQuery = (defaultResourceTypes?: string[]) => {
  19. const location = useLocation();
  20. const pageFilters = usePageFilters();
  21. const {slug: orgSlug} = useOrganization();
  22. const resourceFilters = useResourceModuleFilters();
  23. const {[SPAN_DOMAIN]: spanDomain} = resourceFilters;
  24. const fields = ['transaction', 'count()']; // count() is only here because an aggregation is required for the query to work
  25. const queryConditions = [
  26. ...DEFAULT_RESOURCE_FILTERS,
  27. ...getResourceTypeFilter(resourceFilters[SPAN_OP], defaultResourceTypes),
  28. ...getDomainFilter(spanDomain),
  29. ]; // TODO: We will need to consider other ops
  30. const eventView = EventView.fromNewQueryWithPageFilters(
  31. {
  32. fields, // for some reason we need a function, otherwise the query fails
  33. name: 'Resource module - page selector',
  34. version: 2,
  35. query: queryConditions.join(' '),
  36. dataset: DiscoverDatasets.SPANS_METRICS,
  37. },
  38. pageFilters.selection
  39. );
  40. const result = useDiscoverQuery({
  41. eventView,
  42. referrer: 'api.performance.browser.resources.page-selector',
  43. location,
  44. orgSlug,
  45. limit: 100,
  46. });
  47. const pages = result?.data?.data.map(row => row.transaction.toString()).sort() || [];
  48. return {...result, data: pages};
  49. };