mirror of
https://github.com/yusing/godoxy.git
synced 2025-05-19 20:32:35 +02:00
44 lines
1 KiB
Go
44 lines
1 KiB
Go
package metricslogger
|
|
|
|
import (
|
|
"net"
|
|
"net/http"
|
|
|
|
"github.com/yusing/go-proxy/internal/metrics"
|
|
)
|
|
|
|
type MetricsLogger struct {
|
|
ServiceName string `json:"service_name"`
|
|
}
|
|
|
|
func NewMetricsLogger(serviceName string) *MetricsLogger {
|
|
return &MetricsLogger{serviceName}
|
|
}
|
|
|
|
func (m *MetricsLogger) GetHandler(next http.Handler) http.HandlerFunc {
|
|
return func(rw http.ResponseWriter, req *http.Request) {
|
|
m.ServeHTTP(rw, req, next.ServeHTTP)
|
|
}
|
|
}
|
|
|
|
func (m *MetricsLogger) ServeHTTP(rw http.ResponseWriter, req *http.Request, next http.HandlerFunc) {
|
|
visitorIP, _, err := net.SplitHostPort(req.RemoteAddr)
|
|
if err != nil {
|
|
visitorIP = req.RemoteAddr
|
|
}
|
|
|
|
// req.RemoteAddr had been modified by middleware (if any)
|
|
lbls := &metrics.HTTPRouteMetricLabels{
|
|
Service: m.ServiceName,
|
|
Method: req.Method,
|
|
Host: req.Host,
|
|
Visitor: visitorIP,
|
|
Path: req.URL.Path,
|
|
}
|
|
|
|
next.ServeHTTP(newHTTPMetricLogger(rw, lbls), req)
|
|
}
|
|
|
|
func (m *MetricsLogger) ResetMetrics() {
|
|
metrics.GetRouteMetrics().UnregisterService(m.ServiceName)
|
|
}
|