From ac16db5f215a16c3e71372126748864635b1bb63 Mon Sep 17 00:00:00 2001 From: alteredCoder Date: Tue, 12 Apr 2022 12:23:00 +0200 Subject: [PATCH] update --- cmd/crowdsec-cli/console.go | 2 +- pkg/apiserver/apic.go | 3 +++ pkg/leakybucket/overflows.go | 38 ++++++++++++++++++++++++------------ 3 files changed, 29 insertions(+), 14 deletions(-) diff --git a/cmd/crowdsec-cli/console.go b/cmd/crowdsec-cli/console.go index b1e56a6de..01928a113 100644 --- a/cmd/crowdsec-cli/console.go +++ b/cmd/crowdsec-cli/console.go @@ -305,7 +305,7 @@ Disable given information push to the central API.`, if err != nil { log.Fatalf("unable to show labels status: %s", err) } - fmt.Println(dump) + fmt.Println(string(dump)) }, } diff --git a/pkg/apiserver/apic.go b/pkg/apiserver/apic.go index 56138c3ef..6ef7d6177 100644 --- a/pkg/apiserver/apic.go +++ b/pkg/apiserver/apic.go @@ -159,6 +159,9 @@ func (a *apic) Push() error { if ok := shouldShareAlert(alert, a.consoleConfig); ok { signals = append(signals, alertToSignal(alert, getScenarioTrustOfAlert(alert))) } + if !*a.consoleConfig.ShareLabel { + alert.Meta = models.Meta{} + } } a.mu.Lock() cache = append(cache, signals...) diff --git a/pkg/leakybucket/overflows.go b/pkg/leakybucket/overflows.go index 80aa6e173..2e3a5bfe6 100644 --- a/pkg/leakybucket/overflows.go +++ b/pkg/leakybucket/overflows.go @@ -235,13 +235,13 @@ func alertFormatSource(leaky *Leaky, queue *Queue) (map[string]models.Source, st } func EventToLabel(labels map[string][]*vm.Program, queue *Queue) models.Meta { - meta := make([]*models.MetaItems0, 0) + metas := make([]*models.MetaItems0, 0) + tmpLabels := make(map[string][]string) for _, evt := range queue.Queue { for key, values := range labels { - tmpMeta := models.MetaItems0{} - tmpMeta.Key = key - tmpValue := make([]string, 0) - + if _, ok := tmpLabels[key]; !ok { + tmpLabels[key] = make([]string, 0) + } for _, value := range values { var val string output, err := expr.Run(value, exprhelpers.GetExprEnv(map[string]interface{}{"evt": evt})) @@ -258,17 +258,29 @@ func EventToLabel(labels map[string][]*vm.Program, queue *Queue) models.Meta { log.Warningf("unexpected return type for label to send : %T", output) continue } - tmpValue = append(tmpValue, val) + if val != "" && !types.InSlice(val, tmpLabels[key]) { + tmpLabels[key] = append(tmpLabels[key], val) + } } - valueBytes, err := json.Marshal(tmpValue) - if err != nil { - log.Warningf("unable to marshall label values to send: %s", err) - } - tmpMeta.Value = string(valueBytes) - meta = append(meta, &tmpMeta) } } - ret := models.Meta(meta) + for key, values := range tmpLabels { + if len(values) == 0 { + continue + } + valueByte, err := json.Marshal(values) + if err != nil { + log.Warningf("unable to dump metas: %s", err) + continue + } + meta := models.MetaItems0{ + Key: key, + Value: string(valueByte), + } + metas = append(metas, &meta) + } + + ret := models.Meta(metas) return ret }