Skip to content

Commit 9fc06d2

Browse files
authored
rename issue_alert creators (#65207)
`create_alert_rule` is too easily conflated with the existing `create_alert_rule` method associated with the AlertRule models. Renaming this to be more clear
1 parent 30075d1 commit 9fc06d2

File tree

7 files changed

+85
-73
lines changed

7 files changed

+85
-73
lines changed

src/sentry/monitors/endpoints/organization_monitor_details.py

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -36,10 +36,10 @@
3636
)
3737
from sentry.monitors.serializers import MonitorSerializer
3838
from sentry.monitors.utils import (
39-
create_alert_rule,
39+
create_issue_alert_rule,
4040
get_checkin_margin,
4141
get_max_runtime,
42-
update_alert_rule,
42+
update_issue_alert_rule,
4343
)
4444
from sentry.monitors.validators import MonitorValidator
4545
from sentry.utils.outcomes import Outcome
@@ -186,22 +186,24 @@ def put(self, request: Request, organization, project, monitor) -> Response:
186186
# Update alert rule after in case slug or name changed
187187
if "alert_rule" in result:
188188
# Check to see if rule exists
189-
alert_rule = monitor.get_alert_rule()
189+
issue_alert_rule = monitor.get_issue_alert_rule()
190190
# If rule exists, update as necessary
191-
if alert_rule:
192-
alert_rule_id = update_alert_rule(
193-
request, project, monitor, alert_rule, result["alert_rule"]
191+
if issue_alert_rule:
192+
issue_alert_rule_id = update_issue_alert_rule(
193+
request, project, monitor, issue_alert_rule, result["alert_rule"]
194194
)
195195
# If rule does not exist, create
196196
else:
197-
alert_rule_id = create_alert_rule(request, project, monitor, result["alert_rule"])
197+
issue_alert_rule_id = create_issue_alert_rule(
198+
request, project, monitor, result["alert_rule"]
199+
)
198200

199-
if alert_rule_id:
201+
if issue_alert_rule_id:
200202
# If config is not sent, use existing config to update alert_rule_id
201203
if "config" not in params:
202204
params["config"] = monitor.config
203205

204-
params["config"]["alert_rule_id"] = alert_rule_id
206+
params["config"]["alert_rule_id"] = issue_alert_rule_id
205207
monitor.update(**params)
206208

207209
return self.respond(serialize(monitor, request.user))
@@ -257,12 +259,12 @@ def delete(self, request: Request, organization, project, monitor) -> Response:
257259

258260
# Mark rule for deletion if present and monitor is being deleted
259261
monitor = monitor_objects.first()
260-
alert_rule_id = monitor.config.get("alert_rule_id") if monitor else None
261-
if alert_rule_id:
262+
issue_alert_rule_id = monitor.config.get("alert_rule_id") if monitor else None
263+
if issue_alert_rule_id:
262264
rule = (
263265
Rule.objects.filter(
264266
project_id=monitor.project_id,
265-
id=alert_rule_id,
267+
id=issue_alert_rule_id,
266268
)
267269
.exclude(
268270
status__in=[

src/sentry/monitors/endpoints/organization_monitor_index.py

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@
4444
MonitorSerializer,
4545
MonitorSerializerResponse,
4646
)
47-
from sentry.monitors.utils import create_alert_rule, signal_monitor_created
47+
from sentry.monitors.utils import create_issue_alert_rule, signal_monitor_created
4848
from sentry.monitors.validators import MonitorBulkEditValidator, MonitorValidator
4949
from sentry.search.utils import tokenize_query
5050
from sentry.utils.outcomes import Outcome
@@ -288,13 +288,15 @@ def post(self, request: Request, organization) -> Response:
288288
project = result["project"]
289289
signal_monitor_created(project, request.user, False)
290290

291-
validated_alert_rule = result.get("alert_rule")
292-
if validated_alert_rule:
293-
alert_rule_id = create_alert_rule(request, project, monitor, validated_alert_rule)
291+
validated_issue_alert_rule = result.get("alert_rule")
292+
if validated_issue_alert_rule:
293+
issue_alert_rule_id = create_issue_alert_rule(
294+
request, project, monitor, validated_issue_alert_rule
295+
)
294296

295-
if alert_rule_id:
297+
if issue_alert_rule_id:
296298
config = monitor.config
297-
config["alert_rule_id"] = alert_rule_id
299+
config["alert_rule_id"] = issue_alert_rule_id
298300
monitor.update(config=config)
299301

300302
return self.respond(serialize(monitor, request.user), status=201)

src/sentry/monitors/models.py

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -316,30 +316,30 @@ def get_validated_config(self):
316316
except jsonschema.ValidationError:
317317
logging.exception("Monitor: %s invalid config: %s", self.id, self.config)
318318

319-
def get_alert_rule(self):
320-
alert_rule_id = self.config.get("alert_rule_id")
321-
if alert_rule_id:
322-
alert_rule = Rule.objects.filter(
319+
def get_issue_alert_rule(self):
320+
issue_alert_rule_id = self.config.get("alert_rule_id")
321+
if issue_alert_rule_id:
322+
issue_alert_rule = Rule.objects.filter(
323323
project_id=self.project_id,
324-
id=alert_rule_id,
324+
id=issue_alert_rule_id,
325325
source=RuleSource.CRON_MONITOR,
326326
status=ObjectStatus.ACTIVE,
327327
).first()
328-
if alert_rule:
329-
return alert_rule
328+
if issue_alert_rule:
329+
return issue_alert_rule
330330

331-
# If alert_rule_id is stale, clear it from the config
331+
# If issue_alert_rule_id is stale, clear it from the config
332332
clean_config = self.config.copy()
333333
clean_config.pop("alert_rule_id", None)
334334
self.update(config=clean_config)
335335

336336
return None
337337

338-
def get_alert_rule_data(self):
339-
alert_rule = self.get_alert_rule()
340-
if alert_rule:
341-
data = alert_rule.data
342-
alert_rule_data: dict[str, Any | None] = dict()
338+
def get_issue_alert_rule_data(self):
339+
issue_alert_rule = self.get_issue_alert_rule()
340+
if issue_alert_rule:
341+
data = issue_alert_rule.data
342+
issue_alert_rule_data: dict[str, Any | None] = dict()
343343

344344
# Build up alert target data
345345
targets = []
@@ -352,18 +352,18 @@ def get_alert_rule_data(self):
352352
"targetType": action.get("targetType"),
353353
}
354354
)
355-
alert_rule_data["targets"] = targets
355+
issue_alert_rule_data["targets"] = targets
356356

357-
environment, alert_rule_environment_id = None, alert_rule.environment_id
358-
if alert_rule_environment_id:
357+
environment, issue_alert_rule_environment_id = None, issue_alert_rule.environment_id
358+
if issue_alert_rule_environment_id:
359359
try:
360-
environment = Environment.objects.get(id=alert_rule_environment_id).name
360+
environment = Environment.objects.get(id=issue_alert_rule_environment_id).name
361361
except Environment.DoesNotExist:
362362
pass
363363

364-
alert_rule_data["environment"] = environment
364+
issue_alert_rule_data["environment"] = environment
365365

366-
return alert_rule_data
366+
return issue_alert_rule_data
367367

368368
return None
369369

src/sentry/monitors/serializers.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ def get_attrs(self, item_list, user, **kwargs):
129129

130130
if self._expand("alertRule"):
131131
for item in item_list:
132-
attrs[item]["alertRule"] = item.get_alert_rule_data()
132+
attrs[item]["alertRule"] = item.get_issue_alert_rule_data()
133133

134134
return attrs
135135

src/sentry/monitors/utils.py

Lines changed: 28 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -199,21 +199,23 @@ def fetch_associated_groups(
199199
return trace_groups
200200

201201

202-
def create_alert_rule(
203-
request: Request, project: Project, monitor: Monitor, validated_alert_rule: dict
202+
def create_issue_alert_rule(
203+
request: Request, project: Project, monitor: Monitor, validated_issue_alert_rule: dict
204204
):
205205
"""
206-
Create an alert rule from a request with the given data
206+
Creates an Issue Alert `Rule` instance from a request with the given data
207207
:param request: Request object
208208
:param project: Project object
209209
:param monitor: Monitor object being created
210-
:param alert_rule: Dictionary of configurations for an associated Rule
210+
:param validated_issue_alert_rule: Dictionary of configurations for an associated Rule
211211
:return: dict
212212
"""
213-
alert_rule_data = create_alert_rule_data(project, request.user, monitor, validated_alert_rule)
213+
issue_alert_rule_data = create_issue_alert_rule_data(
214+
project, request.user, monitor, validated_issue_alert_rule
215+
)
214216
serializer = RuleSerializer(
215217
context={"project": project, "organization": project.organization},
216-
data=alert_rule_data,
218+
data=issue_alert_rule_data,
217219
)
218220

219221
if not serializer.is_valid():
@@ -245,16 +247,18 @@ def create_alert_rule(
245247
return rule.id
246248

247249

248-
def create_alert_rule_data(project: Project, user: User, monitor: Monitor, alert_rule: dict):
250+
def create_issue_alert_rule_data(
251+
project: Project, user: User, monitor: Monitor, issue_alert_rule: dict
252+
):
249253
"""
250254
Gets a dict formatted alert rule to create alongside the monitor
251255
:param project: Project object
252256
:param user: User object that made the request
253257
:param monitor: Monitor object being created
254-
:param alert_rule: Dictionary of configurations for an associated Rule
258+
:param issue_alert_rule: Dictionary of configurations for an associated Rule
255259
:return: dict
256260
"""
257-
alert_rule_data = {
261+
issue_alert_rule_data = {
258262
"actionMatch": "any",
259263
"actions": [],
260264
"conditions": [
@@ -271,7 +275,7 @@ def create_alert_rule_data(project: Project, user: User, monitor: Monitor, alert
271275
"name": user.email,
272276
},
273277
"dateCreated": timezone.now().strftime("%Y-%m-%dT%H:%M:%S.%fZ"),
274-
"environment": alert_rule.get("environment", None),
278+
"environment": issue_alert_rule.get("environment", None),
275279
"filterMatch": "all",
276280
"filters": [
277281
{
@@ -288,7 +292,7 @@ def create_alert_rule_data(project: Project, user: User, monitor: Monitor, alert
288292
"snooze": False,
289293
}
290294

291-
for target in alert_rule.get("targets", []):
295+
for target in issue_alert_rule.get("targets", []):
292296
target_identifier = target["target_identifier"]
293297
target_type = target["target_type"]
294298

@@ -297,16 +301,20 @@ def create_alert_rule_data(project: Project, user: User, monitor: Monitor, alert
297301
"targetIdentifier": target_identifier,
298302
"targetType": target_type,
299303
}
300-
alert_rule_data["actions"].append(action)
304+
issue_alert_rule_data["actions"].append(action)
301305

302-
return alert_rule_data
306+
return issue_alert_rule_data
303307

304308

305-
def update_alert_rule(
306-
request: Request, project: Project, monitor: Monitor, alert_rule: Rule, alert_rule_data: dict
309+
def update_issue_alert_rule(
310+
request: Request,
311+
project: Project,
312+
monitor: Monitor,
313+
issue_alert_rule: Rule,
314+
issue_alert_rule_data: dict,
307315
):
308316
actions = []
309-
for target in alert_rule_data.get("targets", []):
317+
for target in issue_alert_rule_data.get("targets", []):
310318
target_identifier = target["target_identifier"]
311319
target_type = target["target_type"]
312320

@@ -321,7 +329,7 @@ def update_alert_rule(
321329
context={"project": project, "organization": project.organization},
322330
data={
323331
"actions": actions,
324-
"environment": alert_rule_data.get("environment", None),
332+
"environment": issue_alert_rule_data.get("environment", None),
325333
},
326334
partial=True,
327335
)
@@ -330,7 +338,7 @@ def update_alert_rule(
330338
data = serializer.validated_data
331339

332340
# update only slug conditions
333-
conditions = alert_rule.data.get("conditions", [])
341+
conditions = issue_alert_rule.data.get("conditions", [])
334342
updated = False
335343
for condition in conditions:
336344
if condition.get("key") == "monitor.slug":
@@ -356,10 +364,10 @@ def update_alert_rule(
356364
"conditions": conditions,
357365
}
358366

359-
updated_rule = Updater.run(rule=alert_rule, request=request, **kwargs)
367+
updated_rule = Updater.run(rule=issue_alert_rule, request=request, **kwargs)
360368

361369
RuleActivity.objects.create(
362370
rule=updated_rule, user_id=request.user.id, type=RuleActivityType.UPDATED.value
363371
)
364372

365-
return alert_rule.id
373+
return issue_alert_rule.id

src/sentry/testutils/cases.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3062,7 +3062,7 @@ def _create_monitor_environment(self, monitor, name="production", **kwargs):
30623062
monitor=monitor, environment=environment, **monitorenvironment_defaults
30633063
)
30643064

3065-
def _create_alert_rule(self, monitor):
3065+
def _create_issue_alert_rule(self, monitor):
30663066
conditions = [
30673067
{
30683068
"id": "sentry.rules.conditions.first_seen_event.FirstSeenEventCondition",

tests/sentry/monitors/endpoints/test_organization_monitor_details.py

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -65,17 +65,17 @@ def test_filtering_monitor_environment(self):
6565
)
6666
assert len(response.data["environments"]) == 1
6767

68-
def test_expand_alert_rule(self):
68+
def test_expand_issue_alert_rule(self):
6969
monitor = self._create_monitor()
7070

7171
resp = self.get_success_response(self.organization.slug, monitor.slug, expand=["alertRule"])
7272
assert resp.data["alertRule"] is None
7373

74-
self._create_alert_rule(monitor)
74+
self._create_issue_alert_rule(monitor)
7575
resp = self.get_success_response(self.organization.slug, monitor.slug, expand=["alertRule"])
76-
alert_rule = resp.data["alertRule"]
77-
assert alert_rule is not None
78-
assert alert_rule["environment"] is not None
76+
issue_alert_rule = resp.data["alertRule"]
77+
assert issue_alert_rule is not None
78+
assert issue_alert_rule["environment"] is not None
7979

8080

8181
@region_silo_test
@@ -302,9 +302,9 @@ def test_max_runtime(self):
302302
second=0, microsecond=0
303303
) + timedelta(minutes=TIMEOUT)
304304

305-
def test_existing_alert_rule(self):
305+
def test_existing_issue_alert_rule(self):
306306
monitor = self._create_monitor()
307-
rule = self._create_alert_rule(monitor)
307+
rule = self._create_issue_alert_rule(monitor)
308308
new_environment = self.create_environment(name="jungle")
309309
new_user = self.create_user()
310310
self.create_team_membership(user=new_user, team=self.team)
@@ -325,7 +325,7 @@ def test_existing_alert_rule(self):
325325
assert resp.data["slug"] == "new-slug"
326326

327327
monitor = Monitor.objects.get(id=monitor.id)
328-
monitor_rule = monitor.get_alert_rule()
328+
monitor_rule = monitor.get_issue_alert_rule()
329329
assert monitor_rule.id == rule.id
330330
assert monitor_rule.label == "Monitor Alert: new-name"
331331

@@ -354,7 +354,7 @@ def test_existing_alert_rule(self):
354354
rule_environment = Environment.objects.get(id=monitor_rule.environment_id)
355355
assert rule_environment.name == new_environment.name
356356

357-
def test_without_existing_alert_rule(self):
357+
def test_without_existing_issue_alert_rule(self):
358358
monitor = self._create_monitor()
359359
resp = self.get_success_response(
360360
self.organization.slug,
@@ -369,7 +369,7 @@ def test_without_existing_alert_rule(self):
369369
assert resp.data["slug"] == monitor.slug
370370

371371
monitor = Monitor.objects.get(id=monitor.id)
372-
rule = monitor.get_alert_rule()
372+
rule = monitor.get_issue_alert_rule()
373373
assert rule is not None
374374

375375
def test_invalid_config_param(self):
@@ -691,9 +691,9 @@ def test_bad_environment(self):
691691
qs_params={"environment": "jungle"},
692692
)
693693

694-
def test_simple_with_alert_rule(self):
694+
def test_simple_with_issue_alert_rule(self):
695695
monitor = self._create_monitor()
696-
self._create_alert_rule(monitor)
696+
self._create_issue_alert_rule(monitor)
697697

698698
self.get_success_response(
699699
self.organization.slug, monitor.slug, method="DELETE", status_code=202
@@ -703,9 +703,9 @@ def test_simple_with_alert_rule(self):
703703
assert rule.status == ObjectStatus.PENDING_DELETION
704704
assert RuleActivity.objects.filter(rule=rule, type=RuleActivityType.DELETED.value).exists()
705705

706-
def test_simple_with_alert_rule_deleted(self):
706+
def test_simple_with_issue_alert_rule_deleted(self):
707707
monitor = self._create_monitor()
708-
rule = self._create_alert_rule(monitor)
708+
rule = self._create_issue_alert_rule(monitor)
709709
rule.delete()
710710

711711
self.get_success_response(

0 commit comments

Comments
 (0)