def handle_trigger_actions(self, incident_triggers, metric_value): actions = deduplicate_trigger_actions(triggers=deepcopy(incident_triggers)) # Grab the first trigger to get incident id (they are all the same) # All triggers should either be firing or resolving, so doesn't matter which we grab. incident_trigger = incident_triggers[0] method = "fire" if incident_triggers[0].status == TriggerStatus.ACTIVE.value else "resolve" for action in actions: transaction.on_commit( handle_trigger_action.s( action_id=action.id, incident_id=incident_trigger.incident_id, project_id=self.subscription.project_id, metric_value=metric_value, method=method, ).delay )
def handle_trigger_actions(self, incident_triggers, metric_value): # These will all be for the same incident and status, so just grab the first one incident_trigger = incident_triggers[0] method = "fire" if incident_trigger.status == TriggerStatus.ACTIVE.value else "resolve" actions = deduplicate_trigger_actions( list( AlertRuleTriggerAction.objects.filter(alert_rule_trigger__in=[ it.alert_rule_trigger for it in incident_triggers ]).select_related("alert_rule_trigger"))) for action in actions: transaction.on_commit( handle_trigger_action.s( action_id=action.id, incident_id=incident_trigger.incident_id, project_id=self.subscription.project_id, metric_value=metric_value, method=method, ).delay)
def trigger_incident_triggers(incident): from sentry.incidents.tasks import handle_trigger_action triggers = IncidentTrigger.objects.filter( incident=incident).select_related("alert_rule_trigger") for trigger in triggers: if trigger.status == TriggerStatus.ACTIVE.value: with transaction.atomic(): method = "resolve" for action in AlertRuleTriggerAction.objects.filter( alert_rule_trigger=trigger.alert_rule_trigger): for project in incident.projects.all(): transaction.on_commit( handle_trigger_action.s( action_id=action.id, incident_id=incident.id, project_id=project.id, method=method, ).delay) trigger.status = TriggerStatus.RESOLVED.value trigger.save()
def handle_trigger_actions(self, incident_triggers, metric_value): actions = deduplicate_trigger_actions( list( AlertRuleTriggerAction.objects.filter(alert_rule_trigger__in=[ it.alert_rule_trigger for it in incident_triggers ]).select_related("alert_rule_trigger"))) # Grab the first trigger to get incident id (they are all the same) # All triggers should either be firing or resolving, so doesn't matter which we grab. incident_trigger = incident_triggers[0] method = "fire" if incident_triggers[ 0].status == TriggerStatus.ACTIVE.value else "resolve" for action in actions: transaction.on_commit( handle_trigger_action.s( action_id=action.id, incident_id=incident_trigger.incident_id, project_id=self.subscription.project_id, metric_value=metric_value, method=method, ).delay)