useAnalytics.tsx 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. import {useEffect} from 'react';
  2. import type {Confidence, Organization} from 'sentry/types/organization';
  3. import {trackAnalytics} from 'sentry/utils/analytics';
  4. import type {DiscoverDatasets} from 'sentry/utils/discover/types';
  5. import type {UseApiQueryResult} from 'sentry/utils/queryClient';
  6. import type RequestError from 'sentry/utils/requestError/requestError';
  7. import {MutableSearch} from 'sentry/utils/tokenizeSearch';
  8. import type {Visualize} from 'sentry/views/explore/contexts/pageParamsContext/visualizes';
  9. import {usePerformanceSubscriptionDetails} from 'sentry/views/performance/newTraceDetails/traceTypeWarnings/usePerformanceSubscriptionDetails';
  10. export function useAnalytics({
  11. dataset,
  12. resultLength,
  13. resultMissingRoot,
  14. resultMode,
  15. resultStatus,
  16. visualizes,
  17. organization,
  18. columns,
  19. userQuery,
  20. confidence,
  21. title,
  22. }: {
  23. columns: string[];
  24. confidence: Confidence;
  25. dataset: DiscoverDatasets;
  26. organization: Organization;
  27. resultLength: number | undefined;
  28. resultMode: 'span samples' | 'trace samples' | 'aggregates';
  29. resultStatus: UseApiQueryResult<any, RequestError>['status'];
  30. userQuery: string;
  31. visualizes: Visualize[];
  32. resultMissingRoot?: number;
  33. title?: string;
  34. }) {
  35. const {
  36. data: {hasExceededPerformanceUsageLimit},
  37. isLoading: isLoadingSubscriptionDetails,
  38. } = usePerformanceSubscriptionDetails();
  39. useEffect(() => {
  40. if (resultStatus === 'pending' || isLoadingSubscriptionDetails) {
  41. return;
  42. }
  43. const search = new MutableSearch(userQuery);
  44. const params = {
  45. organization,
  46. columns,
  47. columns_count: columns.filter(Boolean).length,
  48. confidence,
  49. dataset,
  50. query_status: resultStatus,
  51. result_length: resultLength || 0,
  52. result_missing_root: resultMissingRoot || 0,
  53. result_mode: resultMode,
  54. user_queries: search.formatString(),
  55. user_queries_count: search.tokens.length,
  56. visualizes,
  57. visualizes_count: visualizes.length,
  58. title,
  59. has_exceeded_performance_usage_limit: hasExceededPerformanceUsageLimit,
  60. };
  61. trackAnalytics('trace.explorer.metadata', params);
  62. }, [
  63. organization,
  64. resultLength,
  65. resultMissingRoot,
  66. resultMode,
  67. isLoadingSubscriptionDetails,
  68. hasExceededPerformanceUsageLimit,
  69. resultStatus,
  70. visualizes,
  71. columns,
  72. userQuery,
  73. confidence,
  74. dataset,
  75. title,
  76. ]);
  77. }