|
4 | 4 | from datetime import timedelta
|
5 | 5 | from uuid import uuid4
|
6 | 6 |
|
| 7 | +from django.db import router |
7 | 8 | from django.utils import timezone
|
8 | 9 |
|
9 | 10 | from sentry.tasks.base import instrumented_task
|
|
12 | 13 | from sentry.taskworker.retry import Retry
|
13 | 14 | from sentry.uptime.config_producer import produce_config, produce_config_removal
|
14 | 15 | from sentry.uptime.models import (
|
| 16 | + ProjectUptimeSubscription, |
15 | 17 | UptimeRegionScheduleMode,
|
16 | 18 | UptimeStatus,
|
17 | 19 | UptimeSubscription,
|
|
20 | 22 | )
|
21 | 23 | from sentry.uptime.types import CheckConfig, ProjectUptimeSubscriptionMode
|
22 | 24 | from sentry.utils import metrics
|
| 25 | +from sentry.utils.db import atomic_transaction |
23 | 26 | from sentry.utils.query import RangeQuerySetWrapper
|
| 27 | +from sentry.workflow_engine.models.detector import Detector |
24 | 28 |
|
25 | 29 | logger = logging.getLogger(__name__)
|
26 | 30 |
|
@@ -232,7 +236,14 @@ def broken_monitor_checker(**kwargs):
|
232 | 236 | detector = get_detector(uptime_subscription)
|
233 | 237 | assert detector
|
234 | 238 | if detector.config["mode"] == ProjectUptimeSubscriptionMode.AUTO_DETECTED_ACTIVE:
|
235 |
| - disable_uptime_detector(detector) |
236 |
| - count += 1 |
| 239 | + with atomic_transaction( |
| 240 | + using=( |
| 241 | + router.db_for_write(UptimeSubscription), |
| 242 | + router.db_for_write(ProjectUptimeSubscription), |
| 243 | + router.db_for_write(Detector), |
| 244 | + ) |
| 245 | + ): |
| 246 | + disable_uptime_detector(detector) |
| 247 | + count += 1 |
237 | 248 |
|
238 | 249 | metrics.incr("uptime.subscriptions.disable_broken", amount=count, sample_rate=1.0)
|
0 commit comments