diff --git a/static/app/utils/issueTypeConfig/metricIssueConfig.tsx b/static/app/utils/issueTypeConfig/metricIssueConfig.tsx index 38281e75e22024..760b37691facf0 100644 --- a/static/app/utils/issueTypeConfig/metricIssueConfig.tsx +++ b/static/app/utils/issueTypeConfig/metricIssueConfig.tsx @@ -28,6 +28,7 @@ const metricIssueConfig: IssueCategoryConfigMapping = { userFeedback: {enabled: false}, usesIssuePlatform: true, stats: {enabled: false}, + tags: {enabled: false}, tagsTab: {enabled: false}, issueSummary: {enabled: false}, }, diff --git a/static/app/views/alerts/rules/metric/details/relatedIssues.tsx b/static/app/views/alerts/rules/metric/details/relatedIssues.tsx index 9a3bdbcd36fa62..9ebb08296e90af 100644 --- a/static/app/views/alerts/rules/metric/details/relatedIssues.tsx +++ b/static/app/views/alerts/rules/metric/details/relatedIssues.tsx @@ -29,9 +29,17 @@ interface Props { rule: MetricRule; timePeriod: TimePeriodType; query?: string; + skipHeader?: boolean; } -function RelatedIssues({rule, organization, projects, query, timePeriod}: Props) { +function RelatedIssues({ + rule, + organization, + projects, + query, + timePeriod, + skipHeader, +}: Props) { const router = useRouter(); // Add environment to the query parameters to be picked up by GlobalSelectionLink @@ -96,12 +104,14 @@ function RelatedIssues({rule, organization, projects, query, timePeriod}: Props) return ( - - {t('Related Issues')} - - {t('Open in Issues')} - - + {!skipHeader && ( + + {t('Related Issues')} + + {t('Open in Issues')} + + + )} ( + [ + `/organizations/${organization.slug}/alert-rules/${ruleId}/`, + { + query: { + expand: 'latestIncident', + }, + }, + ], + { + staleTime: Infinity, + retry: false, + } + ); + + const openPeriod = group.openPeriods?.[0]; + const timePeriod = useMemo((): TimePeriodType | null => { + if (!openPeriod) { + return null; + } + const start = openPeriod.start; + let end = openPeriod.end; + if (!end) { + end = new Date().toISOString(); + } + return { + start, + end, + period: TimePeriod.SEVEN_DAYS, + usingPeriod: false, + label: t('Custom time'), + display: ( + + + {' — '} + + + ), + custom: true, + }; + }, [openPeriod]); + + if (!rule || !timePeriod) { + return null; + } + + const {dataset, query} = rule; + + if (![Dataset.METRICS, Dataset.SESSIONS, Dataset.ERRORS].includes(dataset)) { + return null; + } + + const queryParams = { + start: timePeriod.start, + end: timePeriod.end, + groupStatsPeriod: 'auto', + ...(rule.environment ? {environment: rule.environment} : {}), + sort: rule.aggregate === 'count_unique(user)' ? 'user' : 'freq', + query, + project: [project.id], + }; + const issueSearch = { + pathname: `/organizations/${organization.slug}/issues/`, + query: queryParams, + }; + + const actions = ( + + {t('Open in Issues')} + + ); + + return ( + + + + ); +} diff --git a/static/app/views/issueDetails/groupEventDetails/groupEventDetailsContent.tsx b/static/app/views/issueDetails/groupEventDetails/groupEventDetailsContent.tsx index 296937a3f4ff45..9a202cb0c9a564 100644 --- a/static/app/views/issueDetails/groupEventDetails/groupEventDetailsContent.tsx +++ b/static/app/views/issueDetails/groupEventDetails/groupEventDetailsContent.tsx @@ -70,6 +70,7 @@ import QuickTraceQuery from 'sentry/utils/performance/quickTrace/quickTraceQuery import {getReplayIdFromEvent} from 'sentry/utils/replays/getReplayIdFromEvent'; import {useLocation} from 'sentry/utils/useLocation'; import useOrganization from 'sentry/utils/useOrganization'; +import CorrelatedIssues from 'sentry/views/issueDetails/correlatedIssues'; import {SectionKey} from 'sentry/views/issueDetails/streamline/context'; import {EventDetails} from 'sentry/views/issueDetails/streamline/eventDetails'; import {InterimSection} from 'sentry/views/issueDetails/streamline/interimSection'; @@ -221,6 +222,14 @@ export function EventDetailsContent({ project={project} /> )} + {event.contexts?.metric_alert?.alert_rule_id && ( + + )} {defined(eventEntries[EntryType.MESSAGE]) && ( diff --git a/static/app/views/issueDetails/streamline/context.tsx b/static/app/views/issueDetails/streamline/context.tsx index dfa4ff6d9fb607..d14a0290caf12e 100644 --- a/static/app/views/issueDetails/streamline/context.tsx +++ b/static/app/views/issueDetails/streamline/context.tsx @@ -19,6 +19,7 @@ export const enum SectionKey { UPTIME = 'uptime', // Only Uptime issues DOWNTIME = 'downtime', CRON_TIMELINE = 'cron-timeline', // Only Cron issues + CORRELATED_ISSUES = 'correlated-issues', // Only Metric issues HIGHLIGHTS = 'highlights', RESOURCES = 'resources', // Position controlled by flag