1
1
import json
2
- from typing import Dict , List
2
+ from typing import Dict , List , Optional as typeOptional
3
3
4
4
from datetime import datetime
5
5
23
23
adapt_mean_time_to_recovery_metrics ,
24
24
)
25
25
from mhq .store .models .incidents import Incident
26
-
27
26
from mhq .api .request_utils import coerce_workflow_filter , queryschema
28
27
from mhq .service .query_validator import get_query_validator
29
28
29
+
30
30
app = Blueprint ("incidents" , __name__ )
31
31
32
32
36
36
{
37
37
Required ("from_time" ): All (str , Coerce (datetime .fromisoformat )),
38
38
Required ("to_time" ): All (str , Coerce (datetime .fromisoformat )),
39
+ Optional ("pr_filter" ): All (str , Coerce (json .loads )),
39
40
}
40
41
),
41
42
)
42
- def get_resolved_incidents (team_id : str , from_time : datetime , to_time : datetime ):
43
+ def get_resolved_incidents (
44
+ team_id : str ,
45
+ from_time : datetime ,
46
+ to_time : datetime ,
47
+ pr_filter : typeOptional [Dict ] = None ,
48
+ ):
43
49
44
50
query_validator = get_query_validator ()
45
51
interval = query_validator .interval_validator (from_time , to_time )
46
52
query_validator .team_validator (team_id )
47
53
54
+ pr_filter : PRFilter = apply_pr_filter (
55
+ pr_filter , EntityType .TEAM , team_id , [SettingType .EXCLUDED_PRS_SETTING ]
56
+ )
57
+
48
58
incident_service = get_incident_service ()
49
59
50
60
resolved_incidents : List [Incident ] = incident_service .get_resolved_team_incidents (
51
- team_id , interval
61
+ team_id , interval , pr_filter
52
62
)
53
63
54
64
# ToDo: Generate a user map
@@ -71,7 +81,7 @@ def get_deployments_with_related_incidents(
71
81
team_id : str ,
72
82
from_time : datetime ,
73
83
to_time : datetime ,
74
- pr_filter : dict = None ,
84
+ pr_filter : typeOptional [ Dict ] = None ,
75
85
workflow_filter : WorkflowFilter = None ,
76
86
):
77
87
query_validator = get_query_validator ()
@@ -90,7 +100,9 @@ def get_deployments_with_related_incidents(
90
100
91
101
incident_service = get_incident_service ()
92
102
93
- incidents : List [Incident ] = incident_service .get_team_incidents (team_id , interval )
103
+ incidents : List [Incident ] = incident_service .get_team_incidents (
104
+ team_id , interval , pr_filter
105
+ )
94
106
95
107
deployment_incidents_map : Dict [Deployment , List [Incident ]] = (
96
108
incident_service .get_deployment_incidents_map (deployments , incidents )
@@ -112,18 +124,28 @@ def get_deployments_with_related_incidents(
112
124
{
113
125
Required ("from_time" ): All (str , Coerce (datetime .fromisoformat )),
114
126
Required ("to_time" ): All (str , Coerce (datetime .fromisoformat )),
127
+ Optional ("pr_filter" ): All (str , Coerce (json .loads )),
115
128
}
116
129
),
117
130
)
118
- def get_team_mttr (team_id : str , from_time : datetime , to_time : datetime ):
131
+ def get_team_mttr (
132
+ team_id : str ,
133
+ from_time : datetime ,
134
+ to_time : datetime ,
135
+ pr_filter : typeOptional [Dict ] = None ,
136
+ ):
119
137
query_validator = get_query_validator ()
120
138
interval = query_validator .interval_validator (from_time , to_time )
121
139
query_validator .team_validator (team_id )
122
140
141
+ pr_filter : PRFilter = apply_pr_filter (
142
+ pr_filter , EntityType .TEAM , team_id , [SettingType .EXCLUDED_PRS_SETTING ]
143
+ )
144
+
123
145
incident_service = get_incident_service ()
124
146
125
147
team_mean_time_to_recovery_metrics = (
126
- incident_service .get_team_mean_time_to_recovery (team_id , interval )
148
+ incident_service .get_team_mean_time_to_recovery (team_id , interval , pr_filter )
127
149
)
128
150
129
151
return adapt_mean_time_to_recovery_metrics (team_mean_time_to_recovery_metrics )
@@ -135,18 +157,30 @@ def get_team_mttr(team_id: str, from_time: datetime, to_time: datetime):
135
157
{
136
158
Required ("from_time" ): All (str , Coerce (datetime .fromisoformat )),
137
159
Required ("to_time" ): All (str , Coerce (datetime .fromisoformat )),
160
+ Optional ("pr_filter" ): All (str , Coerce (json .loads )),
138
161
}
139
162
),
140
163
)
141
- def get_team_mttr_trends (team_id : str , from_time : datetime , to_time : datetime ):
164
+ def get_team_mttr_trends (
165
+ team_id : str ,
166
+ from_time : datetime ,
167
+ to_time : datetime ,
168
+ pr_filter : typeOptional [Dict ] = None ,
169
+ ):
142
170
query_validator = get_query_validator ()
143
171
interval = query_validator .interval_validator (from_time , to_time )
144
172
query_validator .team_validator (team_id )
145
173
174
+ pr_filter : PRFilter = apply_pr_filter (
175
+ pr_filter , EntityType .TEAM , team_id , [SettingType .EXCLUDED_PRS_SETTING ]
176
+ )
177
+
146
178
incident_service = get_incident_service ()
147
179
148
180
weekly_mean_time_to_recovery_metrics = (
149
- incident_service .get_team_mean_time_to_recovery_trends (team_id , interval )
181
+ incident_service .get_team_mean_time_to_recovery_trends (
182
+ team_id , interval , pr_filter
183
+ )
150
184
)
151
185
152
186
return {
@@ -172,7 +206,7 @@ def get_team_cfr(
172
206
team_id : str ,
173
207
from_time : datetime ,
174
208
to_time : datetime ,
175
- pr_filter : dict = None ,
209
+ pr_filter : typeOptional [ Dict ] = None ,
176
210
workflow_filter : WorkflowFilter = None ,
177
211
):
178
212
@@ -192,7 +226,9 @@ def get_team_cfr(
192
226
193
227
incident_service = get_incident_service ()
194
228
195
- incidents : List [Incident ] = incident_service .get_team_incidents (team_id , interval )
229
+ incidents : List [Incident ] = incident_service .get_team_incidents (
230
+ team_id , interval , pr_filter
231
+ )
196
232
197
233
team_change_failure_rate : ChangeFailureRateMetrics = (
198
234
incident_service .get_change_failure_rate_metrics (deployments , incidents )
@@ -216,7 +252,7 @@ def get_team_cfr_trends(
216
252
team_id : str ,
217
253
from_time : datetime ,
218
254
to_time : datetime ,
219
- pr_filter : dict = None ,
255
+ pr_filter : typeOptional [ Dict ] = None ,
220
256
workflow_filter : WorkflowFilter = None ,
221
257
):
222
258
@@ -236,7 +272,9 @@ def get_team_cfr_trends(
236
272
237
273
incident_service = get_incident_service ()
238
274
239
- incidents : List [Incident ] = incident_service .get_team_incidents (team_id , interval )
275
+ incidents : List [Incident ] = incident_service .get_team_incidents (
276
+ team_id , interval , pr_filter
277
+ )
240
278
241
279
team_weekly_change_failure_rate : Dict [datetime , ChangeFailureRateMetrics ] = (
242
280
incident_service .get_weekly_change_failure_rate (
0 commit comments