Path: blob/main/pkg/integrations/v2/app_agent_receiver/utils.go
5340 views
package app_agent_receiver12import (3"fmt"4"sort"56"github.com/minio/pkg/wildcard"7om "github.com/wk8/go-ordered-map"8)910// KeyVal is an ordered map of string to interface11type KeyVal = om.OrderedMap1213// NewKeyVal creates new empty KeyVal14func NewKeyVal() *KeyVal {15return om.New()16}1718// KeyValFromMap will instantiate KeyVal from a map[string]string19func KeyValFromMap(m map[string]string) *KeyVal {20kv := NewKeyVal()21keys := make([]string, 0, len(m))22for k := range m {23keys = append(keys, k)24}25sort.Strings(keys)26for _, k := range keys {27KeyValAdd(kv, k, m[k])28}29return kv30}3132// MergeKeyVal will merge source in target33func MergeKeyVal(target *KeyVal, source *KeyVal) {34for el := source.Oldest(); el != nil; el = el.Next() {35target.Set(el.Key, el.Value)36}37}3839// MergeKeyValWithPrefix will merge source in target, adding a prefix to each key being merged in40func MergeKeyValWithPrefix(target *KeyVal, source *KeyVal, prefix string) {41for el := source.Oldest(); el != nil; el = el.Next() {42target.Set(fmt.Sprintf("%s%s", prefix, el.Key), el.Value)43}44}4546// KeyValAdd adds a key + value string pair to kv47func KeyValAdd(kv *KeyVal, key string, value string) {48if len(value) > 0 {49kv.Set(key, value)50}51}5253// KeyValToInterfaceSlice converts KeyVal to []interface{}, typically used for logging54func KeyValToInterfaceSlice(kv *KeyVal) []interface{} {55slice := make([]interface{}, kv.Len()*2)56idx := 057for el := kv.Oldest(); el != nil; el = el.Next() {58slice[idx] = el.Key59idx++60slice[idx] = el.Value61idx++62}63return slice64}6566// KeyValToInterfaceMap converts KeyVal to map[string]interface67func KeyValToInterfaceMap(kv *KeyVal) map[string]interface{} {68retv := make(map[string]interface{})69for el := kv.Oldest(); el != nil; el = el.Next() {70retv[fmt.Sprint(el.Key)] = el.Value71}72return retv73}7475// URLMatchesOrigins returns true if URL matches at least one of origin prefix. Wildcard '*' and '?' supported76func urlMatchesOrigins(URL string, origins []string) bool {77for _, origin := range origins {78if origin == "*" || wildcard.Match(origin+"*", URL) {79return true80}81}82return false83}848586