1
0
mirror of https://github.com/amir20/dozzle.git synced 2026-01-04 20:14:59 +01:00

fix: fixes filtering of levels to backfill, similar to search (#4228)

This commit is contained in:
Amir Raminfar
2025-11-06 06:31:02 -08:00
committed by GitHub
parent 3abe70b402
commit 653fc8878a
2 changed files with 27 additions and 4 deletions

View File

@@ -303,6 +303,13 @@ func (h *handler) streamLogsForContainers(w http.ResponseWriter, r *http.Request
levels[level] = struct{}{}
}
allLogs := true
for level := range container.SupportedLogLevels {
if _, ok := levels[level]; !ok {
allLogs = false
}
}
if r.URL.Query().Has("filter") {
var err error
regex, err = support_web.ParseRegex(r.URL.Query().Get("filter"))
@@ -310,7 +317,9 @@ func (h *handler) streamLogsForContainers(w http.ResponseWriter, r *http.Request
http.Error(w, err.Error(), http.StatusBadRequest)
return
}
}
if !allLogs || regex != nil {
absoluteTime = time.Now()
go func() {
@@ -342,9 +351,10 @@ func (h *handler) streamLogsForContainers(w http.ResponseWriter, r *http.Request
if _, ok := levels[log.Level]; !ok {
continue
}
if support_web.Search(regex, log) {
events = append(events, log)
if regex != nil && !support_web.Search(regex, log) {
continue
}
events = append(events, log)
}
stillRunning = true

View File

@@ -6,6 +6,7 @@ import (
"encoding/binary"
"errors"
"io"
"net/url"
"regexp"
"time"
@@ -20,6 +21,16 @@ import (
"github.com/stretchr/testify/require"
)
func addAllLogLevels(q url.Values) {
q.Add("levels", "error")
q.Add("levels", "warn")
q.Add("levels", "info")
q.Add("levels", "debug")
q.Add("levels", "trace")
q.Add("levels", "fatal")
q.Add("levels", "unknown")
}
func Test_handler_streamLogs_happy(t *testing.T) {
ctx, cancel := context.WithCancel(t.Context())
@@ -29,7 +40,7 @@ func Test_handler_streamLogs_happy(t *testing.T) {
q := req.URL.Query()
q.Add("stdout", "true")
q.Add("stderr", "true")
q.Add("levels", "info")
addAllLogLevels(q)
req.URL.RawQuery = q.Encode()
require.NoError(t, err, "NewRequest should not return an error.")
@@ -73,7 +84,7 @@ func Test_handler_streamLogs_happy_with_id(t *testing.T) {
q := req.URL.Query()
q.Add("stdout", "true")
q.Add("stderr", "true")
q.Add("levels", "info")
addAllLogLevels(q)
req.URL.RawQuery = q.Encode()
require.NoError(t, err, "NewRequest should not return an error.")
@@ -119,6 +130,7 @@ func Test_handler_streamLogs_happy_container_stopped(t *testing.T) {
q := req.URL.Query()
q.Add("stdout", "true")
q.Add("stderr", "true")
addAllLogLevels(q)
req.URL.RawQuery = q.Encode()
require.NoError(t, err, "NewRequest should not return an error.")
@@ -157,6 +169,7 @@ func Test_handler_streamLogs_error_reading(t *testing.T) {
q := req.URL.Query()
q.Add("stdout", "true")
q.Add("stderr", "true")
addAllLogLevels(q)
req.URL.RawQuery = q.Encode()
require.NoError(t, err, "NewRequest should not return an error.")