From 68c38244cc169f746eab1fd80f5d78c6c0f671c4 Mon Sep 17 00:00:00 2001 From: Sunny Date: Wed, 13 Dec 2023 17:43:38 +0000 Subject: [PATCH] Exclude eventv1.MetaTokenKey from event metadata eventv1.MetaTokenKey is required to be considered in rate limiting but it is only for internal use by flux components and should not be sent to the alert provider. Remove eventv1.MetaTokenKey from the metadata of event before processing the event for various matching alerts. Signed-off-by: Sunny --- internal/server/event_handlers.go | 14 +++++++++++ internal/server/event_handlers_test.go | 32 ++++++++++++++++++++++++++ 2 files changed, 46 insertions(+) diff --git a/internal/server/event_handlers.go b/internal/server/event_handlers.go index 0cbd2e4f8..c3ff50f04 100644 --- a/internal/server/event_handlers.go +++ b/internal/server/event_handlers.go @@ -58,6 +58,9 @@ func (s *EventServer) handleEvent() func(w http.ResponseWriter, r *http.Request) ctx, cancel := context.WithTimeout(r.Context(), 15*time.Second) defer cancel() + // Remove any internal metadata before further processing the event. + excludeInternalMetadata(event) + alerts, err := s.getAllAlertsForEvent(ctx, event) if err != nil { eventLogger.Error(err, "failed to get alerts for the event") @@ -440,3 +443,14 @@ func (s *EventServer) enhanceEventWithAlertMetadata(ctx context.Context, event * event.Metadata = meta } } + +// excludeInternalMetadata removes any internal metadata from the given event. +func excludeInternalMetadata(event *eventv1.Event) { + if len(event.Metadata) == 0 { + return + } + excludeList := []string{eventv1.MetaTokenKey} + for _, key := range excludeList { + delete(event.Metadata, key) + } +} diff --git a/internal/server/event_handlers_test.go b/internal/server/event_handlers_test.go index 5fe4ebf8a..0b9f7aef6 100644 --- a/internal/server/event_handlers_test.go +++ b/internal/server/event_handlers_test.go @@ -1058,3 +1058,35 @@ func TestEnhanceEventWithAlertMetadata(t *testing.T) { }) } } + +func Test_excludeInternalMetadata(t *testing.T) { + tests := []struct { + name string + event eventv1.Event + wantMetadata map[string]string + }{ + { + name: "no metadata", + }, + { + name: "internal metadata", + event: eventv1.Event{ + Metadata: map[string]string{ + eventv1.MetaTokenKey: "aaaa", + eventv1.MetaRevisionKey: "bbbb", + }, + }, + wantMetadata: map[string]string{ + eventv1.MetaRevisionKey: "bbbb", + }, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + g := NewWithT(t) + + excludeInternalMetadata(&tt.event) + g.Expect(tt.event.Metadata).To(BeEquivalentTo(tt.wantMetadata)) + }) + } +}