Esempio n. 1
0
    def _handle_actions(self, alert_rule_trigger, actions):
        channel_lookup_timeout_error = None
        if actions is not None:
            # Delete actions we don't have present in the updated data.
            action_ids = [x["id"] for x in actions if "id" in x]
            actions_to_delete = AlertRuleTriggerAction.objects.filter(
                alert_rule_trigger=alert_rule_trigger).exclude(
                    id__in=action_ids)
            for action in actions_to_delete:
                delete_alert_rule_trigger_action(action)

            for action_data in actions:
                if "integration_id" in action_data:
                    action_data["integration"] = action_data.pop(
                        "integration_id")

                if "sentry_app_id" in action_data:
                    action_data["sentry_app"] = action_data.pop(
                        "sentry_app_id")

                if "id" in action_data:
                    action_instance = AlertRuleTriggerAction.objects.get(
                        alert_rule_trigger=alert_rule_trigger,
                        id=action_data["id"])
                else:
                    action_instance = None
                action_serializer = AlertRuleTriggerActionSerializer(
                    context={
                        "alert_rule":
                        alert_rule_trigger.alert_rule,
                        "trigger":
                        alert_rule_trigger,
                        "organization":
                        self.context["organization"],
                        "access":
                        self.context["access"],
                        "use_async_lookup":
                        self.context.get("use_async_lookup"),
                        "input_channel_id":
                        action_data.pop("input_channel_id", None),
                    },
                    instance=action_instance,
                    data=action_data,
                )

                if action_serializer.is_valid():
                    try:
                        action_serializer.save()
                    except ChannelLookupTimeoutError as e:
                        # raise the lookup error after the rest of the validation is complete
                        channel_lookup_timeout_error = e
                else:
                    raise serializers.ValidationError(action_serializer.errors)
        if channel_lookup_timeout_error:
            raise channel_lookup_timeout_error
Esempio n. 2
0
    def _handle_actions(self, alert_rule_trigger, actions):
        if actions is not None:
            # Delete actions we don't have present in the updated data.
            action_ids = [x["id"] for x in actions if "id" in x]
            actions_to_delete = AlertRuleTriggerAction.objects.filter(
                alert_rule_trigger=alert_rule_trigger).exclude(
                    id__in=action_ids)
            for action in actions_to_delete:
                delete_alert_rule_trigger_action(action)

            for action_data in actions:
                if "integration_id" in action_data:
                    action_data["integration"] = action_data.pop(
                        "integration_id")

                if "sentry_app_id" in action_data:
                    action_data["sentry_app"] = action_data.pop(
                        "sentry_app_id")

                if "id" in action_data:
                    action_instance = AlertRuleTriggerAction.objects.get(
                        alert_rule_trigger=alert_rule_trigger,
                        id=action_data["id"])
                else:
                    action_instance = None

                action_serializer = AlertRuleTriggerActionSerializer(
                    context={
                        "alert_rule": alert_rule_trigger.alert_rule,
                        "trigger": alert_rule_trigger,
                        "organization": self.context["organization"],
                        "access": self.context["access"],
                    },
                    instance=action_instance,
                    data=action_data,
                )

                if action_serializer.is_valid():
                    action_serializer.save()
                else:
                    raise serializers.ValidationError(action_serializer.errors)
Esempio n. 3
0
 def test(self):
     action_id = self.action.id
     delete_alert_rule_trigger_action(self.action)
     with self.assertRaises(AlertRuleTriggerAction.DoesNotExist):
         AlertRuleTriggerAction.objects.get(id=action_id)
Esempio n. 4
0
 def delete(self, request, organization, alert_rule, alert_rule_trigger,
            alert_rule_trigger_action):
     delete_alert_rule_trigger_action(alert_rule_trigger_action)
     return Response(status=status.HTTP_204_NO_CONTENT)