trackSpendVisibilityAnalytics.tsx 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. import type {Organization} from 'sentry/types/organization';
  2. import makeAnalyticsFunction from 'sentry/utils/analytics/makeAnalyticsFunction';
  3. import type {Subscription} from 'getsentry/types';
  4. // The event keys sent to analytics service
  5. export enum SpendVisibilityEvents {
  6. SP_DOCS_CLICKED = 'spend-visibility.spike-protection_docs_clicked',
  7. SP_DISCOVER_CLICKED = 'spend-visibility.spike-protection_discover_clicked',
  8. SP_PROJECT_TOGGLED = 'spend-visibility.spike-protection_project_toggled',
  9. SP_PROJECT_SEARCHED = 'spend-visibility.spike-protection_project_searched',
  10. SP_SETTINGS_VIEWED = 'spend-visibility.spike-protection_settings_viewed',
  11. }
  12. // The base params for these analytics
  13. export type SpendVisibilityBaseParams = {
  14. subscription?: Subscription;
  15. view?: 'spike_protection_settings' | 'project_settings' | 'project_stats';
  16. };
  17. // The parameters required for each event type
  18. type SpendVisibilityEventParameters = {
  19. [SpendVisibilityEvents.SP_DOCS_CLICKED]: SpendVisibilityBaseParams & {};
  20. [SpendVisibilityEvents.SP_DISCOVER_CLICKED]: SpendVisibilityBaseParams & {};
  21. [SpendVisibilityEvents.SP_PROJECT_TOGGLED]: SpendVisibilityBaseParams & {
  22. project_id: string;
  23. value: boolean;
  24. };
  25. [SpendVisibilityEvents.SP_PROJECT_SEARCHED]: SpendVisibilityBaseParams & {};
  26. [SpendVisibilityEvents.SP_SETTINGS_VIEWED]: SpendVisibilityBaseParams & {};
  27. };
  28. // A mapping of event key to readable, searchable name
  29. const spendVisibilityEventMap: Record<SpendVisibilityEvents, string> = {
  30. [SpendVisibilityEvents.SP_DOCS_CLICKED]: 'Spike Protection: Docs Clicked',
  31. [SpendVisibilityEvents.SP_DISCOVER_CLICKED]: 'Spike Protection: Discover Clicked',
  32. [SpendVisibilityEvents.SP_PROJECT_TOGGLED]: 'Spike Protection: Project Toggled',
  33. [SpendVisibilityEvents.SP_PROJECT_SEARCHED]: 'Spike Protection: Project Searched',
  34. [SpendVisibilityEvents.SP_SETTINGS_VIEWED]: 'Spike Protection: Settings Viewed',
  35. };
  36. // The type-safe analytics function generated
  37. const trackSpendVisibilityAnaltyics = makeAnalyticsFunction<
  38. SpendVisibilityEventParameters,
  39. {organization: Organization}
  40. >(spendVisibilityEventMap);
  41. export default trackSpendVisibilityAnaltyics;