From f930e3687e458325737a9012debbf79c70296f0c Mon Sep 17 00:00:00 2001 From: Ben Sully Date: Fri, 3 Feb 2023 13:43:21 +0000 Subject: [PATCH] Include alert details in Grafana Incident alert-group endpoint (#1280) This will be used by Grafana Incident to infer details about the incident if alert groups are present. Depends on #1279 --- .../api_for_grafana_incident/serializers.py | 22 +++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/engine/apps/api_for_grafana_incident/serializers.py b/engine/apps/api_for_grafana_incident/serializers.py index c6668933..5b6cf049 100644 --- a/engine/apps/api_for_grafana_incident/serializers.py +++ b/engine/apps/api_for_grafana_incident/serializers.py @@ -2,17 +2,30 @@ import logging from rest_framework import serializers -from apps.alerts.models import AlertGroup -from common.api_helpers.mixins import EagerLoadingMixin +from apps.alerts.models import Alert, AlertGroup logger = logging.getLogger(__name__) -class AlertGroupSerializer(EagerLoadingMixin, serializers.ModelSerializer): +class AlertSerializer(serializers.ModelSerializer): id_oncall = serializers.CharField(read_only=True, source="public_primary_key") + payload = serializers.JSONField(read_only=True, source="raw_request_data") + + class Meta: + model = Alert + fields = [ + "id_oncall", + "payload", + ] + + +class AlertGroupSerializer(serializers.ModelSerializer): + + id = serializers.CharField(read_only=True, source="public_primary_key") status = serializers.SerializerMethodField(source="get_status") link = serializers.CharField(read_only=True, source="web_link") + alerts = AlertSerializer(many=True, read_only=True) def get_status(self, obj): return next(filter(lambda status: status[0] == obj.status, AlertGroup.STATUS_CHOICES))[1].lower() @@ -20,7 +33,8 @@ class AlertGroupSerializer(EagerLoadingMixin, serializers.ModelSerializer): class Meta: model = AlertGroup fields = [ - "id_oncall", + "id", "link", "status", + "alerts", ]