예제 #1
0
    def test_excluded_projects(self):
        projects = [self.project]
        excluded = [self.create_project()]
        alert_rule = self.create_alert_rule(projects=[],
                                            include_all_projects=True,
                                            excluded_projects=excluded)
        result = serialize(alert_rule,
                           serializer=DetailedAlertRuleSerializer())
        self.assert_alert_rule_serialized(alert_rule, result)
        assert result["projects"] == [p.slug for p in projects]
        assert result["excludedProjects"] == [p.slug for p in excluded]
        assert result["eventTypes"] == [
            SnubaQueryEventType.EventType.ERROR.name.lower()
        ]

        alert_rule = self.create_alert_rule(projects=projects,
                                            include_all_projects=False)
        result = serialize(alert_rule,
                           serializer=DetailedAlertRuleSerializer())
        self.assert_alert_rule_serialized(alert_rule, result)
        assert result["projects"] == [p.slug for p in projects]
        assert result["excludedProjects"] == []
        assert result["eventTypes"] == [
            SnubaQueryEventType.EventType.ERROR.name.lower()
        ]
예제 #2
0
 def test_triggers(self):
     alert_rule = self.create_alert_rule()
     other_alert_rule = self.create_alert_rule()
     trigger = create_alert_rule_trigger(alert_rule, "test", 1000)
     result = serialize([alert_rule, other_alert_rule], serializer=DetailedAlertRuleSerializer())
     assert result[0]["triggers"] == [serialize(trigger)]
     assert result[1]["triggers"] == []
예제 #3
0
 def test_simple(self):
     projects = [self.project, self.create_project()]
     alert_rule = self.create_alert_rule(projects=projects)
     result = serialize(alert_rule, serializer=DetailedAlertRuleSerializer())
     self.assert_alert_rule_serialized(alert_rule, result)
     assert sorted(result["projects"]) == sorted([p.slug for p in projects])
     assert result["excludedProjects"] == []
예제 #4
0
 def test_simple(self):
     projects = [self.project, self.create_project()]
     alert_rule = self.create_alert_rule(projects=projects)
     result = serialize(alert_rule, serializer=DetailedAlertRuleSerializer())
     self.assert_alert_rule_serialized(alert_rule, result)
     assert sorted(result["projects"]) == sorted(p.slug for p in projects)
     assert result["excludedProjects"] == []
     assert result["eventTypes"] == [SnubaQueryEventType.EventType.ERROR.name.lower()]
 def get(self, request, organization, alert_rule):
     """
     Fetch an alert rule.
     ``````````````````
     :auth: required
     """
     data = serialize(alert_rule, request.user,
                      DetailedAlertRuleSerializer())
     return Response(data)
    def test_simple(self):
        self.create_team(organization=self.organization, members=[self.user])
        self.login_as(self.user)
        with self.feature("organizations:incidents"):
            resp = self.get_valid_response(self.organization.slug,
                                           self.alert_rule.id)

        assert resp.data == serialize(self.alert_rule,
                                      serializer=DetailedAlertRuleSerializer())
예제 #7
0
 def test_simple(self):
     projects = [self.project, self.create_project()]
     alert_rule = create_alert_rule(
         self.organization,
         projects,
         "hello",
         AlertRuleThresholdType.ABOVE,
         "level:error",
         QueryAggregations.TOTAL,
         10,
         1000,
         400,
         1,
     )
     result = serialize(alert_rule,
                        serializer=DetailedAlertRuleSerializer())
     self.assert_alert_rule_serialized(alert_rule, result)
     assert result["projects"] == [p.slug for p in projects]
예제 #8
0
    def get(self, request: Request, organization, alert_rule) -> Response:
        """
        Fetch an alert rule.
        ``````````````````
        :auth: required
        """
        # Serialize Alert Rule
        serialized_rule = serialize(alert_rule, request.user, DetailedAlertRuleSerializer())

        # Prepare AlertRuleTriggerActions that are SentryApp components
        errors = []
        for trigger in serialized_rule.get("triggers", []):
            for action in trigger.get("actions", []):
                if action.get("_sentry_app_installation") and action.get("_sentry_app_component"):
                    installation = SentryAppInstallation(
                        **action.get("_sentry_app_installation", {})
                    )
                    component = installation.prepare_ui_component(
                        SentryAppComponent(**action.get("_sentry_app_component")),
                        None,
                        action.get("settings"),
                    )
                    if component is None:
                        errors.append(
                            {
                                "detail": f"Could not fetch details from {installation.sentry_app.name}"
                            }
                        )
                        action["disabled"] = True
                        continue

                    action["formFields"] = component.schema.get("settings", {})

                    # Delete meta fields
                    del action["_sentry_app_installation"]
                    del action["_sentry_app_component"]

        if len(errors):
            serialized_rule["errors"] = errors

        return Response(serialized_rule)