11
11
from sentry .monitors .validators import IntervalNames
12
12
13
13
from ..models import Environment
14
- from .models import Monitor , MonitorCheckIn , MonitorEnvironment , MonitorStatus
14
+ from .models import (
15
+ Monitor ,
16
+ MonitorCheckIn ,
17
+ MonitorEnvBrokenDetection ,
18
+ MonitorEnvironment ,
19
+ MonitorIncident ,
20
+ MonitorStatus ,
21
+ )
22
+
23
+
24
+ class MonitorEnvBrokenDetectionSerializerResponse (TypedDict ):
25
+ userNotifiedTimestamp : datetime
26
+ environmentMutedTimestamp : datetime
27
+
28
+
29
+ @register (MonitorEnvBrokenDetection )
30
+ class MonitorEnvBrokenDetectionSerializer (Serializer ):
31
+ def serialize (self , obj , attrs , user , ** kwargs ) -> MonitorEnvBrokenDetectionSerializerResponse :
32
+ return {
33
+ "userNotifiedTimestamp" : obj .user_notified_timestamp ,
34
+ "environmentMutedTimestamp" : obj .env_muted_timestamp ,
35
+ }
36
+
37
+
38
+ class MonitorIncidentSerializerResponse (TypedDict ):
39
+ startingTimestamp : datetime
40
+ resolvingTimestamp : datetime
41
+ brokenNotice : MonitorEnvBrokenDetectionSerializerResponse | None
42
+
43
+
44
+ @register (MonitorIncident )
45
+ class MonitorIncidentSerializer (Serializer ):
46
+ def get_attrs (
47
+ self , item_list : Sequence [Any ], user : Any , ** kwargs : Any
48
+ ) -> MutableMapping [Any , Any ]:
49
+ broken_detections = list (
50
+ MonitorEnvBrokenDetection .objects .filter (monitor_incident__in = item_list )
51
+ )
52
+ serialized_broken_detections = {
53
+ detection .monitor_incident_id : serialized
54
+ for serialized , detection in zip (serialize (broken_detections , user ), broken_detections )
55
+ }
56
+ return {
57
+ incident : {"broken_detection" : serialized_broken_detections .get (incident .id )}
58
+ for incident in item_list
59
+ }
60
+
61
+ def serialize (self , obj , attrs , user , ** kwargs ) -> MonitorIncidentSerializerResponse :
62
+ return {
63
+ "startingTimestamp" : obj .starting_timestamp ,
64
+ "resolvingTimestamp" : obj .resolving_timestamp ,
65
+ "brokenNotice" : attrs ["broken_detection" ],
66
+ }
15
67
16
68
17
69
class MonitorEnvironmentSerializerResponse (TypedDict ):
@@ -22,6 +74,7 @@ class MonitorEnvironmentSerializerResponse(TypedDict):
22
74
lastCheckIn : datetime
23
75
nextCheckIn : datetime
24
76
nextCheckInLatest : datetime
77
+ activeIncident : MonitorIncidentSerializerResponse | None
25
78
26
79
27
80
@register (MonitorEnvironment )
@@ -34,8 +87,24 @@ def get_attrs(
34
87
]
35
88
environments = {env .id : env for env in Environment .objects .filter (id__in = env_ids )}
36
89
90
+ active_incidents = list (
91
+ MonitorIncident .objects .filter (
92
+ monitor_environment__in = item_list ,
93
+ resolving_checkin = None ,
94
+ )
95
+ )
96
+ serialized_incidents = {
97
+ incident .monitor_environment_id : serialized_incident
98
+ for incident , serialized_incident in zip (
99
+ active_incidents , serialize (active_incidents , user )
100
+ )
101
+ }
102
+
37
103
return {
38
- monitor_env : {"environment" : environments [monitor_env .environment_id ]}
104
+ monitor_env : {
105
+ "environment" : environments [monitor_env .environment_id ],
106
+ "active_incident" : serialized_incidents .get (monitor_env .id ),
107
+ }
39
108
for monitor_env in item_list
40
109
}
41
110
@@ -48,6 +117,7 @@ def serialize(self, obj, attrs, user, **kwargs) -> MonitorEnvironmentSerializerR
48
117
"lastCheckIn" : obj .last_checkin ,
49
118
"nextCheckIn" : obj .next_checkin ,
50
119
"nextCheckInLatest" : obj .next_checkin_latest ,
120
+ "activeIncident" : attrs ["active_incident" ],
51
121
}
52
122
53
123
0 commit comments