Browse Source

feat(statistical-detectors): Disable various parts of issue details f… (#58114)

…or regression issues

Various parts of the issue details don't make sense in the context of a
regression issue. This disables them for the regression issue types.
Tony Xiao 1 year ago
parent
commit
d4ce67872d

+ 3 - 0
static/app/utils/issueTypeConfig/index.tsx

@@ -26,9 +26,12 @@ const BASE_CONFIG: IssueTypeConfig = {
     share: {enabled: false},
   },
   attachments: {enabled: false},
+  events: {enabled: true},
   mergedIssues: {enabled: false},
   replays: {enabled: false},
+  stats: {enabled: true},
   similarIssues: {enabled: false},
+  tags: {enabled: true},
   userFeedback: {enabled: false},
   evidence: {title: t('Evidence')},
   resources: null,

+ 9 - 0
static/app/utils/issueTypeConfig/performanceConfig.tsx

@@ -187,6 +187,9 @@ const performanceConfig: IssueCategoryConfigMapping = {
       linksByPlatform: {},
     },
   },
+  [IssueType.PERFORMANCE_DURATION_REGRESSION]: {
+    stats: {enabled: false},
+  },
   [IssueType.PROFILE_FILE_IO_MAIN_THREAD]: {
     resources: {
       description: t(
@@ -271,6 +274,12 @@ const performanceConfig: IssueCategoryConfigMapping = {
       linksByPlatform: {},
     },
   },
+  [IssueType.PROFILE_FUNCTION_REGRESSION_EXPERIMENTAL]: {
+    events: {enabled: false},
+    replays: {enabled: false},
+    stats: {enabled: false},
+    tags: {enabled: false},
+  },
 };
 
 export default performanceConfig;

+ 12 - 0
static/app/utils/issueTypeConfig/types.tsx

@@ -25,6 +25,10 @@ export type IssueTypeConfig = {
    * Is the Attachments tab shown for this issue
    */
   attachments: DisabledWithReasonConfig;
+  /**
+   * Is the Events tab show for this issue
+   */
+  events: DisabledWithReasonConfig;
   /**
    * Options for rendering the Evidence section - pass null to disable
    */
@@ -59,6 +63,14 @@ export type IssueTypeConfig = {
    * Is the Similar Issues tab shown for this issue
    */
   similarIssues: DisabledWithReasonConfig;
+  /**
+   * Are group stats (counts/time series) shown for this issue.
+   */
+  stats: DisabledWithReasonConfig;
+  /**
+   * Is the Tags tab show for this issue
+   */
+  tags: DisabledWithReasonConfig;
   /**
    * Is the User Feedback tab shown for this issue
    */

+ 10 - 10
static/app/views/issueDetails/groupEventDetails/groupEventDetails.tsx

@@ -20,13 +20,13 @@ import {
   Group,
   GroupActivityReprocess,
   GroupReprocessing,
-  IssueType,
   Organization,
   Project,
 } from 'sentry/types';
 import {Event} from 'sentry/types/event';
 import {defined} from 'sentry/utils';
 import fetchSentryAppInstallations from 'sentry/utils/fetchSentryAppInstallations';
+import {getConfigForIssueType} from 'sentry/utils/issueTypeConfig';
 import {QuickTraceContext} from 'sentry/utils/performance/quickTrace/quickTraceContext';
 import QuickTraceQuery from 'sentry/utils/performance/quickTrace/quickTraceQuery';
 import {VisuallyCompleteWithData} from 'sentry/utils/performanceForSentry';
@@ -185,6 +185,8 @@ function GroupEventDetails(props: GroupEventDetailsProps) {
     );
   };
 
+  const issueTypeConfig = getConfigForIssueType(group);
+
   return (
     <TransactionProfileIdProvider
       projectId={event?.projectID}
@@ -221,15 +223,13 @@ function GroupEventDetails(props: GroupEventDetailsProps) {
                         group={group}
                       />
                       <QuickTraceContext.Provider value={results}>
-                        {eventWithMeta &&
-                          group.issueType !==
-                            IssueType.PERFORMANCE_DURATION_REGRESSION && (
-                            <GroupEventHeader
-                              group={group}
-                              event={eventWithMeta}
-                              project={project}
-                            />
-                          )}
+                        {eventWithMeta && issueTypeConfig.stats.enabled && (
+                          <GroupEventHeader
+                            group={group}
+                            event={eventWithMeta}
+                            project={project}
+                          />
+                        )}
                         {renderContent()}
                       </QuickTraceContext.Provider>
                     </StyledLayoutMain>

+ 27 - 22
static/app/views/issueDetails/groupSidebar.tsx

@@ -38,6 +38,7 @@ import {trackAnalytics} from 'sentry/utils/analytics';
 import {getUtcDateString} from 'sentry/utils/dates';
 import {getAnalyticsDataForGroup} from 'sentry/utils/events';
 import {userDisplayName} from 'sentry/utils/formatters';
+import {getConfigForIssueType} from 'sentry/utils/issueTypeConfig';
 import {isMobilePlatform} from 'sentry/utils/platform';
 import {useApiQuery} from 'sentry/utils/queryClient';
 import {useLocation} from 'sentry/utils/useLocation';
@@ -205,10 +206,12 @@ export default function GroupSidebar({
     );
   };
 
+  const issueTypeConfig = getConfigForIssueType(group);
+
   return (
     <Container>
       <AssignedTo group={group} event={event} project={project} onAssign={trackAssign} />
-      {group.issueType !== IssueType.PERFORMANCE_DURATION_REGRESSION && (
+      {issueTypeConfig.stats.enabled && (
         <GroupReleaseStats
           organization={organization}
           project={project}
@@ -224,27 +227,29 @@ export default function GroupSidebar({
         </ErrorBoundary>
       )}
       {renderPluginIssue()}
-      <TagFacets
-        environments={environments}
-        groupId={group.id}
-        tagKeys={
-          isMobilePlatform(project?.platform)
-            ? !organization.features.includes('device-classification')
-              ? MOBILE_TAGS.filter(tag => tag !== 'device.class')
-              : MOBILE_TAGS
-            : frontend.some(val => val === project?.platform)
-            ? FRONTEND_TAGS
-            : backend.some(val => val === project?.platform)
-            ? BACKEND_TAGS
-            : DEFAULT_TAGS
-        }
-        event={event}
-        tagFormatter={TAGS_FORMATTER}
-        project={project}
-        isStatisticalDetector={
-          group.issueType === IssueType.PERFORMANCE_DURATION_REGRESSION
-        }
-      />
+      {issueTypeConfig.tags.enabled && (
+        <TagFacets
+          environments={environments}
+          groupId={group.id}
+          tagKeys={
+            isMobilePlatform(project?.platform)
+              ? !organization.features.includes('device-classification')
+                ? MOBILE_TAGS.filter(tag => tag !== 'device.class')
+                : MOBILE_TAGS
+              : frontend.some(val => val === project?.platform)
+              ? FRONTEND_TAGS
+              : backend.some(val => val === project?.platform)
+              ? BACKEND_TAGS
+              : DEFAULT_TAGS
+          }
+          event={event}
+          tagFormatter={TAGS_FORMATTER}
+          project={project}
+          isStatisticalDetector={
+            group.issueType === IssueType.PERFORMANCE_DURATION_REGRESSION
+          }
+        />
+      )}
       {renderParticipantData()}
       {renderSeenByList()}
     </Container>

+ 6 - 9
static/app/views/issueDetails/header.tsx

@@ -21,14 +21,7 @@ import {TabList} from 'sentry/components/tabs';
 import {IconChat} from 'sentry/icons';
 import {t} from 'sentry/locale';
 import {space} from 'sentry/styles/space';
-import {
-  Event,
-  Group,
-  IssueCategory,
-  IssueType,
-  Organization,
-  Project,
-} from 'sentry/types';
+import {Event, Group, IssueCategory, Organization, Project} from 'sentry/types';
 import {getMessage} from 'sentry/utils/events';
 import {getConfigForIssueType} from 'sentry/utils/issueTypeConfig';
 import {projectCanLinkToReplay} from 'sentry/utils/replays/projectSupportsReplay';
@@ -124,6 +117,7 @@ function GroupHeaderTabs({
       </TabList.Item>
       <TabList.Item
         key={Tab.TAGS}
+        hidden={!issueTypeConfig.tags.enabled}
         disabled={disabledTabs.includes(Tab.TAGS)}
         to={`${baseUrl}tags/${location.search}`}
       >
@@ -131,6 +125,7 @@ function GroupHeaderTabs({
       </TabList.Item>
       <TabList.Item
         key={Tab.EVENTS}
+        hidden={!issueTypeConfig.events.enabled}
         disabled={disabledTabs.includes(Tab.EVENTS)}
         to={eventRoute}
       >
@@ -240,6 +235,8 @@ function GroupHeader({
     <ShortIdBreadrcumb organization={organization} project={project} group={group} />
   );
 
+  const issueTypeConfig = getConfigForIssueType(group);
+
   return (
     <Layout.Header>
       <div className={className}>
@@ -284,7 +281,7 @@ function GroupHeader({
               <EventMessage message={message} />
             </StyledTagAndMessageWrapper>
           </TitleWrapper>
-          {group.issueType !== IssueType.PERFORMANCE_DURATION_REGRESSION && (
+          {issueTypeConfig.stats.enabled && (
             <StatsWrapper>
               <div className="count">
                 <h6 className="nav-header">{t('Events')}</h6>