diff --git a/engine/apps/api/serializers/alert_group.py b/engine/apps/api/serializers/alert_group.py index 1e8371ea..3aac2cda 100644 --- a/engine/apps/api/serializers/alert_group.py +++ b/engine/apps/api/serializers/alert_group.py @@ -56,6 +56,19 @@ class AlertGroupFieldsCacheSerializerMixin(AlertsFieldCacheBusterMixin): return field +class AlertGroupLabelSerializer(serializers.Serializer): + class KeySerializer(serializers.Serializer): + id = serializers.CharField(source="key_name") + name = serializers.CharField(source="key_name") + + class ValueSerializer(serializers.Serializer): + id = serializers.CharField(source="value_name") + name = serializers.CharField(source="value_name") + + key = KeySerializer(source="*") + value = ValueSerializer(source="*") + + class ShortAlertGroupSerializer(AlertGroupFieldsCacheSerializerMixin, serializers.ModelSerializer): pk = serializers.CharField(read_only=True, source="public_primary_key") alert_receive_channel = FastAlertReceiveChannelSerializer(source="channel") @@ -105,6 +118,8 @@ class AlertGroupListSerializer(EagerLoadingMixin, AlertGroupFieldsCacheSerialize render_for_web = serializers.SerializerMethodField() render_for_classic_markdown = serializers.SerializerMethodField() + labels = AlertGroupLabelSerializer(many=True, read_only=True) + PREFETCH_RELATED = [ "dependent_alert_groups", "log_records__author", @@ -150,6 +165,7 @@ class AlertGroupListSerializer(EagerLoadingMixin, AlertGroupFieldsCacheSerialize "declare_incident_link", "team", "grafana_incident_id", + "labels", ] @extend_schema_field( diff --git a/engine/apps/api/tests/test_alert_group.py b/engine/apps/api/tests/test_alert_group.py index 54124c15..5ff8cc81 100644 --- a/engine/apps/api/tests/test_alert_group.py +++ b/engine/apps/api/tests/test_alert_group.py @@ -2121,3 +2121,24 @@ def test_delete(mock_delete_alert_group, make_user_auth_headers, alert_group_int url = reverse("api-internal:alertgroup-detail", kwargs={"pk": "potato"}) response = client.delete(url, **auth_headers) assert response.status_code == status.HTTP_404_NOT_FOUND + + +@pytest.mark.django_db +def test_alert_group_list_labels( + alert_group_internal_api_setup, + make_alert_group_label_association, + make_alert_receive_channel, + make_alert_group, + make_user_auth_headers, +): + user, token, alert_groups = alert_group_internal_api_setup + make_alert_group_label_association(user.organization, alert_groups[0], key_name="a", value_name="b") + + client = APIClient() + url = reverse("api-internal:alertgroup-list") + response = client.get(url, **make_user_auth_headers(user, token)) + + assert response.status_code == status.HTTP_200_OK + assert response.json()["results"][-1]["labels"] == [ + {"key": {"id": "a", "name": "a"}, "value": {"id": "b", "name": "b"}} + ]