From 299ef9b188675ad3ab986ac7d5040fdd1934ee5a Mon Sep 17 00:00:00 2001 From: poornas Date: Tue, 18 Jun 2019 13:55:13 -0700 Subject: [PATCH] Trace: Replace function name with API prefix (#7794) This change is required for `Admin Trace` --- cmd/http-tracer.go | 22 ++++++++++++++++++---- pkg/trace/trace.go | 1 + 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/cmd/http-tracer.go b/cmd/http-tracer.go index 779a9440b..4a91a4088 100644 --- a/cmd/http-tracer.go +++ b/cmd/http-tracer.go @@ -118,12 +118,26 @@ func (r *recordResponseWriter) Body() []byte { return r.body.Bytes() } +// getOpName sanitizes the operation name for mc +func getOpName(name string) (op string) { + op = strings.TrimPrefix(name, "github.com/minio/minio/cmd.") + op = strings.TrimSuffix(op, "Handler-fm") + op = strings.Replace(op, "objectAPIHandlers", "s3", 1) + op = strings.Replace(op, "webAPIHandlers", "s3", 1) + op = strings.Replace(op, "adminAPIHandlers", "admin", 1) + op = strings.Replace(op, "(*storageRESTServer)", "internal", 1) + op = strings.Replace(op, "(*peerRESTServer)", "internal", 1) + op = strings.Replace(op, "(*lockRESTServer)", "internal", 1) + op = strings.Replace(op, "stsAPIHandlers", "sts", 1) + op = strings.Replace(op, "LivenessCheckHandler", "healthcheck", 1) + op = strings.Replace(op, "ReadinessCheckHandler", "healthcheck", 1) + return op +} + // Trace gets trace of http request func Trace(f http.HandlerFunc, logBody bool, w http.ResponseWriter, r *http.Request) trace.Info { - name := runtime.FuncForPC(reflect.ValueOf(f).Pointer()).Name() - name = strings.TrimPrefix(name, "github.com/minio/minio/cmd.") - name = strings.TrimSuffix(name, "Handler-fm") + name := getOpName(runtime.FuncForPC(reflect.ValueOf(f).Pointer()).Name()) bodyPlaceHolder := []byte("") var reqBodyRecorder *recordRequest @@ -136,7 +150,7 @@ func Trace(f http.HandlerFunc, logBody bool, w http.ResponseWriter, r *http.Requ if err == nil { t.NodeName = host.Name } - rq := trace.RequestInfo{Time: time.Now().UTC(), Method: r.Method, Path: r.URL.Path, RawQuery: r.URL.RawQuery} + rq := trace.RequestInfo{Time: time.Now().UTC(), Method: r.Method, Path: r.URL.Path, RawQuery: r.URL.RawQuery, Client: r.RemoteAddr} rq.Headers = cloneHeader(r.Header) rq.Headers.Set("Content-Length", strconv.Itoa(int(r.ContentLength))) rq.Headers.Set("Host", r.Host) diff --git a/pkg/trace/trace.go b/pkg/trace/trace.go index 6ebd6525c..d2b4123bc 100644 --- a/pkg/trace/trace.go +++ b/pkg/trace/trace.go @@ -38,6 +38,7 @@ type RequestInfo struct { RawQuery string `json:"rawquery,omitempty"` Headers http.Header `json:"headers,omitempty"` Body []byte `json:"body,omitempty"` + Client string `json:"client"` } // ResponseInfo represents trace of http request