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:
@@ -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
|
||||
|
||||
@@ -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.")
|
||||
|
||||
Reference in New Issue
Block a user