123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- import * as Sentry from '@sentry/react';
- import {useDiscoverQuery} from 'sentry/utils/discover/discoverQuery';
- import EventView from 'sentry/utils/discover/eventView';
- import {DiscoverDatasets} from 'sentry/utils/discover/types';
- import {useLocation} from 'sentry/utils/useLocation';
- import useOrganization from 'sentry/utils/useOrganization';
- import usePageFilters from 'sentry/utils/usePageFilters';
- import {useResourceModuleFilters} from 'sentry/views/performance/browser/resources/utils/useResourceFilters';
- import {
- DEFAULT_RESOURCE_FILTERS,
- getResourceTypeFilter,
- } from 'sentry/views/performance/browser/resources/utils/useResourcesQuery';
- import {SpanMetricsField} from 'sentry/views/starfish/types';
- const {SPAN_DOMAIN, SPAN_OP, TRANSACTION} = SpanMetricsField;
- /**
- * Gets a list of pages that have a resource.
- */
- export const useResourceDomainsQuery = (defaultResourceTypes?: string[]) => {
- const location = useLocation();
- const pageFilters = usePageFilters();
- const {slug: orgSlug} = useOrganization();
- const resourceFilters = useResourceModuleFilters();
- const fields = [SPAN_DOMAIN, 'count()']; // count() is only here because an aggregation is required for the query to work
- const queryConditions = [
- ...DEFAULT_RESOURCE_FILTERS,
- `has:${SPAN_DOMAIN}`,
- ...getResourceTypeFilter(resourceFilters[SPAN_OP], defaultResourceTypes),
- ...(resourceFilters[TRANSACTION]
- ? [`transaction:${resourceFilters[TRANSACTION]}`]
- : []),
- ];
- const eventView = EventView.fromNewQueryWithPageFilters(
- {
- fields, // for some reason we need a function, otherwise the query fails
- name: 'Resource module - page selector',
- version: 2,
- query: queryConditions.join(' '),
- dataset: DiscoverDatasets.SPANS_METRICS,
- },
- pageFilters.selection
- );
- const result = useDiscoverQuery({
- eventView,
- referrer: 'api.performance.browser.resources.page-selector',
- location,
- orgSlug,
- limit: 100,
- });
- const data: string[] =
- result?.data?.data
- .map(row => {
- const domains = row[SPAN_DOMAIN] as any as string[];
- if (domains?.length > 1) {
- Sentry.captureException(new Error('More than one domain found in a resource'));
- }
- return domains[0].toString();
- })
- .filter(domain => domain !== '*')
- .sort() || [];
- return {...result, data};
- };
|