Skip to content

Commit 412d344

Browse files
committed
feat(logging): add RequestID support in home request logging
- Included `RequestID` field in `homeRequestLogPayload` for better log categorization. - Updated `forwardRequestLogToHome` and related components to handle `RequestID`. - Added new test cases to validate `RequestID` propagation in streaming requests.
1 parent efa200e commit 412d344

2 files changed

Lines changed: 65 additions & 3 deletions

File tree

internal/logging/request_logger.go

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,7 @@ type FileRequestLogger struct {
166166

167167
type homeRequestLogPayload struct {
168168
Headers map[string][]string `json:"headers,omitempty"`
169+
RequestID string `json:"request_id,omitempty"`
169170
RequestLog string `json:"request_log,omitempty"`
170171
}
171172

@@ -192,7 +193,7 @@ func cloneHeaders(headers map[string][]string) map[string][]string {
192193
return out
193194
}
194195

195-
func (l *FileRequestLogger) forwardRequestLogToHome(ctx context.Context, headers map[string][]string, logText string) error {
196+
func (l *FileRequestLogger) forwardRequestLogToHome(ctx context.Context, headers map[string][]string, requestID string, logText string) error {
196197
if l == nil || !l.homeEnabled {
197198
return nil
198199
}
@@ -202,6 +203,7 @@ func (l *FileRequestLogger) forwardRequestLogToHome(ctx context.Context, headers
202203
}
203204
payload := homeRequestLogPayload{
204205
Headers: cloneHeaders(headers),
206+
RequestID: strings.TrimSpace(requestID),
205207
RequestLog: logText,
206208
}
207209
raw, errMarshal := json.Marshal(&payload)
@@ -334,7 +336,7 @@ func (l *FileRequestLogger) logRequest(url, method string, requestHeaders map[st
334336
if writeErr != nil {
335337
return fmt.Errorf("failed to build request log content: %w", writeErr)
336338
}
337-
return l.forwardRequestLogToHome(context.Background(), requestHeaders, buf.String())
339+
return l.forwardRequestLogToHome(context.Background(), requestHeaders, requestID, buf.String())
338340
}
339341

340342
// Ensure logs directory exists
@@ -1631,11 +1633,12 @@ type homeStreamingLogWriter struct {
16311633
apiRequest []byte
16321634
apiResponse []byte
16331635
apiWebsocketTime []byte
1636+
requestID string
16341637
apiResponseTS time.Time
16351638
firstChunkTS time.Time
16361639
}
16371640

1638-
func newHomeStreamingLogWriter(url, method string, headers map[string][]string, body []byte, _ string) *homeStreamingLogWriter {
1641+
func newHomeStreamingLogWriter(url, method string, headers map[string][]string, body []byte, requestID string) *homeStreamingLogWriter {
16391642
requestHeaders := make(map[string][]string, len(headers))
16401643
for key, values := range headers {
16411644
headerValues := make([]string, len(values))
@@ -1649,6 +1652,7 @@ func newHomeStreamingLogWriter(url, method string, headers map[string][]string,
16491652
timestamp: time.Now(),
16501653
requestHeaders: requestHeaders,
16511654
requestBody: append([]byte(nil), body...),
1655+
requestID: strings.TrimSpace(requestID),
16521656
chunkChan: make(chan []byte, 100),
16531657
doneChan: make(chan struct{}),
16541658
}
@@ -1766,6 +1770,7 @@ func (w *homeStreamingLogWriter) Close() error {
17661770

17671771
payload := homeRequestLogPayload{
17681772
Headers: cloneHeaders(w.requestHeaders),
1773+
RequestID: w.requestID,
17691774
RequestLog: buf.String(),
17701775
}
17711776
raw, errMarshal := json.Marshal(&payload)

internal/logging/request_logger_home_test.go

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ func TestFileRequestLogger_HomeEnabled_ForwardsWhenRequestLogEnabled(t *testing.
7777

7878
var got struct {
7979
Headers map[string][]string `json:"headers"`
80+
RequestID string `json:"request_id"`
8081
RequestLog string `json:"request_log"`
8182
}
8283
if errUnmarshal := json.Unmarshal(stub.pushed[0], &got); errUnmarshal != nil {
@@ -88,6 +89,62 @@ func TestFileRequestLogger_HomeEnabled_ForwardsWhenRequestLogEnabled(t *testing.
8889
if got.Headers == nil || got.Headers["Authorization"][0] != "Bearer secret" {
8990
t.Fatalf("headers.authorization = %+v, want Bearer secret", got.Headers["Authorization"])
9091
}
92+
if got.RequestID != "req-1" {
93+
t.Fatalf("request_id = %q, want req-1", got.RequestID)
94+
}
95+
if got.RequestLog == "" {
96+
t.Fatalf("request_log empty, want non-empty")
97+
}
98+
}
99+
100+
func TestFileRequestLogger_HomeEnabled_ForwardsStreamingRequestID(t *testing.T) {
101+
original := currentHomeRequestLogClient
102+
defer func() {
103+
currentHomeRequestLogClient = original
104+
}()
105+
106+
stub := &stubHomeRequestLogClient{heartbeatOK: true}
107+
currentHomeRequestLogClient = func() homeRequestLogClient {
108+
return stub
109+
}
110+
111+
logsDir := t.TempDir()
112+
logger := NewFileRequestLogger(true, logsDir, "", 0)
113+
logger.SetHomeEnabled(true)
114+
115+
writer, errLog := logger.LogStreamingRequest(
116+
"/v1/responses",
117+
http.MethodPost,
118+
map[string][]string{"Content-Type": {"application/json"}},
119+
[]byte(`{"input":"hello"}`),
120+
"stream-req-1",
121+
)
122+
if errLog != nil {
123+
t.Fatalf("LogStreamingRequest error: %v", errLog)
124+
}
125+
126+
if errStatus := writer.WriteStatus(http.StatusOK, map[string][]string{"Content-Type": {"text/event-stream"}}); errStatus != nil {
127+
t.Fatalf("WriteStatus error: %v", errStatus)
128+
}
129+
writer.WriteChunkAsync([]byte("data: ok\n\n"))
130+
if errClose := writer.Close(); errClose != nil {
131+
t.Fatalf("Close error: %v", errClose)
132+
}
133+
134+
if len(stub.pushed) != 1 {
135+
t.Fatalf("home pushed records = %d, want 1", len(stub.pushed))
136+
}
137+
138+
var got struct {
139+
RequestID string `json:"request_id"`
140+
RequestLog string `json:"request_log"`
141+
}
142+
if errUnmarshal := json.Unmarshal(stub.pushed[0], &got); errUnmarshal != nil {
143+
t.Fatalf("unmarshal payload: %v payload=%s", errUnmarshal, string(stub.pushed[0]))
144+
}
145+
if got.RequestID != "stream-req-1" {
146+
t.Fatalf("request_id = %q, want stream-req-1", got.RequestID)
147+
}
91148
if got.RequestLog == "" {
92149
t.Fatalf("request_log empty, want non-empty")
93150
}

0 commit comments

Comments
 (0)