2024-05-12 14:33:29 +00:00
|
|
|
package logstorage
|
|
|
|
|
|
|
|
import (
|
|
|
|
"sort"
|
|
|
|
"strings"
|
|
|
|
)
|
|
|
|
|
|
|
|
type fieldsSet map[string]struct{}
|
|
|
|
|
|
|
|
func newFieldsSet() fieldsSet {
|
|
|
|
return fieldsSet(map[string]struct{}{})
|
|
|
|
}
|
|
|
|
|
|
|
|
func (fs fieldsSet) reset() {
|
|
|
|
clear(fs)
|
|
|
|
}
|
|
|
|
|
|
|
|
func (fs fieldsSet) String() string {
|
|
|
|
a := fs.getAll()
|
|
|
|
return "[" + strings.Join(a, ",") + "]"
|
|
|
|
}
|
|
|
|
|
|
|
|
func (fs fieldsSet) clone() fieldsSet {
|
|
|
|
fsNew := newFieldsSet()
|
|
|
|
for _, f := range fs.getAll() {
|
|
|
|
fsNew.add(f)
|
|
|
|
}
|
|
|
|
return fsNew
|
|
|
|
}
|
|
|
|
|
2024-05-30 14:19:23 +00:00
|
|
|
func (fs fieldsSet) isEmpty() bool {
|
|
|
|
return len(fs) == 0
|
|
|
|
}
|
|
|
|
|
2024-05-12 14:33:29 +00:00
|
|
|
func (fs fieldsSet) getAll() []string {
|
|
|
|
a := make([]string, 0, len(fs))
|
|
|
|
for f := range fs {
|
|
|
|
a = append(a, f)
|
|
|
|
}
|
|
|
|
sort.Strings(a)
|
|
|
|
return a
|
|
|
|
}
|
|
|
|
|
2024-05-20 02:08:30 +00:00
|
|
|
func (fs fieldsSet) addFields(fields []string) {
|
|
|
|
for _, f := range fields {
|
|
|
|
fs.add(f)
|
2024-05-12 14:33:29 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2024-05-20 02:08:30 +00:00
|
|
|
func (fs fieldsSet) removeFields(fields []string) {
|
2024-05-12 14:33:29 +00:00
|
|
|
for _, f := range fields {
|
|
|
|
fs.remove(f)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2024-05-20 02:08:30 +00:00
|
|
|
func (fs fieldsSet) contains(field string) bool {
|
|
|
|
if field == "" {
|
|
|
|
field = "_msg"
|
|
|
|
}
|
|
|
|
_, ok := fs[field]
|
|
|
|
if !ok {
|
|
|
|
_, ok = fs["*"]
|
|
|
|
}
|
|
|
|
return ok
|
|
|
|
}
|
|
|
|
|
2024-05-12 14:33:29 +00:00
|
|
|
func (fs fieldsSet) remove(field string) {
|
|
|
|
if field == "*" {
|
|
|
|
fs.reset()
|
|
|
|
return
|
|
|
|
}
|
|
|
|
if !fs.contains("*") {
|
2024-05-20 02:08:30 +00:00
|
|
|
if field == "" {
|
|
|
|
field = "_msg"
|
|
|
|
}
|
2024-05-12 14:33:29 +00:00
|
|
|
delete(fs, field)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func (fs fieldsSet) add(field string) {
|
|
|
|
if fs.contains("*") {
|
|
|
|
return
|
|
|
|
}
|
|
|
|
if field == "*" {
|
|
|
|
fs.reset()
|
|
|
|
fs["*"] = struct{}{}
|
|
|
|
return
|
|
|
|
}
|
2024-05-20 02:08:30 +00:00
|
|
|
if field == "" {
|
|
|
|
field = "_msg"
|
|
|
|
}
|
2024-05-12 14:33:29 +00:00
|
|
|
fs[field] = struct{}{}
|
|
|
|
}
|