From c6ddf6d8988af611cfe778a397d08d7aa053a0bc Mon Sep 17 00:00:00 2001
From: "sentry[bot]" <39604003+sentry[bot]@users.noreply.github.com>
Date: Fri, 10 Jul 2026 22:38:14 +0000
Subject: [PATCH] fix(detectors): Safely access queryObj for cron monitors
---
.../app/views/detectors/components/detectorLink.tsx | 6 +++++-
static/app/views/detectors/list/cron.tsx | 11 ++++++-----
2 files changed, 11 insertions(+), 6 deletions(-)
diff --git a/static/app/views/detectors/components/detectorLink.tsx b/static/app/views/detectors/components/detectorLink.tsx
index 6b0cb8e091bc..d21322284a27 100644
--- a/static/app/views/detectors/components/detectorLink.tsx
+++ b/static/app/views/detectors/components/detectorLink.tsx
@@ -214,7 +214,11 @@ function UptimeDetectorDetails({detector}: {detector: UptimeDetector}) {
}
function CronDetectorDetails({detector}: {detector: CronDetector}) {
- const config = detector.dataSources[0].queryObj.config;
+ const config = detector.dataSources[0]?.queryObj?.config;
+
+ if (!config) {
+ return null;
+ }
return {scheduleAsText(config)};
}
diff --git a/static/app/views/detectors/list/cron.tsx b/static/app/views/detectors/list/cron.tsx
index 8c3be5297043..ff6b3ec04532 100644
--- a/static/app/views/detectors/list/cron.tsx
+++ b/static/app/views/detectors/list/cron.tsx
@@ -52,15 +52,16 @@ import {selectCheckInData} from 'sentry/views/insights/crons/utils/selectCheckIn
import {useMonitorStats} from 'sentry/views/insights/crons/utils/useMonitorStats';
function VisualizationCell({detector}: {detector: CronDetector}) {
- const cronId = detector.dataSources[0].queryObj.id;
- const cronEnvironments = detector.dataSources[0].queryObj.environments;
+ const queryObj = detector.dataSources[0]?.queryObj;
+ const cronId = queryObj?.id;
+ const cronEnvironments = queryObj?.environments;
const elementRef = useRef(null);
const {width: containerWidth} = useDimensions({elementRef});
const timelineWidth = useDebouncedValue(containerWidth, 1000);
const timeWindowConfig = useTimeWindowConfig({timelineWidth});
const {data: monitorStats, isPending} = useMonitorStats({
- monitors: [detector.dataSources[0].queryObj.id],
+ monitors: cronId ? [cronId] : [],
timeWindowConfig,
});
@@ -72,7 +73,7 @@ function VisualizationCell({detector}: {detector: CronDetector}) {
height="100%"
>
- {cronEnvironments.map(environment => {
+ {cronEnvironments?.map(environment => {
if (isPending) {
return ;
}
@@ -108,7 +109,7 @@ const ADDITIONAL_COLUMNS: MonitorListAdditionalColumn[] = [
return (
- {detector.dataSources[0].queryObj.environments.map(environment => {
+ {detector.dataSources[0]?.queryObj?.environments.map(environment => {
return (