mirror of
https://github.com/yusing/godoxy.git
synced 2025-06-09 04:52:35 +02:00
changed req time elapsed to count on status code sent
This commit is contained in:
parent
6712e9b109
commit
6be3aef367
1 changed files with 19 additions and 9 deletions
|
@ -98,15 +98,18 @@ type ReverseProxy struct {
|
||||||
|
|
||||||
type httpMetricLogger struct {
|
type httpMetricLogger struct {
|
||||||
http.ResponseWriter
|
http.ResponseWriter
|
||||||
labels metrics.HTTPRouteMetricLabels
|
timestamp time.Time
|
||||||
|
labels *metrics.HTTPRouteMetricLabels
|
||||||
}
|
}
|
||||||
|
|
||||||
// WriteHeader implements http.ResponseWriter.
|
// WriteHeader implements http.ResponseWriter.
|
||||||
func (l *httpMetricLogger) WriteHeader(status int) {
|
func (l *httpMetricLogger) WriteHeader(status int) {
|
||||||
l.ResponseWriter.WriteHeader(status)
|
l.ResponseWriter.WriteHeader(status)
|
||||||
|
duration := time.Since(l.timestamp)
|
||||||
go func() {
|
go func() {
|
||||||
m := metrics.GetRouteMetrics()
|
m := metrics.GetRouteMetrics()
|
||||||
m.HTTPReqTotal.Inc()
|
m.HTTPReqTotal.Inc()
|
||||||
|
m.HTTPReqElapsed.With(l.labels).Set(float64(duration.Milliseconds()))
|
||||||
|
|
||||||
// ignore 1xx
|
// ignore 1xx
|
||||||
switch {
|
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) {
|
func (p *ReverseProxy) handler(rw http.ResponseWriter, req *http.Request) {
|
||||||
if common.PrometheusEnabled {
|
if common.PrometheusEnabled {
|
||||||
t := time.Now()
|
t := time.Now()
|
||||||
visitor, _, err := net.SplitHostPort(req.RemoteAddr)
|
var visitor string
|
||||||
if err != nil {
|
if realIP := req.Header.Get("X-Real-IP"); realIP != "" {
|
||||||
visitor = req.RemoteAddr
|
visitor = realIP
|
||||||
}
|
}
|
||||||
lbls := metrics.HTTPRouteMetricLabels{
|
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{
|
||||||
Service: p.TargetName,
|
Service: p.TargetName,
|
||||||
Method: req.Method,
|
Method: req.Method,
|
||||||
Host: req.Host,
|
Host: req.Host,
|
||||||
|
@ -289,12 +302,9 @@ func (p *ReverseProxy) handler(rw http.ResponseWriter, req *http.Request) {
|
||||||
}
|
}
|
||||||
rw = &httpMetricLogger{
|
rw = &httpMetricLogger{
|
||||||
ResponseWriter: rw,
|
ResponseWriter: rw,
|
||||||
|
timestamp: t,
|
||||||
labels: lbls,
|
labels: lbls,
|
||||||
}
|
}
|
||||||
defer func() {
|
|
||||||
duration := time.Since(t)
|
|
||||||
metrics.GetRouteMetrics().HTTPReqElapsed.With(lbls).Set(float64(duration.Milliseconds()))
|
|
||||||
}()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
transport := p.Transport
|
transport := p.Transport
|
||||||
|
|
Loading…
Add table
Reference in a new issue