def delete(self, request, organization, alert_rule, alert_rule_trigger):
     try:
         delete_alert_rule_trigger(alert_rule_trigger)
         return Response(status=status.HTTP_204_NO_CONTENT)
     except AlreadyDeletedError:
         return Response("This trigger has already been deleted",
                         status=status.HTTP_400_BAD_REQUEST)
예제 #2
0
    def _handle_triggers(self, alert_rule, triggers):
        if triggers is not None:
            # Delete triggers we don't have present in the incoming data
            trigger_ids = [x["id"] for x in triggers if "id" in x]
            triggers_to_delete = AlertRuleTrigger.objects.filter(
                alert_rule=alert_rule).exclude(id__in=trigger_ids)
            for trigger in triggers_to_delete:
                delete_alert_rule_trigger(trigger)

            for trigger_data in triggers:
                if "id" in trigger_data:
                    trigger_instance = AlertRuleTrigger.objects.get(
                        alert_rule=alert_rule, id=trigger_data["id"])
                else:
                    trigger_instance = None

                trigger_serializer = AlertRuleTriggerSerializer(
                    context={
                        "alert_rule": alert_rule,
                        "organization": self.context["organization"],
                        "access": self.context["access"],
                    },
                    instance=trigger_instance,
                    data=trigger_data,
                )

                if trigger_serializer.is_valid():
                    trigger_serializer.save()
                else:
                    raise serializers.ValidationError(
                        trigger_serializer.errors)
예제 #3
0
    def _handle_triggers(self, alert_rule, triggers):
        channel_lookup_timeout_error = None
        if triggers is not None:
            # Delete triggers we don't have present in the incoming data
            trigger_ids = [x["id"] for x in triggers if "id" in x]
            triggers_to_delete = AlertRuleTrigger.objects.filter(
                alert_rule=alert_rule).exclude(id__in=trigger_ids)
            for trigger in triggers_to_delete:
                delete_alert_rule_trigger(trigger)

            for trigger_data in triggers:
                if "id" in trigger_data:
                    trigger_instance = AlertRuleTrigger.objects.get(
                        alert_rule=alert_rule, id=trigger_data["id"])
                else:
                    trigger_instance = None

                trigger_serializer = AlertRuleTriggerSerializer(
                    context={
                        "alert_rule":
                        alert_rule,
                        "organization":
                        self.context["organization"],
                        "access":
                        self.context["access"],
                        "user":
                        self.context["user"],
                        "use_async_lookup":
                        self.context.get("use_async_lookup"),
                        "input_channel_id":
                        self.context.get("input_channel_id"),
                        "validate_channel_id":
                        self.context.get("validate_channel_id"),
                    },
                    instance=trigger_instance,
                    data=trigger_data,
                )

                if trigger_serializer.is_valid():
                    try:
                        trigger_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(
                        trigger_serializer.errors)
        if channel_lookup_timeout_error:
            raise channel_lookup_timeout_error
예제 #4
0
    def test(self):
        alert_rule = self.create_alert_rule()
        trigger = create_alert_rule_trigger(
            alert_rule,
            "hi",
            AlertRuleThresholdType.ABOVE,
            1000,
            400,
            excluded_projects=[self.project],
        )
        trigger_id = trigger.id
        assert AlertRuleTriggerExclusion.objects.filter(
            alert_rule_trigger=trigger,
            query_subscription__project=self.project).exists()
        delete_alert_rule_trigger(trigger)

        assert not AlertRuleTrigger.objects.filter(id=trigger_id).exists()
        assert not AlertRuleTriggerExclusion.objects.filter(
            alert_rule_trigger=trigger,
            query_subscription__project=self.project).exists()