diff --git a/README.md b/README.md index dad96bd..dff238e 100644 --- a/README.md +++ b/README.md @@ -91,9 +91,9 @@ go-watch-logs --file-path=my.log --match='HTTP/1.1" 50' --every=60 ## Performance Notes ```sh -BenchmarkReadFileAndMatchErrors-10 10215 122666 ns/op 8684 B/op 53 allocs/op -BenchmarkLoadAndSaveState-10 15241 82295 ns/op 10562 B/op 38 allocs/op -BenchmarkLogRotation-10 9712 143824 ns/op 9707 B/op 74 allocs/op +BenchmarkReadFileAndMatchErrors-10 969 1173870 ns/op 12920 B/op 146 allocs/op +BenchmarkLoadAndSaveState-10 5296 230536 ns/op 9179 B/op 180 allocs/op +BenchmarkLogRotation-10 1036 1175464 ns/op 12930 B/op 146 allocs/op ``` diff --git a/pkg/strings.go b/pkg/strings.go index d94a2e7..b53f856 100644 --- a/pkg/strings.go +++ b/pkg/strings.go @@ -2,6 +2,7 @@ package pkg import ( "crypto/sha256" + "sync" "github.com/gravwell/gravwell/v3/timegrinder" ) @@ -24,17 +25,25 @@ func Truncate(s string, n int) string { return s[:n] + "..." } -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 "" - } - if !ok { + if err != nil || !ok { return "" } return ts.Format("2006-01-02 15:04:05")