示例#1
0
 def test_name_used(self):
     label = "uh oh"
     create_alert_rule_trigger(self.alert_rule, label, AlertRuleThresholdType.ABOVE, 1000, 400)
     trigger = create_alert_rule_trigger(
         self.alert_rule, "something else", AlertRuleThresholdType.ABOVE, 1000, 400
     )
     with self.assertRaises(AlertRuleTriggerLabelAlreadyUsedError):
         update_alert_rule_trigger(trigger, label=label)
示例#2
0
    def test_excluded_projects_not_associated_with_rule(self):
        other_project = self.create_project(fire_project_created=True)
        alert_rule = self.create_alert_rule(projects=[self.project])
        trigger = create_alert_rule_trigger(
            alert_rule, "hi", AlertRuleThresholdType.ABOVE, 1000, 400
        )

        with self.assertRaises(ProjectsNotAssociatedWithAlertRuleError):
            update_alert_rule_trigger(trigger, excluded_projects=[other_project])
示例#3
0
    def test_exclude_projects(self):
        other_project = self.create_project(fire_project_created=True)

        alert_rule = self.create_alert_rule(projects=[other_project, self.project])
        trigger = create_alert_rule_trigger(
            alert_rule, "hi", AlertRuleThresholdType.ABOVE, 1000, 400
        )
        update_alert_rule_trigger(trigger, excluded_projects=[other_project])
        assert trigger.exclusions.get().query_subscription.project == other_project
示例#4
0
 def update(self, instance, validated_data):
     validated_data = self._remove_unchanged_fields(instance,
                                                    validated_data)
     try:
         return update_alert_rule_trigger(instance, **validated_data)
     except AlertRuleTriggerLabelAlreadyUsedError:
         raise serializers.ValidationError(
             "This label is already in use for this alert rule")
示例#5
0
 def update(self, instance, validated_data):
     actions = validated_data.pop("actions")
     if "id" in validated_data:
         validated_data.pop("id")
     try:
         alert_rule_trigger = update_alert_rule_trigger(instance, **validated_data)
         self._handle_actions(alert_rule_trigger, actions)
         return alert_rule_trigger
     except AlertRuleTriggerLabelAlreadyUsedError:
         raise serializers.ValidationError("This label is already in use for this alert rule")
示例#6
0
    def test_complex_exclude_projects(self):
        excluded_project = self.create_project()
        other_project = self.create_project(fire_project_created=True)

        alert_rule = self.create_alert_rule(
            projects=[excluded_project, self.project, other_project]
        )
        trigger = create_alert_rule_trigger(
            alert_rule,
            "hi",
            AlertRuleThresholdType.ABOVE,
            1000,
            400,
            excluded_projects=[excluded_project, self.project],
        )
        update_alert_rule_trigger(trigger, excluded_projects=[other_project, excluded_project])
        excluded_projects = [
            exclusion.query_subscription.project for exclusion in trigger.exclusions.all()
        ]
        assert set(excluded_projects) == set([other_project, excluded_project])
示例#7
0
    def update(self, instance, validated_data):
        with transaction.atomic():
            validated_data = self._remove_unchanged_fields(
                instance, validated_data)
            triggers_data = validated_data.pop("triggers")
            alert_rule = update_alert_rule(instance, **validated_data)

            # Delete triggers we don't have present in the updated data.
            trigger_ids = [x["id"] for x in triggers_data]
            AlertRuleTrigger.objects.filter(alert_rule=alert_rule).exclude(
                id__in=trigger_ids).delete()

            for trigger_data in triggers_data:
                actions_data = trigger_data.pop("actions")
                try:
                    if "id" in trigger_data:
                        trigger_instance = AlertRuleTrigger.objects.get(
                            alert_rule=alert_rule, id=trigger_data["id"])
                        trigger_data.pop("id")
                        trigger = update_alert_rule_trigger(
                            trigger_instance, **trigger_data)
                    else:
                        trigger = create_alert_rule_trigger(
                            alert_rule=alert_rule, **trigger_data)
                except AlertRuleTriggerLabelAlreadyUsedError:
                    raise serializers.ValidationError(
                        "This trigger label is already in use for this alert rule"
                    )

                # Delete actions we don't have present in the updated data.
                action_ids = [x["id"] for x in actions_data]
                AlertRuleTriggerAction.objects.filter(
                    alert_rule_trigger=trigger).exclude(
                        id__in=action_ids).delete()

                for action_data in actions_data:
                    if "id" in action_data:
                        action_instance = AlertRuleTriggerAction.objects.get(
                            alert_rule_trigger=trigger, id=action_data["id"])
                        action_data.pop("id")
                        update_alert_rule_trigger_action(
                            action_instance, **action_data)
                    else:
                        create_alert_rule_trigger_action(trigger=trigger,
                                                         **action_data)

            return alert_rule
示例#8
0
    def test(self):
        trigger = create_alert_rule_trigger(self.alert_rule, "hello",
                                            AlertRuleThresholdType.ABOVE, 1000,
                                            400)

        label = "uh oh"
        threshold_type = AlertRuleThresholdType.BELOW
        alert_threshold = 2000
        resolve_threshold = 800
        trigger = update_alert_rule_trigger(
            trigger,
            label=label,
            threshold_type=threshold_type,
            alert_threshold=alert_threshold,
            resolve_threshold=resolve_threshold,
        )
        assert trigger.label == label
        assert trigger.threshold_type == threshold_type.value
        assert trigger.alert_threshold == alert_threshold
        assert trigger.resolve_threshold == resolve_threshold