def post(self, request, project): """ Create a rule Create a new rule for the given project. {method} {path} {{ "name": "My rule name", "conditions": [], "actions": [], "actionMatch": "all" }} """ serializer = RuleSerializer( context={'project': project}, data=request.DATA, ) if serializer.is_valid(): rule = serializer.save(rule=Rule()) return Response(serialize(rule, request.user)) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
def put(self, request, project, rule_id): """ Update a rule Update various attributes for the given rule. {method} {path} {{ "name": "My rule name", "conditions": [], "actions": [], "actionMatch": "all" }} """ rule = Rule.objects.get( project=project, id=rule_id, ) serializer = RuleSerializer({ 'actionMatch': rule.data.get('action_match', 'all'), }, context={'project': project}, data=request.DATA, partial=True) if serializer.is_valid(): rule = serializer.save(rule=rule) return Response(serialize(rule, request.user)) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
def post(self, request, project): """ Create a rule Create a new rule for the given project. {method} {path} {{ "name": "My rule name", "conditions": [], "actions": [], "actionMatch": "all" }} """ serializer = RuleSerializer(context={"project": project}, data=request.data) if serializer.is_valid(): rule = serializer.save(rule=Rule()) self.create_audit_entry( request=request, organization=project.organization, target_object=rule.id, event=AuditLogEntryEvent.RULE_ADD, data=rule.get_audit_log_data(), ) alert_rule_created.send_robust( user=request.user, project=project, rule=rule, sender=self ) return Response(serialize(rule, request.user)) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
def put(self, request, project, rule_id): """ Update a rule Update various attributes for the given rule. {method} {path} {{ "name": "My rule name", "conditions": [], "actions": [], "actionMatch": "all" }} """ rule = Rule.objects.get( project=project, id=rule_id, ) serializer = RuleSerializer( { 'actionMatch': rule.data.get('action_match', 'all'), }, context={'project': project}, data=request.DATA, partial=True) if serializer.is_valid(): rule = serializer.save(rule=rule) return Response(serialize(rule, request.user)) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
def post(self, request, project): """ Create a rule Create a new rule for the given project. {method} {path} {{ "name": "My rule name", "conditions": [], "actions": [], "actionMatch": "all" }} """ serializer = RuleSerializer( context={'project': project}, data=request.DATA, ) if serializer.is_valid(): rule = serializer.save(rule=Rule()) self.create_audit_entry( request=request, organization=project.organization, target_object=rule.id, event=AuditLogEntryEvent.RULE_ADD, data=rule.get_audit_log_data(), ) alert_rule_created.send(project=project, rule=rule, sender=self) return Response(serialize(rule, request.user)) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
def post(self, request, project): """ Create a rule Create a new rule for the given project. {method} {path} {{ "name": "My rule name", "conditions": [], "actions": [], "actionMatch": "all" }} """ serializer = RuleSerializer(context={"project": project}, data=request.data) if serializer.is_valid(): data = serializer.validated_data kwargs = { "name": data["name"], "environment": data.get("environment"), "project": project, "action_match": data["actionMatch"], "conditions": data["conditions"], "actions": data["actions"], "frequency": data.get("frequency"), } if data.get("pending_save"): client = tasks.RedisRuleStatus() uuid_context = {"uuid": client.uuid} kwargs.update(uuid_context) tasks.find_channel_id_for_rule.apply_async(kwargs=kwargs) return Response(uuid_context, status=202) rule = project_rules.Creator.run(request=request, **kwargs) RuleActivity.objects.create(rule=rule, user=request.user, type=RuleActivityType.CREATED.value) self.create_audit_entry( request=request, organization=project.organization, target_object=rule.id, event=AuditLogEntryEvent.RULE_ADD, data=rule.get_audit_log_data(), ) alert_rule_created.send_robust(user=request.user, project=project, rule=rule, rule_type="issue", sender=self) return Response(serialize(rule, request.user)) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
def put(self, request, project, rule_id): """ Update a rule Update various attributes for the given rule. {method} {path} {{ "name": "My rule name", "conditions": [], "actions": [], "actionMatch": "all" }} """ rule = Rule.objects.get( project=project, id=rule_id, ) serializer = RuleSerializer( { 'actionMatch': rule.data.get('action_match') or Rule.DEFAULT_ACTION_MATCH, 'frequency': rule.data.get('frequency') or Rule.DEFAULT_FREQUENCY, }, context={'project': project}, data=request.DATA, partial=True) if serializer.is_valid(): rule = serializer.save(rule=rule) self.create_audit_entry( request=request, organization=project.organization, target_object=rule.id, event=AuditLogEntryEvent.RULE_EDIT, data=rule.get_audit_log_data(), ) return Response(serialize(rule, request.user)) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
def put(self, request, project, rule_id): """ Update a rule Update various attributes for the given rule. {method} {path} {{ "name": "My rule name", "conditions": [], "actions": [], "actionMatch": "all" }} """ rule = Rule.objects.get( project=project, id=rule_id, ) serializer = RuleSerializer( { 'actionMatch': rule.data.get('action_match') or Rule.DEFAULT_ACTION_MATCH, 'frequency': rule.data.get('frequency') or Rule.DEFAULT_FREQUENCY, }, context={'project': project}, data=request.DATA, partial=True ) if serializer.is_valid(): rule = serializer.save(rule=rule) self.create_audit_entry( request=request, organization=project.organization, target_object=rule.id, event=AuditLogEntryEvent.RULE_EDIT, data=rule.get_audit_log_data(), ) return Response(serialize(rule, request.user)) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
def post(self, request: Request, project) -> Response: """ Create a rule Create a new rule for the given project. {method} {path} {{ "name": "My rule name", "owner": "type:id", "conditions": [], "filters": [], "actions": [], "actionMatch": "all", "filterMatch": "all" }} """ serializer = RuleSerializer(context={ "project": project, "organization": project.organization }, data=request.data) if serializer.is_valid(): data = serializer.validated_data # combine filters and conditions into one conditions criteria for the rule object conditions = data.get("conditions", []) if "filters" in data: conditions.extend(data["filters"]) kwargs = { "name": data["name"], "environment": data.get("environment"), "project": project, "action_match": data["actionMatch"], "filter_match": data.get("filterMatch"), "conditions": conditions, "actions": data.get("actions", []), "frequency": data.get("frequency"), "user_id": request.user.id, } owner = data.get("owner") if owner: try: kwargs["owner"] = owner.resolve_to_actor().id except (User.DoesNotExist, Team.DoesNotExist): return Response( "Could not resolve owner", status=status.HTTP_400_BAD_REQUEST, ) if data.get("pending_save"): client = tasks.RedisRuleStatus() uuid_context = {"uuid": client.uuid} kwargs.update(uuid_context) tasks.find_channel_id_for_rule.apply_async(kwargs=kwargs) return Response(uuid_context, status=202) created_alert_rule_ui_component = trigger_alert_rule_action_creators( kwargs.get("actions")) rule = project_rules.Creator.run(request=request, **kwargs) RuleActivity.objects.create(rule=rule, user=request.user, type=RuleActivityType.CREATED.value) self.create_audit_entry( request=request, organization=project.organization, target_object=rule.id, event=AuditLogEntryEvent.RULE_ADD, data=rule.get_audit_log_data(), ) alert_rule_created.send_robust( user=request.user, project=project, rule=rule, rule_type="issue", sender=self, is_api_token=request.auth is not None, alert_rule_ui_component=created_alert_rule_ui_component, ) return Response(serialize(rule, request.user)) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)