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)
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])
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
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")
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")
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])
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
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