changed req time elapsed to count on status code sent

This commit is contained in:
yusing 2024-11-07 11:43:49 +08:00
parent 6712e9b109
commit 6be3aef367

View file

@ -98,15 +98,18 @@ type ReverseProxy struct {
type httpMetricLogger struct {
http.ResponseWriter
labels metrics.HTTPRouteMetricLabels
timestamp time.Time
labels *metrics.HTTPRouteMetricLabels
}
// WriteHeader implements http.ResponseWriter.
func (l *httpMetricLogger) WriteHeader(status int) {
l.ResponseWriter.WriteHeader(status)
duration := time.Since(l.timestamp)
go func() {
m := metrics.GetRouteMetrics()
m.HTTPReqTotal.Inc()
m.HTTPReqElapsed.With(l.labels).Set(float64(duration.Milliseconds()))
// ignore 1xx
switch {
@ -276,11 +279,21 @@ func (p *ReverseProxy) ServeHTTP(rw http.ResponseWriter, req *http.Request) {
func (p *ReverseProxy) handler(rw http.ResponseWriter, req *http.Request) {
if common.PrometheusEnabled {
t := time.Now()
visitor, _, err := net.SplitHostPort(req.RemoteAddr)
var visitor string
if realIP := req.Header.Get("X-Real-IP"); realIP != "" {
visitor = realIP
}
if fwdIP := req.Header.Get("X-Forwarded-For"); visitor == "" && fwdIP != "" {
visitor = fwdIP
}
if visitor == "" {
var err error
visitor, _, err = net.SplitHostPort(req.RemoteAddr)
if err != nil {
visitor = req.RemoteAddr
}
lbls := metrics.HTTPRouteMetricLabels{
}
lbls := &metrics.HTTPRouteMetricLabels{
Service: p.TargetName,
Method: req.Method,
Host: req.Host,
@ -289,12 +302,9 @@ func (p *ReverseProxy) handler(rw http.ResponseWriter, req *http.Request) {
}
rw = &httpMetricLogger{
ResponseWriter: rw,
timestamp: t,
labels: lbls,
}
defer func() {
duration := time.Since(t)
metrics.GetRouteMetrics().HTTPReqElapsed.With(lbls).Set(float64(duration.Milliseconds()))
}()
}
transport := p.Transport