usePerformanceUsageStats.tsx 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. import {ALL_ACCESS_PROJECTS} from 'sentry/constants/pageFilters';
  2. import type {PageFilters} from 'sentry/types/core';
  3. import type {Organization} from 'sentry/types/organization';
  4. import {useApiQuery} from 'sentry/utils/queryClient';
  5. export type PerformanceStatsGroup = {
  6. by: {
  7. reason: string;
  8. };
  9. totals: {
  10. 'sum(quantity)': number;
  11. };
  12. };
  13. type PartialUsageStats = {
  14. groups: PerformanceStatsGroup[];
  15. };
  16. export function usePerformanceUsageStats({
  17. organization,
  18. dateRange,
  19. projectIds,
  20. }: {
  21. dateRange: PageFilters['datetime'];
  22. organization: Organization;
  23. projectIds: PageFilters['projects'];
  24. }) {
  25. const {start, end, period} = dateRange;
  26. const pathname = `/organizations/${organization.slug}/stats_v2/`;
  27. const endpointOptions = {
  28. query: {
  29. start,
  30. end,
  31. statsPeriod: period,
  32. interval: '1h',
  33. groupBy: ['outcome', 'reason'],
  34. field: 'sum(quantity)',
  35. utc: true,
  36. category: 'transaction_indexed',
  37. project: projectIds ?? ALL_ACCESS_PROJECTS,
  38. referrer: 'trace-view-warnings',
  39. },
  40. };
  41. const results = useApiQuery<PartialUsageStats>([pathname, endpointOptions], {
  42. staleTime: Infinity,
  43. });
  44. return {
  45. ...results,
  46. data: results.data?.groups.find(group =>
  47. ['transaction_usage_exceeded', 'span_usage_exceeded'].includes(group.by.reason)
  48. ),
  49. };
  50. }