Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
aos
GitHub Repository: aos/grafana-agent
Path: blob/main/pkg/integrations/v2/app_agent_receiver/utils.go
5340 views
1
package app_agent_receiver
2
3
import (
4
"fmt"
5
"sort"
6
7
"github.com/minio/pkg/wildcard"
8
om "github.com/wk8/go-ordered-map"
9
)
10
11
// KeyVal is an ordered map of string to interface
12
type KeyVal = om.OrderedMap
13
14
// NewKeyVal creates new empty KeyVal
15
func NewKeyVal() *KeyVal {
16
return om.New()
17
}
18
19
// KeyValFromMap will instantiate KeyVal from a map[string]string
20
func KeyValFromMap(m map[string]string) *KeyVal {
21
kv := NewKeyVal()
22
keys := make([]string, 0, len(m))
23
for k := range m {
24
keys = append(keys, k)
25
}
26
sort.Strings(keys)
27
for _, k := range keys {
28
KeyValAdd(kv, k, m[k])
29
}
30
return kv
31
}
32
33
// MergeKeyVal will merge source in target
34
func MergeKeyVal(target *KeyVal, source *KeyVal) {
35
for el := source.Oldest(); el != nil; el = el.Next() {
36
target.Set(el.Key, el.Value)
37
}
38
}
39
40
// MergeKeyValWithPrefix will merge source in target, adding a prefix to each key being merged in
41
func MergeKeyValWithPrefix(target *KeyVal, source *KeyVal, prefix string) {
42
for el := source.Oldest(); el != nil; el = el.Next() {
43
target.Set(fmt.Sprintf("%s%s", prefix, el.Key), el.Value)
44
}
45
}
46
47
// KeyValAdd adds a key + value string pair to kv
48
func KeyValAdd(kv *KeyVal, key string, value string) {
49
if len(value) > 0 {
50
kv.Set(key, value)
51
}
52
}
53
54
// KeyValToInterfaceSlice converts KeyVal to []interface{}, typically used for logging
55
func KeyValToInterfaceSlice(kv *KeyVal) []interface{} {
56
slice := make([]interface{}, kv.Len()*2)
57
idx := 0
58
for el := kv.Oldest(); el != nil; el = el.Next() {
59
slice[idx] = el.Key
60
idx++
61
slice[idx] = el.Value
62
idx++
63
}
64
return slice
65
}
66
67
// KeyValToInterfaceMap converts KeyVal to map[string]interface
68
func KeyValToInterfaceMap(kv *KeyVal) map[string]interface{} {
69
retv := make(map[string]interface{})
70
for el := kv.Oldest(); el != nil; el = el.Next() {
71
retv[fmt.Sprint(el.Key)] = el.Value
72
}
73
return retv
74
}
75
76
// URLMatchesOrigins returns true if URL matches at least one of origin prefix. Wildcard '*' and '?' supported
77
func urlMatchesOrigins(URL string, origins []string) bool {
78
for _, origin := range origins {
79
if origin == "*" || wildcard.Match(origin+"*", URL) {
80
return true
81
}
82
}
83
return false
84
}
85
86