Added Verb and Resource to request trace attributes

Kubernetes-commit: fad094cb70c26f962c49d615b1f48326aa25181d
This commit is contained in:
Paweł Banaszewski 2022-11-07 14:33:40 +00:00 committed by Kubernetes Publisher
parent fe7d5b4b34
commit 490f0b7444
3 changed files with 44 additions and 4 deletions

View File

@ -21,6 +21,7 @@ import (
utilnet "k8s.io/apimachinery/pkg/util/net"
"k8s.io/apiserver/pkg/audit"
apirequest "k8s.io/apiserver/pkg/endpoints/request"
)
const (
@ -88,3 +89,39 @@ func (lazy *lazyAuditID) String() string {
return "unknown"
}
// lazyVerb implements String() string and it will
// lazily get Verb from request info based on request context
type lazyVerb struct {
req *http.Request
}
func (lazy *lazyVerb) String() string {
if lazy.req != nil {
ctx := lazy.req.Context()
requestInfo, ok := apirequest.RequestInfoFrom(ctx)
if ok {
return requestInfo.Verb
}
}
return "unknown"
}
// lazyVerb implements String() string and it will
// lazily get Resource from request info based on request context
type lazyResource struct {
req *http.Request
}
func (lazy *lazyResource) String() string {
if lazy.req != nil {
ctx := lazy.req.Context()
requestInfo, ok := apirequest.RequestInfoFrom(ctx)
if ok {
return requestInfo.Resource
}
}
return "unknown"
}

View File

@ -18,9 +18,10 @@ package handlers
import (
"fmt"
"github.com/stretchr/testify/assert"
"net/http"
"testing"
"github.com/stretchr/testify/assert"
)
func TestLazyTruncatedUserAgent(t *testing.T) {

View File

@ -24,11 +24,13 @@ import (
func traceFields(req *http.Request) []attribute.KeyValue {
return []attribute.KeyValue{
attribute.String("url", req.URL.Path),
attribute.Stringer("user-agent", &lazyTruncatedUserAgent{req: req}),
attribute.Stringer("accept", &lazyAccept{req: req}),
attribute.Stringer("audit-id", &lazyAuditID{req: req}),
attribute.Stringer("client", &lazyClientIP{req: req}),
attribute.Stringer("accept", &lazyAccept{req: req}),
attribute.String("protocol", req.Proto),
attribute.Stringer("resource", &lazyResource{req: req}),
attribute.String("url", req.URL.Path),
attribute.Stringer("user-agent", &lazyTruncatedUserAgent{req: req}),
attribute.Stringer("verb", &lazyVerb{req: req}),
}
}