From b252b8313e3fd9e28f82a8f2f363807e3188ef11 Mon Sep 17 00:00:00 2001 From: wood chen Date: Mon, 2 Dec 2024 05:45:39 +0800 Subject: [PATCH] refactor(handlers): simplify referer handling in API request logging - Removed custom referer parsing logic and replaced it with direct usage of r.Referer() for cleaner code. - Updated logging to consistently use the referer from the request object across all relevant handlers. - Enhanced readability and maintainability by eliminating redundant code related to referer extraction. --- handlers/api_handler.go | 29 ++++++++--------------------- handlers/handlers.go | 24 ++++++------------------ middleware/metrics.go | 1 + 3 files changed, 15 insertions(+), 39 deletions(-) diff --git a/handlers/api_handler.go b/handlers/api_handler.go index bf53e49..42650f6 100644 --- a/handlers/api_handler.go +++ b/handlers/api_handler.go @@ -5,7 +5,6 @@ import ( "fmt" "log" "net/http" - "net/url" "random-api-go/monitoring" "random-api-go/services" "random-api-go/stats" @@ -26,18 +25,6 @@ func InitializeHandlers(sm *stats.StatsManager) error { func HandleAPIRequest(w http.ResponseWriter, r *http.Request) { start := time.Now() realIP := utils.GetRealIP(r) - referer := r.Referer() - - // 修改这部分,获取完整的referer信息 - sourceInfo := "direct" - if referer != "" { - if parsedURL, err := url.Parse(referer); err == nil { - sourceInfo = parsedURL.Host + parsedURL.Path - if parsedURL.RawQuery != "" { - sourceInfo += "?" + parsedURL.RawQuery - } - } - } path := strings.TrimPrefix(r.URL.Path, "/") pathSegments := strings.Split(path, "/") @@ -50,7 +37,7 @@ func HandleAPIRequest(w http.ResponseWriter, r *http.Request) { StatusCode: http.StatusNotFound, Latency: float64(time.Since(start).Microseconds()) / 1000, IP: realIP, - Referer: sourceInfo, + Referer: r.Referer(), }) http.NotFound(w, r) return @@ -96,16 +83,16 @@ func HandleAPIRequest(w http.ResponseWriter, r *http.Request) { StatusCode: http.StatusFound, Latency: float64(duration.Microseconds()) / 1000, // 转换为毫秒 IP: realIP, - Referer: sourceInfo, + Referer: r.Referer(), }) log.Printf(" %-12s | %-15s | %-6s | %-20s | %-20s | %-50s", - duration, // 持续时间 - realIP, // 真实IP - r.Method, // HTTP方法 - r.URL.Path, // 请求路径 - sourceInfo, // 来源信息 - randomURL, // 重定向URL + duration, // 持续时间 + realIP, // 真实IP + r.Method, // HTTP方法 + r.URL.Path, // 请求路径 + r.Referer(), // 来源信息 + randomURL, // 重定向URL ) http.Redirect(w, r, randomURL, http.StatusFound) diff --git a/handlers/handlers.go b/handlers/handlers.go index 45798b7..b778bd3 100644 --- a/handlers/handlers.go +++ b/handlers/handlers.go @@ -6,7 +6,6 @@ import ( "fmt" "log" "net/http" - "net/url" "random-api-go/monitoring" "random-api-go/router" "random-api-go/services" @@ -39,17 +38,6 @@ func (h *Handlers) HandleAPIRequest(w http.ResponseWriter, r *http.Request) { start := time.Now() realIP := utils.GetRealIP(r) - // 获取并处理 referer - sourceInfo := "direct" - if referer := r.Referer(); referer != "" { - if parsedURL, err := url.Parse(referer); err == nil { - sourceInfo = parsedURL.Host + parsedURL.Path - if parsedURL.RawQuery != "" { - sourceInfo += "?" + parsedURL.RawQuery - } - } - } - path := strings.TrimPrefix(r.URL.Path, "/") pathSegments := strings.Split(path, "/") @@ -61,7 +49,7 @@ func (h *Handlers) HandleAPIRequest(w http.ResponseWriter, r *http.Request) { StatusCode: http.StatusNotFound, Latency: float64(time.Since(start).Microseconds()) / 1000, IP: realIP, - Referer: sourceInfo, + Referer: r.Referer(), }) resultChan <- result{err: fmt.Errorf("not found")} return @@ -82,7 +70,7 @@ func (h *Handlers) HandleAPIRequest(w http.ResponseWriter, r *http.Request) { StatusCode: http.StatusNotFound, Latency: float64(time.Since(start).Microseconds()) / 1000, IP: realIP, - Referer: sourceInfo, + Referer: r.Referer(), }) resultChan <- result{err: fmt.Errorf("not found")} return @@ -98,7 +86,7 @@ func (h *Handlers) HandleAPIRequest(w http.ResponseWriter, r *http.Request) { StatusCode: http.StatusInternalServerError, Latency: float64(time.Since(start).Microseconds()) / 1000, IP: realIP, - Referer: sourceInfo, + Referer: r.Referer(), }) resultChan <- result{err: err} return @@ -112,7 +100,7 @@ func (h *Handlers) HandleAPIRequest(w http.ResponseWriter, r *http.Request) { StatusCode: http.StatusNotFound, Latency: float64(time.Since(start).Microseconds()) / 1000, IP: realIP, - Referer: sourceInfo, + Referer: r.Referer(), }) resultChan <- result{err: fmt.Errorf("no content available")} return @@ -130,7 +118,7 @@ func (h *Handlers) HandleAPIRequest(w http.ResponseWriter, r *http.Request) { StatusCode: http.StatusFound, Latency: float64(duration.Microseconds()) / 1000, IP: realIP, - Referer: sourceInfo, + Referer: r.Referer(), }) log.Printf(" %-12s | %-15s | %-6s | %-20s | %-20s | %-50s", @@ -138,7 +126,7 @@ func (h *Handlers) HandleAPIRequest(w http.ResponseWriter, r *http.Request) { realIP, r.Method, r.URL.Path, - sourceInfo, + r.Referer(), randomURL, ) diff --git a/middleware/metrics.go b/middleware/metrics.go index 93e95ea..5a4ed57 100644 --- a/middleware/metrics.go +++ b/middleware/metrics.go @@ -30,6 +30,7 @@ func MetricsMiddleware(next http.Handler) http.Handler { StatusCode: rw.statusCode, Latency: float64(duration.Microseconds()) / 1000, IP: utils.GetRealIP(r), + Referer: r.Referer(), }) }) }