From 78a7f6d2c6ce5ba1a16b19f366325dd86387613e Mon Sep 17 00:00:00 2001 From: Pulkit Kathuria Date: Thu, 8 Aug 2024 21:43:32 +0900 Subject: [PATCH 1/2] (fix) judge log level cases, and low allocs on time grinder --- pkg/strings.go | 29 ++++++++++++++++++++--------- 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/pkg/strings.go b/pkg/strings.go index 7e108c8..a69396b 100644 --- a/pkg/strings.go +++ b/pkg/strings.go @@ -4,6 +4,7 @@ import ( "fmt" "strconv" "strings" + "sync" "unicode" "github.com/acarl005/stripansi" @@ -64,12 +65,12 @@ func JudgeLogLevel(line string, keywordPosition int) string { line = strings.ToLower(line) // Convert the line to lowercase for easier comparison // Keywords for different log levels - successKeywords := []string{"success"} - infoKeywords := []string{"info", "inf"} - errorKeywords := []string{"error", "err", "fail"} - warnKeywords := []string{"warn", "warning", "alert", "wrn"} - dangerKeywords := []string{"danger", "fatal", "severe", "critical"} - debugKeywords := []string{"debug"} + successKeywords := []string{"success", "SUCCESS", "succ", "SUCC", "Success"} + infoKeywords := []string{"info", "inf", "INFO", "INF", "Info", "Inf"} + errorKeywords := []string{"error", "err", "fail", "ERROR", "ERR", "FAIL", "Error", "Err", "Fail"} + warnKeywords := []string{"warn", "warning", "alert", "wrn", "WARN", "WARNING", "ALERT", "Wrn", "Wrning", "Alert"} + dangerKeywords := []string{"danger", "fatal", "severe", "critical", "DANGER", "FATAL", "SEVERE", "CRITICAL", "Danger", "Fatal", "Severe", "Critical"} + debugKeywords := []string{"debug", "dbg", "DEBUG", "DBG", "Debug"} // Helper function to check if a keyword is at a specific position isKeywordAtPosition := func(line, keyword string, position int) bool { @@ -206,12 +207,22 @@ func appendDates(lines *[]LineResult) { } } -func searchDate(input string) string { +var ( + tg *timegrinder.TimeGrinder + once sync.Once +) + +func initTimeGrinder() { cfg := timegrinder.Config{} - tg, err := timegrinder.NewTimeGrinder(cfg) + var err error + tg, err = timegrinder.NewTimeGrinder(cfg) if err != nil { - return "" + panic(err) } +} + +func searchDate(input string) string { + once.Do(initTimeGrinder) ts, ok, err := tg.Extract([]byte(input)) if err != nil { return "" From 10ad9fe35b513b4ec681becdb9c09d1fab3c4ced Mon Sep 17 00:00:00 2001 From: Pulkit Kathuria Date: Thu, 8 Aug 2024 21:46:58 +0900 Subject: [PATCH 2/2] (fix) judge log level cases, and low allocs on time grinder --- pkg/strings.go | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/pkg/strings.go b/pkg/strings.go index a69396b..10c1a48 100644 --- a/pkg/strings.go +++ b/pkg/strings.go @@ -2,6 +2,7 @@ package pkg import ( "fmt" + "log/slog" "strconv" "strings" "sync" @@ -212,17 +213,25 @@ var ( once sync.Once ) -func initTimeGrinder() { +func initTimeGrinder() error { cfg := timegrinder.Config{} var err error tg, err = timegrinder.NewTimeGrinder(cfg) if err != nil { - panic(err) + return err } + return nil } func searchDate(input string) string { - once.Do(initTimeGrinder) + var initErr error + once.Do(func() { + initErr = initTimeGrinder() + }) + if initErr != nil { + slog.Error("Error initializing", "timegrinder", initErr) + return "" + } ts, ok, err := tg.Extract([]byte(input)) if err != nil { return ""