Ejemplo n.º 1
0
 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
         )
Ejemplo n.º 2
0
    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)
Ejemplo n.º 3
0
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()
Ejemplo n.º 4
0
    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)