v0.37.0 lwconf live and fixes
Package / arch (push) Canceled after 0s
Package / user (push) Canceled after 0s
Package / deb (push) Canceled after 0s
Package / freebsd (push) Canceled after 0s
Package / image (push) Canceled after 0s
Test / test (push) Canceled after 0s
Test / e2e (push) Canceled after 0s

This commit is contained in:
lixen committed 2026-10-14 23:26:57 -04:00
1 parent a63b512733
commit 24c3eb1d6e
13 files changed
+97 -48

No files matched your search

+2 -1
View File
@@ -64,8 +64,9 @@ func TestWrittenFormsReadBack(t *testing.T) {
exclude, err := c.Add(0, "filters", "exclude")
must(err)
must(c.Set(0, exclude, "patterns", `password=\S{8,64}`, `"quoted"`))
_, err = c.Add(0, "filters", "include")
include, err := c.Add(0, "filters", "include")
must(err)
must(c.Set(0, include, "patterns", "ERROR"))
must(c.MoveFilter(0, 1, 0))
must(c.Set(0, Node{Role: "rate_limit"}, "entries_per_second", "100"))
must(c.Set(0, Node{Role: "heartbeat"}, "interval_ms", "5000"))
+1 -1
View File
@@ -138,7 +138,7 @@ const (
type FilterConfig struct {
Type FilterType `toml:"type" default:"include" lw:"enum=include|exclude" help:"pass only matching entries, or drop them"`
Logic FilterLogic `toml:"logic" default:"or" lw:"enum=or|and" help:"match any pattern, or all"`
Patterns []string `toml:"patterns,omitempty" lw:"hint=regex" help:"RE2 patterns"`
Patterns []string `toml:"patterns,omitempty" lw:"required,hint=regex" help:"RE2 patterns"`
}
// --- Sources ---
+4 -4
View File
@@ -370,15 +370,15 @@ func setDefault(f reflect.Value, o option) {
}
// checkTags applies the tag rules to a table's own keys, naming each by
// prefix and key. A zero number is the default or its zero meaning, and
// meets the range unless required; an empty enum is one only by its zero
// or default.
// prefix and key. A required list needs an entry. A zero number is the
// default or its zero meaning, and meets the range unless required; an empty
// enum is one only by its zero or default.
func checkTags(v reflect.Value, prefix string) error {
for _, o := range options(v.Type()) {
f := v.Field(o.index)
var err error
switch {
case o.Required && (f.IsZero() || f.Kind() == reflect.String && strings.TrimSpace(f.String()) == ""):
case o.Required && (f.IsZero() || f.Kind() == reflect.String && strings.TrimSpace(f.String()) == "" || f.Kind() == reflect.Slice && f.Len() == 0):
err = errors.New("must be set")
case f.Kind() == reflect.String && len(o.Enum) > 0 && (f.String() != "" || o.Zero == "" && o.Default == "") && !slices.Contains(o.Enum, f.String()):
err = fmt.Errorf("must be one of %s, got %q", strings.Join(o.Enum, ", "), f.String())
+1 -1
View File
@@ -26,7 +26,7 @@ func TestEveryRowDecodesFromItsRequiredKeys(t *testing.T) {
t.Errorf("%s %s from %v: %v", p.Type, p.Role, m, err)
}
}
for _, stage := range []any{&HeartbeatConfig{}, &RateLimitConfig{}, &FormatConfig{}, &FilterConfig{}} {
for _, stage := range []any{&HeartbeatConfig{}, &RateLimitConfig{}, &FormatConfig{}, &FilterConfig{Patterns: []string{"1"}}} {
if err := Settle(stage); err != nil {
t.Errorf("%T: %v", stage, err)
}
-8
View File
@@ -58,14 +58,6 @@ func NewFilter(cfg config.FilterConfig, logger *log.Logger) (*Filter, error) {
func (f *Filter) Apply(entry core.LogEntry) bool {
f.totalProcessed.Add(1)
// No patterns means pass everything
if len(f.patterns) == 0 {
f.logger.Debug("msg", "No patterns configured, passing entry",
"component", "filter",
"type", f.config.Type)
return true
}
// Check against all fields that might contain the log content
text := entry.Message
if entry.Level != "" {