useProjectWebVitalsQuery.tsx 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. import {Tag} from 'sentry/types';
  2. import {useDiscoverQuery} from 'sentry/utils/discover/discoverQuery';
  3. import EventView from 'sentry/utils/discover/eventView';
  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. type Props = {
  9. tag?: Tag;
  10. transaction?: string;
  11. };
  12. export const useProjectWebVitalsQuery = ({transaction, tag}: Props = {}) => {
  13. const organization = useOrganization();
  14. const pageFilters = usePageFilters();
  15. const location = useLocation();
  16. const projectEventView = EventView.fromNewQueryWithPageFilters(
  17. {
  18. fields: [
  19. 'p75(measurements.lcp)',
  20. 'p75(measurements.fcp)',
  21. 'p75(measurements.cls)',
  22. 'p75(measurements.ttfb)',
  23. 'p75(measurements.fid)',
  24. 'count()',
  25. 'failure_count()',
  26. 'p95(transaction.duration)',
  27. 'eps()',
  28. ],
  29. name: 'Web Vitals',
  30. query:
  31. 'transaction.op:pageload' +
  32. (transaction ? ` transaction:"${transaction}"` : '') +
  33. (tag ? ` ${tag.key}:"${tag.name}"` : ''),
  34. version: 2,
  35. dataset: DiscoverDatasets.METRICS,
  36. },
  37. pageFilters.selection
  38. );
  39. return useDiscoverQuery({
  40. eventView: projectEventView,
  41. limit: 50,
  42. location,
  43. orgSlug: organization.slug,
  44. options: {
  45. enabled: pageFilters.isReady,
  46. refetchOnWindowFocus: false,
  47. },
  48. });
  49. };