openmeter / pkg /server /attributes.go
Leon4gr45's picture
Upload folder using huggingface_hub (part 10)
6380833 verified
Raw
History Blame Contribute Delete
1.21 kB
package server
import (
"net"
"net/http"
"github.com/go-chi/chi/v5/middleware"
semconv "go.opentelemetry.io/otel/semconv/v1.27.0"
)
// GetRequestAttributes returns a map of attributes for a request.
// Requires `middleware.RequestID` middleware to be used.
func GetRequestAttributes(r *http.Request) map[string]string {
ctx := r.Context()
attrs := map[string]string{
// HTTP attributes
string(semconv.HTTPRequestMethodKey): r.Method,
string(semconv.URLFullKey): r.URL.String(),
// Net attributes
string(semconv.NetworkProtocolNameKey): r.Proto,
// User attributes
string(semconv.UserAgentOriginalKey): r.UserAgent(),
}
peerAddr, peerPort, err := net.SplitHostPort(r.RemoteAddr)
if err == nil {
attrs[string(semconv.NetworkPeerAddressKey)] = peerAddr
attrs[string(semconv.NetworkPeerPortKey)] = peerPort
}
if clientAddr := middleware.GetClientIPAddr(ctx); clientAddr.IsValid() {
attrs[string(semconv.ClientAddressKey)] = clientAddr.String()
}
if reqID := middleware.GetReqID(ctx); reqID != "" {
// There is no semantic convention for request ID, so we use our own
// Alternatively, we could use rpc.message.id
attrs["req_id"] = reqID
}
return attrs
}