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

ref(dynamic-sampling): Update rule category options (#24668)

Priscila Oliveira 4 лет назад
Родитель
Сommit
52eaaef07f

+ 8 - 4
src/sentry/static/sentry/app/types/dynamicSampling.tsx

@@ -47,10 +47,12 @@ export enum DynamicSamplingInnerOperator {
 export enum DynamicSamplingInnerName {
   TRACE_RELEASE = 'trace.release',
   TRACE_ENVIRONMENT = 'trace.environment',
-  TRACE_USER = 'trace.user',
+  TRACE_USER_ID = 'trace.user.id',
+  TRACE_USER_SEGMENT = 'trace.user.segment',
   EVENT_RELEASE = 'event.release',
   EVENT_ENVIRONMENT = 'event.environment',
-  EVENT_USER = 'event.user',
+  EVENT_USER_ID = 'event.user.id',
+  EVENT_USER_SEGMENT = 'event.user.segment',
   EVENT_LOCALHOST = 'event.is_local_ip',
   EVENT_WEB_CRAWLERS = 'event.web_crawlers',
   EVENT_BROWSER_EXTENSIONS = 'event.has_bad_browser_extensions',
@@ -79,8 +81,10 @@ type DynamicSamplingConditionLogicalInnerEq = {
   name:
     | DynamicSamplingInnerName.EVENT_ENVIRONMENT
     | DynamicSamplingInnerName.TRACE_ENVIRONMENT
-    | DynamicSamplingInnerName.EVENT_USER
-    | DynamicSamplingInnerName.TRACE_USER;
+    | DynamicSamplingInnerName.EVENT_USER_ID
+    | DynamicSamplingInnerName.TRACE_USER_ID
+    | DynamicSamplingInnerName.EVENT_USER_SEGMENT
+    | DynamicSamplingInnerName.TRACE_USER_SEGMENT;
   value: Array<string>;
   options: {
     ignoreCase: boolean;

+ 2 - 1
src/sentry/static/sentry/app/views/settings/project/filtersAndSampling/modals/errorRuleModal.tsx

@@ -43,7 +43,8 @@ class ErrorRuleModal extends Form<Props, State> {
     return [
       [DynamicSamplingInnerName.EVENT_RELEASE, t('Releases')],
       [DynamicSamplingInnerName.EVENT_ENVIRONMENT, t('Environments')],
-      [DynamicSamplingInnerName.EVENT_USER, t('Users')],
+      [DynamicSamplingInnerName.EVENT_USER_ID, t('User Id')],
+      [DynamicSamplingInnerName.EVENT_USER_SEGMENT, t('User Segment')],
       [DynamicSamplingInnerName.EVENT_BROWSER_EXTENSIONS, t('Browser Extensions')],
       [DynamicSamplingInnerName.EVENT_LOCALHOST, t('Localhost')],
       [DynamicSamplingInnerName.EVENT_LEGACY_BROWSER, t('Legacy Browsers')],

+ 15 - 0
src/sentry/static/sentry/app/views/settings/project/filtersAndSampling/modals/form.tsx

@@ -146,6 +146,21 @@ class Form<P extends Props = Props, S extends State = State> extends React.Compo
       };
     }
 
+    // DynamicSamplingConditionLogicalInnerEq
+    if (
+      condition.category === DynamicSamplingInnerName.TRACE_USER_ID ||
+      condition.category === DynamicSamplingInnerName.EVENT_USER_ID
+    ) {
+      return {
+        op: DynamicSamplingInnerOperator.EQUAL,
+        name: condition.category,
+        value: newValue,
+        options: {
+          ignoreCase: false,
+        },
+      };
+    }
+
     // DynamicSamplingConditionLogicalInnerEq
     return {
       op: DynamicSamplingInnerOperator.EQUAL,

+ 4 - 52
src/sentry/static/sentry/app/views/settings/project/filtersAndSampling/modals/transactionRuleModal.tsx

@@ -1,7 +1,6 @@
 import React from 'react';
 import {css} from '@emotion/core';
 import styled from '@emotion/styled';
-import * as Sentry from '@sentry/react';
 import {withTheme} from 'emotion-theming';
 import isEqual from 'lodash/isEqual';
 import partition from 'lodash/partition';
@@ -36,10 +35,6 @@ type State = Form['state'] & {
 
 class TransactionRuleModal extends Form<Props, State> {
   componentDidUpdate(prevProps: Props, prevState: State) {
-    if (prevState.tracing !== this.state.tracing && !!this.state.conditions.length) {
-      this.updateConditions();
-    }
-
     if (prevState.transaction !== this.state.transaction) {
       this.setIsTracingDisabled(this.state.transaction !== Transaction.ALL);
     }
@@ -47,15 +42,6 @@ class TransactionRuleModal extends Form<Props, State> {
     super.componentDidUpdate(prevProps, prevState);
   }
 
-  updateConditions() {
-    this.setState(state => ({
-      conditions: state.conditions.map(condition => ({
-        ...condition,
-        category: this.getNewConditionCategory(condition.category),
-      })),
-    }));
-  }
-
   setIsTracingDisabled(isTracingDisabled: boolean) {
     this.setState({isTracingDisabled});
   }
@@ -96,42 +82,6 @@ class TransactionRuleModal extends Form<Props, State> {
     };
   }
 
-  getNewConditionCategory(category: DynamicSamplingInnerName) {
-    const {tracing} = this.state;
-
-    if (!tracing) {
-      switch (category) {
-        case DynamicSamplingInnerName.TRACE_RELEASE:
-          return DynamicSamplingInnerName.EVENT_RELEASE;
-        case DynamicSamplingInnerName.TRACE_USER:
-          return DynamicSamplingInnerName.EVENT_USER;
-        case DynamicSamplingInnerName.TRACE_ENVIRONMENT:
-          return DynamicSamplingInnerName.EVENT_ENVIRONMENT;
-        default: {
-          Sentry.captureException(
-            new Error('Unknown dynamic sampling rule condition category')
-          );
-          return category; //this shall not happen
-        }
-      }
-    }
-
-    switch (category) {
-      case DynamicSamplingInnerName.EVENT_RELEASE:
-        return DynamicSamplingInnerName.TRACE_RELEASE;
-      case DynamicSamplingInnerName.EVENT_ENVIRONMENT:
-        return DynamicSamplingInnerName.TRACE_ENVIRONMENT;
-      case DynamicSamplingInnerName.EVENT_USER:
-        return DynamicSamplingInnerName.TRACE_USER;
-      default: {
-        Sentry.captureException(
-          new Error('Unknown dynamic sampling rule condition category')
-        );
-        return category; //this shall not happen
-      }
-    }
-  }
-
   getCategoryOptions(): Array<[DynamicSamplingInnerName, string]> {
     const {tracing} = this.state;
 
@@ -139,14 +89,16 @@ class TransactionRuleModal extends Form<Props, State> {
       return [
         [DynamicSamplingInnerName.TRACE_RELEASE, t('Releases')],
         [DynamicSamplingInnerName.TRACE_ENVIRONMENT, t('Environments')],
-        [DynamicSamplingInnerName.TRACE_USER, t('Users')],
+        [DynamicSamplingInnerName.TRACE_USER_ID, t('User Id')],
+        [DynamicSamplingInnerName.TRACE_USER_SEGMENT, t('User Segment')],
       ];
     }
 
     return [
       [DynamicSamplingInnerName.EVENT_RELEASE, t('Releases')],
       [DynamicSamplingInnerName.EVENT_ENVIRONMENT, t('Environments')],
-      [DynamicSamplingInnerName.EVENT_USER, t('Users')],
+      [DynamicSamplingInnerName.EVENT_USER_ID, t('User Id')],
+      [DynamicSamplingInnerName.EVENT_USER_SEGMENT, t('User Segment')],
       [DynamicSamplingInnerName.EVENT_BROWSER_EXTENSIONS, t('Browser Extensions')],
       [DynamicSamplingInnerName.EVENT_LOCALHOST, t('Localhost')],
       [DynamicSamplingInnerName.EVENT_LEGACY_BROWSER, t('Legacy Browsers')],

+ 6 - 3
src/sentry/static/sentry/app/views/settings/project/filtersAndSampling/modals/utils.tsx

@@ -101,9 +101,12 @@ export function getMatchFieldPlaceholder(category: DynamicSamplingInnerName) {
       return t('Match all localhosts');
     case DynamicSamplingInnerName.EVENT_WEB_CRAWLERS:
       return t('Match all web crawlers');
-    case DynamicSamplingInnerName.EVENT_USER:
-    case DynamicSamplingInnerName.TRACE_USER:
-      return t('Match by user id, ex. 4711 (Multiline)');
+    case DynamicSamplingInnerName.EVENT_USER_ID:
+    case DynamicSamplingInnerName.TRACE_USER_ID:
+      return t('ex. 4711 (Multiline)');
+    case DynamicSamplingInnerName.EVENT_USER_SEGMENT:
+    case DynamicSamplingInnerName.TRACE_USER_SEGMENT:
+      return t('ex. paid, common (Multiline)');
     case DynamicSamplingInnerName.TRACE_ENVIRONMENT:
     case DynamicSamplingInnerName.EVENT_ENVIRONMENT:
       return t('ex. prod or dev (Multiline)');

+ 6 - 3
src/sentry/static/sentry/app/views/settings/project/filtersAndSampling/rules/rule/utils.tsx

@@ -11,9 +11,12 @@ export function getInnerNameLabel(name: DynamicSamplingInnerName) {
     case DynamicSamplingInnerName.TRACE_RELEASE:
     case DynamicSamplingInnerName.EVENT_RELEASE:
       return t('Release');
-    case DynamicSamplingInnerName.EVENT_USER:
-    case DynamicSamplingInnerName.TRACE_USER:
-      return t('User');
+    case DynamicSamplingInnerName.EVENT_USER_ID:
+    case DynamicSamplingInnerName.TRACE_USER_ID:
+      return t('User Id');
+    case DynamicSamplingInnerName.EVENT_USER_SEGMENT:
+    case DynamicSamplingInnerName.TRACE_USER_SEGMENT:
+      return t('User Segment');
     case DynamicSamplingInnerName.EVENT_BROWSER_EXTENSIONS:
       return t('Browser Extensions');
     case DynamicSamplingInnerName.EVENT_LOCALHOST: