From 44c5450eaf5b6091729656aad0ebf6eb6e0e1539 Mon Sep 17 00:00:00 2001 From: tore-statsig <74584483+tore-statsig@users.noreply.github.com> Date: Wed, 24 Jan 2024 20:43:52 -0800 Subject: [PATCH 1/3] Copy events and log log_event failures --- logger.go | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/logger.go b/logger.go index d92ec89..27d308d 100644 --- a/logger.go +++ b/logger.go @@ -220,10 +220,13 @@ func (l *logger) flushInternal(closing bool) { return } + eventsCopy := make([]interface{}, len(l.events)) + copy(eventsCopy, l.events) + if closing { - l.sendEvents(l.events) + l.sendEvents(eventsCopy) } else { - go l.sendEvents(l.events) + go l.sendEvents(eventsCopy) } l.events = make([]interface{}, 0) @@ -235,7 +238,10 @@ func (l *logger) sendEvents(events []interface{}) { StatsigMetadata: l.transport.metadata, } var res logEventResponse - _, _ = l.transport.retryablePostRequest("/log_event", input, &res, maxRetries) + _, err := l.transport.retryablePostRequest("/log_event", input, &res, maxRetries) + if err != nil { + global.Logger().LogError(err) + } } func (l *logger) logDiagnosticsEvents(d *diagnostics) { From 26177a62fed6ffe1e98b5ea7faa0a821a1183e38 Mon Sep 17 00:00:00 2001 From: tore-statsig <74584483+tore-statsig@users.noreply.github.com> Date: Wed, 24 Jan 2024 21:47:26 -0800 Subject: [PATCH 2/3] add more logging and remove diagnostics --- logger.go | 15 ++++++++++++--- logger_test.go | 14 ++++++++++++++ 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/logger.go b/logger.go index 27d308d..fe0c16b 100644 --- a/logger.go +++ b/logger.go @@ -2,6 +2,7 @@ package statsig import ( "fmt" + "net/http/httputil" "strconv" "sync" "time" @@ -205,7 +206,6 @@ func (l *logger) logLayerExposure( } func (l *logger) flush(closing bool) { - l.logDiagnosticsEvents(l.diagnostics) l.mu.Lock() defer l.mu.Unlock() @@ -237,11 +237,20 @@ func (l *logger) sendEvents(events []interface{}) { Events: events, StatsigMetadata: l.transport.metadata, } - var res logEventResponse - _, err := l.transport.retryablePostRequest("/log_event", input, &res, maxRetries) + var result logEventResponse + global.Logger().Log(fmt.Sprintf("logging %d events\n", len(events)), nil) + res, err := l.transport.retryablePostRequest("/log_event", input, &result, maxRetries) + + if err != nil { + global.Logger().LogError(err) + } + + respDump, err := httputil.DumpResponse(res, true) if err != nil { global.Logger().LogError(err) } + + global.Logger().Log(fmt.Sprintf("log_event response:\n%s", string(respDump)), nil) } func (l *logger) logDiagnosticsEvents(d *diagnostics) { diff --git a/logger_test.go b/logger_test.go index d947ebe..bbcd427 100644 --- a/logger_test.go +++ b/logger_test.go @@ -1,6 +1,7 @@ package statsig import ( + "fmt" "net/http" "net/http/httptest" "reflect" @@ -10,6 +11,17 @@ import ( ) func TestLog(t *testing.T) { + t.Log("starting test") + InitializeGlobalOutputLogger(OutputLoggerOptions{ + LogCallback: func(message string, err error) { + t.Log(message) + t.Log(err) + }, + DisableInitDiagnostics: false, + DisableSyncDiagnostics: true, + }) + t.Log("starting test") + fmt.Println("started") testServer := httptest.NewServer(http.HandlerFunc(func(res http.ResponseWriter, req *http.Request) {})) defer testServer.Close() opt := &Options{ @@ -92,4 +104,6 @@ func TestLog(t *testing.T) { if evt3.Time/1000 < nowSecond-2 || evt3.Time/1000 > nowSecond+2 { t.Errorf("Config exposure event time not set correctly.") } + + logger.flush(true) } From 390fe32f484aa56c59c70afbca83014b281cdb24 Mon Sep 17 00:00:00 2001 From: tore-statsig <74584483+tore-statsig@users.noreply.github.com> Date: Wed, 24 Jan 2024 21:50:37 -0800 Subject: [PATCH 3/3] cleanup test --- logger_test.go | 4 ---- 1 file changed, 4 deletions(-) diff --git a/logger_test.go b/logger_test.go index bbcd427..f71a71b 100644 --- a/logger_test.go +++ b/logger_test.go @@ -1,7 +1,6 @@ package statsig import ( - "fmt" "net/http" "net/http/httptest" "reflect" @@ -11,7 +10,6 @@ import ( ) func TestLog(t *testing.T) { - t.Log("starting test") InitializeGlobalOutputLogger(OutputLoggerOptions{ LogCallback: func(message string, err error) { t.Log(message) @@ -20,8 +18,6 @@ func TestLog(t *testing.T) { DisableInitDiagnostics: false, DisableSyncDiagnostics: true, }) - t.Log("starting test") - fmt.Println("started") testServer := httptest.NewServer(http.HandlerFunc(func(res http.ResponseWriter, req *http.Request) {})) defer testServer.Close() opt := &Options{