Просмотр исходного кода

chore(analytics): convert distributed tracing analytics (#40187)

Stephen Cefali 2 лет назад
Родитель
Сommit
f71be24139

+ 17 - 1
static/app/utils/analytics/issueAnalyticsEvents.tsx

@@ -4,7 +4,18 @@ type IssueStream = {
   was_shown_suggestion: boolean;
 };
 
-export type IssueEventParameters = {
+type QuicktraceMissingInstrumentationPaylod = {
+  project_id: number;
+  platform?: string;
+};
+
+export type QuicktraceMissingInstrumentation = {
+  'quick_trace.missing_instrumentation.dismissed': QuicktraceMissingInstrumentationPaylod;
+  'quick_trace.missing_instrumentation.docs': QuicktraceMissingInstrumentationPaylod;
+  'quick_trace.missing_instrumentation.snoozed': QuicktraceMissingInstrumentationPaylod;
+};
+
+export type IssueEventParameters = QuicktraceMissingInstrumentation & {
   'event_cause.dismissed': {};
   'event_cause.docs_clicked': {};
   'event_cause.snoozed': {};
@@ -122,6 +133,11 @@ export const issueEventMap: Record<IssueEventKey, string | null> = {
   'quick_trace.dropdown.clicked_extra': 'Quick Trace: Dropdown clicked',
   'quick_trace.node.clicked': 'Quick Trace: Node clicked',
   'quick_trace.connected_services': 'Quick Trace: Connected Services',
+  'quick_trace.missing_instrumentation.dismissed':
+    'Quick Trace: Missing Instrumentation Dismissed',
+  'quick_trace.missing_instrumentation.snoozed':
+    'Quick Trace: Missing Instrumentation Snoozed',
+  'quick_trace.missing_instrumentation.docs': 'Quick Trace: Missing Instrumentation Docs',
   'span_view.embedded_child.hide': 'Span View: Hide Embedded Transaction',
   'span_view.embedded_child.show': 'Span View: Show Embedded Transaction',
   'issue_group_details.tab.clicked': 'Issue Group Details: Header Tab Clicked',

+ 14 - 14
static/app/views/organizationGroupDetails/quickTrace/configureDistributedTracing.tsx

@@ -15,7 +15,8 @@ import {t} from 'sentry/locale';
 import space from 'sentry/styles/space';
 import {Organization, Project} from 'sentry/types';
 import {Event} from 'sentry/types/event';
-import {trackAnalyticsEvent} from 'sentry/utils/analytics';
+import {QuicktraceMissingInstrumentation} from 'sentry/utils/analytics/issueAnalyticsEvents';
+import trackAdvancedAnalyticsEvent from 'sentry/utils/analytics/trackAdvancedAnalyticsEvent';
 import {getConfigureTracingDocsLink} from 'sentry/utils/docs';
 import {promptCanShow, promptIsDismissed} from 'sentry/utils/promptIsDismissed';
 import withApi from 'sentry/utils/withApi';
@@ -59,19 +60,23 @@ class ConfigureDistributedTracing extends Component<Props, State> {
     this.setState({shouldShow: !promptIsDismissed(data ?? {}, 30)});
   }
 
-  trackAnalytics({eventKey, eventName}) {
+  trackAnalytics(eventKey: keyof QuicktraceMissingInstrumentation) {
     const {project, organization} = this.props;
 
-    trackAnalyticsEvent({
-      eventKey,
-      eventName,
-      organization_id: parseInt(organization.id, 10),
+    trackAdvancedAnalyticsEvent(eventKey, {
+      organization,
       project_id: parseInt(project.id, 10),
       platform: project.platform,
     });
   }
 
-  handleClick({action, eventKey, eventName}) {
+  handleClick({
+    action,
+    eventKey,
+  }: {
+    action: 'snoozed' | 'dismissed';
+    eventKey: keyof QuicktraceMissingInstrumentation;
+  }) {
     const {api, project, organization} = this.props;
     const data = {
       projectId: project.id,
@@ -80,7 +85,7 @@ class ConfigureDistributedTracing extends Component<Props, State> {
       status: action,
     };
     promptsUpdate(api, data).then(() => this.setState({shouldShow: false}));
-    this.trackAnalytics({eventKey, eventName});
+    this.trackAnalytics(eventKey);
   }
 
   renderActionButton(docsLink: string) {
@@ -114,10 +119,7 @@ class ConfigureDistributedTracing extends Component<Props, State> {
             priority="primary"
             href={docsLink}
             onClick={() =>
-              this.trackAnalytics({
-                eventKey: 'quick_trace.missing_instrumentation.docs',
-                eventName: 'Quick Trace: Missing Instrumentation Docs',
-              })
+              this.trackAnalytics('quick_trace.missing_instrumentation.docs')
             }
           >
             {t('Read the docs')}
@@ -159,7 +161,6 @@ class ConfigureDistributedTracing extends Component<Props, State> {
                 this.handleClick({
                   action: 'snoozed',
                   eventKey: 'quick_trace.missing_instrumentation.snoozed',
-                  eventName: 'Quick Trace: Missing Instrumentation Snoozed',
                 })
               }
             >
@@ -172,7 +173,6 @@ class ConfigureDistributedTracing extends Component<Props, State> {
                 this.handleClick({
                   action: 'dismissed',
                   eventKey: 'quick_trace.missing_instrumentation.dismissed',
-                  eventName: 'Quick Trace: Missing Instrumentation Dismissed',
                 })
               }
             >

+ 26 - 25
static/app/views/organizationGroupDetails/quickTrace/index.spec.jsx

@@ -2,10 +2,10 @@ import moment from 'moment';
 
 import {mountWithTheme} from 'sentry-test/enzyme';
 
-import {trackAnalyticsEvent} from 'sentry/utils/analytics';
+import trackAdvancedAnalyticsEvent from 'sentry/utils/analytics/trackAdvancedAnalyticsEvent';
 import ConfigureDistributedTracing from 'sentry/views/organizationGroupDetails/quickTrace/configureDistributedTracing';
 
-jest.mock('sentry/utils/analytics');
+jest.mock('sentry/utils/analytics/trackAdvancedAnalyticsEvent');
 
 describe('ConfigureDistributedTracing', function () {
   let putMock;
@@ -136,13 +136,14 @@ describe('ConfigureDistributedTracing', function () {
 
     expect(wrapper.find('ExampleQuickTracePanel').exists()).toBe(false);
 
-    expect(trackAnalyticsEvent).toHaveBeenCalledWith({
-      eventKey: 'quick_trace.missing_instrumentation.snoozed',
-      eventName: 'Quick Trace: Missing Instrumentation Snoozed',
-      organization_id: parseInt(organization.id, 10),
-      project_id: parseInt(project.id, 10),
-      platform: project.platform,
-    });
+    expect(trackAdvancedAnalyticsEvent).toHaveBeenCalledWith(
+      'quick_trace.missing_instrumentation.snoozed',
+      {
+        organization,
+        project_id: parseInt(project.id, 10),
+        platform: project.platform,
+      }
+    );
   });
 
   it('does not render when snoozed', async function () {
@@ -199,14 +200,14 @@ describe('ConfigureDistributedTracing', function () {
     );
 
     expect(wrapper.find('ExampleQuickTracePanel').exists()).toBe(false);
-
-    expect(trackAnalyticsEvent).toHaveBeenCalledWith({
-      eventKey: 'quick_trace.missing_instrumentation.dismissed',
-      eventName: 'Quick Trace: Missing Instrumentation Dismissed',
-      organization_id: parseInt(organization.id, 10),
-      project_id: parseInt(project.id, 10),
-      platform: project.platform,
-    });
+    expect(trackAdvancedAnalyticsEvent).toHaveBeenCalledWith(
+      'quick_trace.missing_instrumentation.dismissed',
+      {
+        organization,
+        project_id: parseInt(project.id, 10),
+        platform: project.platform,
+      }
+    );
   });
 
   it('does not render when dismissed', async function () {
@@ -243,13 +244,13 @@ describe('ConfigureDistributedTracing', function () {
     wrapper.update();
 
     wrapper.find('[aria-label="Read the docs"]').first().simulate('click');
-
-    expect(trackAnalyticsEvent).toHaveBeenCalledWith({
-      eventKey: 'quick_trace.missing_instrumentation.docs',
-      eventName: 'Quick Trace: Missing Instrumentation Docs',
-      organization_id: parseInt(organization.id, 10),
-      project_id: parseInt(project.id, 10),
-      platform: project.platform,
-    });
+    expect(trackAdvancedAnalyticsEvent).toHaveBeenCalledWith(
+      'quick_trace.missing_instrumentation.docs',
+      {
+        organization,
+        project_id: parseInt(project.id, 10),
+        platform: project.platform,
+      }
+    );
   });
 });