File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -12,6 +12,8 @@ func main() {
1212 mux := http .NewServeMux ()
1313 mux .HandleFunc ("/" , examples .Handler )
1414
15+ //handler := slog.NewJSONHandler(os.Stdout, nil)
16+ //logger := slog.New(handler)
1517 slogExporter := exporters.SlogExporter {}
1618 mw := flowtracker .NewMiddleware (flowtracker .WithExporter (& slogExporter ))
1719
Original file line number Diff line number Diff line change @@ -33,7 +33,7 @@ func TestMermaidExporter_OK(t *testing.T) {
3333
3434 server .ServeHTTP (rr , req )
3535
36- time .Sleep (1 * time .Second )
36+ time .Sleep (500 * time .Millisecond )
3737
3838 // restore stdout
3939 w .Close ()
@@ -102,7 +102,7 @@ func TestMermaidExporter_OK_IncludeTags(t *testing.T) {
102102
103103 server .ServeHTTP (rr , req )
104104
105- time .Sleep (1 * time .Second )
105+ time .Sleep (500 * time .Millisecond )
106106
107107 // restore stdout
108108 w .Close ()
Original file line number Diff line number Diff line change @@ -33,7 +33,7 @@ func TestSankeyExporter_OK(t *testing.T) {
3333
3434 server .ServeHTTP (rr , req )
3535
36- time .Sleep (1 * time .Second )
36+ time .Sleep (500 * time .Millisecond )
3737
3838 // restore stdout
3939 w .Close ()
@@ -93,7 +93,7 @@ func TestSankeyExporter_OK_IncludeTags(t *testing.T) {
9393
9494 server .ServeHTTP (rr , req )
9595
96- time .Sleep (1 * time .Second )
96+ time .Sleep (500 * time .Millisecond )
9797
9898 // restore stdout
9999 w .Close ()
Original file line number Diff line number Diff line change @@ -8,9 +8,15 @@ import (
88)
99
1010// SlogExporter -- log Exporter (JSON to log) --
11- type SlogExporter struct {}
11+ type SlogExporter struct {
12+ logger * slog.Logger
13+ }
1214
13- func (c * SlogExporter ) Export (tr * flowtracker.Trace ) {
15+ func (s * SlogExporter ) Export (tr * flowtracker.Trace ) {
1416 b , _ := json .Marshal (tr )
15- slog .Info ("Flow log" , slog .Any ("trace" , b ))
17+ if s .logger != nil {
18+ s .logger .Info ("Flow log" , slog .Any ("trace" , b ))
19+ } else {
20+ slog .Info ("Flow log" , slog .Any ("trace" , b ))
21+ }
1622}
Original file line number Diff line number Diff line change 1+ package exporters
2+
3+ import (
4+ "bytes"
5+ "encoding/json"
6+ "log/slog"
7+ "net/http"
8+ "net/http/httptest"
9+ "testing"
10+ "time"
11+
12+ "github.com/spdeepak/flowtracker"
13+ )
14+
15+ var buf bytes.Buffer
16+
17+ func NewSlogServer () http.Handler {
18+ mux := http .NewServeMux ()
19+ mux .HandleFunc ("/" , Handler )
20+ handler := slog .NewJSONHandler (& buf , nil )
21+ logger := slog .New (handler )
22+ mw := flowtracker .NewMiddleware (flowtracker .WithExporter (& SlogExporter {logger : logger }))
23+ return mw (mux )
24+ }
25+
26+ func TestSlogExporter_OK (t * testing.T ) {
27+ server := NewSlogServer ()
28+
29+ req := httptest .NewRequest (http .MethodGet , "/" , nil )
30+ rr := httptest .NewRecorder ()
31+
32+ server .ServeHTTP (rr , req )
33+
34+ time .Sleep (500 * time .Millisecond )
35+
36+ output := buf .String ()
37+ var logEntry map [string ]interface {}
38+ if err := json .Unmarshal ([]byte (output ), & logEntry ); err != nil {
39+ t .Fatalf ("Failed to unmarshal log output: %v" , err )
40+ }
41+ now := time .Now ()
42+ if duration , err := time .Parse (time .RFC3339Nano , logEntry ["time" ].(string )); err != nil {
43+ t .Fatalf ("Failed to unmarshal time in logEntry: %v" , err )
44+ } else if now .Sub (duration ).Milliseconds () < 0 {
45+ t .Fatalf ("Invalid time in logEntry" )
46+ }
47+ }
Original file line number Diff line number Diff line change @@ -33,7 +33,7 @@ func TestDefaultExporter_OK(t *testing.T) {
3333
3434 server .ServeHTTP (rr , req )
3535
36- time .Sleep (1 * time .Second )
36+ time .Sleep (500 * time .Millisecond )
3737
3838 // restore stdout
3939 w .Close ()
You can’t perform that action at this time.
0 commit comments