mirror of
https://github.com/SigNoz/signoz.git
synced 2025-12-17 15:36:48 +00:00
50 lines
1.1 KiB
Go
50 lines
1.1 KiB
Go
|
|
package prometheus
|
||
|
|
|
||
|
|
import (
|
||
|
|
"fmt"
|
||
|
|
"github.com/prometheus/prometheus/promql"
|
||
|
|
)
|
||
|
|
|
||
|
|
func RemoveExtraLabels(res *promql.Result, labelsToRemove ...string) error {
|
||
|
|
if len(labelsToRemove) == 0 || res == nil {
|
||
|
|
return nil
|
||
|
|
}
|
||
|
|
|
||
|
|
toRemove := make(map[string]struct{}, len(labelsToRemove))
|
||
|
|
for _, l := range labelsToRemove {
|
||
|
|
toRemove[l] = struct{}{}
|
||
|
|
}
|
||
|
|
|
||
|
|
switch res.Value.(type) {
|
||
|
|
case promql.Vector:
|
||
|
|
value := res.Value.(promql.Vector)
|
||
|
|
for i := range value {
|
||
|
|
series := &(value)[i]
|
||
|
|
dst := series.Metric[:0]
|
||
|
|
for _, lbl := range series.Metric {
|
||
|
|
if _, drop := toRemove[lbl.Name]; !drop {
|
||
|
|
dst = append(dst, lbl)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
series.Metric = dst
|
||
|
|
}
|
||
|
|
case promql.Matrix:
|
||
|
|
value := res.Value.(promql.Matrix)
|
||
|
|
for i := range value {
|
||
|
|
series := &(value)[i]
|
||
|
|
dst := series.Metric[:0]
|
||
|
|
for _, lbl := range series.Metric {
|
||
|
|
if _, drop := toRemove[lbl.Name]; !drop {
|
||
|
|
dst = append(dst, lbl)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
series.Metric = dst
|
||
|
|
}
|
||
|
|
case promql.Scalar:
|
||
|
|
return nil
|
||
|
|
default:
|
||
|
|
return fmt.Errorf("rule result is not a vector or scalar or matrix")
|
||
|
|
}
|
||
|
|
return nil
|
||
|
|
}
|