Skip to content

Commit

Permalink
Add user-agent, format activity log entry slightly. (#7400)
Browse files Browse the repository at this point in the history
Signed-off-by: Peter Štibraný <pstibrany@gmail.com>
  • Loading branch information
pstibrany committed Feb 16, 2024
1 parent a52ab84 commit 22a8cfe
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 11 deletions.
6 changes: 3 additions & 3 deletions pkg/frontend/transport/handler.go
Original file line number Diff line number Diff line change
Expand Up @@ -187,7 +187,7 @@ func (f *Handler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
return
}

activityIndex := f.at.Insert(func() string { return httpRequestActivity(r, params) })
activityIndex := f.at.Insert(func() string { return httpRequestActivity(r, r.Header.Get("User-Agent"), params) })
defer f.at.Delete(activityIndex)

startTime := time.Now()
Expand Down Expand Up @@ -427,7 +427,7 @@ func statsValue(name string, d time.Duration) string {
return name + ";dur=" + durationInMs
}

func httpRequestActivity(request *http.Request, requestParams url.Values) string {
func httpRequestActivity(request *http.Request, userAgent string, requestParams url.Values) string {
tenantID := "(unknown)"
if tenantIDs, err := tenant.TenantIDs(request.Context()); err == nil {
tenantID = tenant.JoinTenantIDs(tenantIDs)
Expand All @@ -439,5 +439,5 @@ func httpRequestActivity(request *http.Request, requestParams url.Values) string
}

// This doesn't have to be pretty, just useful for debugging, so prioritize efficiency.
return strings.Join([]string{tenantID, request.Method, request.URL.Path, params}, " ")
return fmt.Sprintf("user:%s UA:%s req:%s %s %s", tenantID, userAgent, request.Method, request.URL.Path, params)
}
23 changes: 15 additions & 8 deletions pkg/frontend/transport/handler_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -88,61 +88,68 @@ func TestHandler_ServeHTTP(t *testing.T) {
"time": []string{"42"},
},
expectedMetrics: 5,
expectedActivity: "12345 POST /api/v1/query query=some_metric&time=42",
expectedActivity: "user:12345 UA:test-user-agent req:POST /api/v1/query query=some_metric&time=42",
expectedReadConsistency: "",
},
{
name: "handler with stats enabled, GET request with params",
cfg: HandlerConfig{QueryStatsEnabled: true},
request: func() *http.Request {
return httptest.NewRequest("GET", "/api/v1/query?query=some_metric&time=42", nil)
r := httptest.NewRequest("GET", "/api/v1/query?query=some_metric&time=42", nil)
r.Header.Add("User-Agent", "test-user-agent")
return r
},
expectedParams: url.Values{
"query": []string{"some_metric"},
"time": []string{"42"},
},
expectedMetrics: 5,
expectedActivity: "12345 GET /api/v1/query query=some_metric&time=42",
expectedActivity: "user:12345 UA:test-user-agent req:GET /api/v1/query query=some_metric&time=42",
expectedReadConsistency: "",
},
{
name: "handler with stats enabled, GET request with params and read consistency specified",
cfg: HandlerConfig{QueryStatsEnabled: true},
request: func() *http.Request {
r := httptest.NewRequest("GET", "/api/v1/query?query=some_metric&time=42", nil)
r.Header.Add("User-Agent", "test-user-agent")
return r.WithContext(api.ContextWithReadConsistency(context.Background(), api.ReadConsistencyStrong))
},
expectedParams: url.Values{
"query": []string{"some_metric"},
"time": []string{"42"},
},
expectedMetrics: 5,
expectedActivity: "12345 GET /api/v1/query query=some_metric&time=42",
expectedActivity: "user:12345 UA:test-user-agent req:GET /api/v1/query query=some_metric&time=42",
expectedReadConsistency: api.ReadConsistencyStrong,
},
{
name: "handler with stats enabled, GET request without params",
cfg: HandlerConfig{QueryStatsEnabled: true},
request: func() *http.Request {
return httptest.NewRequest("GET", "/api/v1/query", nil)
r := httptest.NewRequest("GET", "/api/v1/query", nil)
r.Header.Add("User-Agent", "test-user-agent")
return r
},
expectedParams: url.Values{},
expectedMetrics: 5,
expectedActivity: "12345 GET /api/v1/query (no params)",
expectedActivity: "user:12345 UA:test-user-agent req:GET /api/v1/query (no params)",
expectedReadConsistency: "",
},
{
name: "handler with stats disabled, GET request with params",
cfg: HandlerConfig{QueryStatsEnabled: false},
request: func() *http.Request {
return httptest.NewRequest("GET", "/api/v1/query?query=some_metric&time=42", nil)
r := httptest.NewRequest("GET", "/api/v1/query?query=some_metric&time=42", nil)
r.Header.Add("User-Agent", "test-user-agent")
return r
},
expectedParams: url.Values{
"query": []string{"some_metric"},
"time": []string{"42"},
},
expectedMetrics: 0,
expectedActivity: "12345 GET /api/v1/query query=some_metric&time=42",
expectedActivity: "user:12345 UA:test-user-agent req:GET /api/v1/query query=some_metric&time=42",
expectedReadConsistency: "",
},
} {
Expand Down

0 comments on commit 22a8cfe

Please sign in to comment.