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)
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)
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
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()