Like Prometheus, but for logs.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
loki/pkg/util/string.go

67 lines
1.4 KiB

package util
import (
"bytes"
"fmt"
"sort"
"unicode"
)
func StringRef(value string) *string {
return &value
}
// SnakeCase converts given string `s` into `snake_case`.
func SnakeCase(s string) string {
var buf bytes.Buffer
for i, r := range s {
if unicode.IsUpper(r) && i > 0 && s[i-1] != '_' {
fmt.Fprintf(&buf, "_")
}
r = unicode.ToLower(r)
fmt.Fprintf(&buf, "%c", r)
}
return buf.String()
}
// StringsContain returns true if the search value is within the list of input values.
func StringsContain(values []string, search string) bool {
for _, v := range values {
if search == v {
return true
}
}
return false
}
// UniqueStrings keeps a slice of unique strings.
type UniqueStrings struct {
values map[string]struct{}
result []string
}
// NewUniqueStrings returns a UniqueStrings instance with a pre-allocated result buffer.
func NewUniqueStrings(sizeHint int) UniqueStrings {
return UniqueStrings{result: make([]string, 0, sizeHint)}
}
// Add adds a new string, dropping duplicates.
func (us *UniqueStrings) Add(strings ...string) {
for _, s := range strings {
if _, ok := us.values[s]; ok {
continue
}
if us.values == nil {
us.values = map[string]struct{}{}
}
us.values[s] = struct{}{}
us.result = append(us.result, s)
}
}
// Strings returns the sorted sliced of unique strings.
func (us UniqueStrings) Strings() []string {
sort.Strings(us.result)
return us.result
}