From 72923b8cfa69f0dc1eb87d8165af020cc436f611 Mon Sep 17 00:00:00 2001 From: yusing Date: Thu, 29 May 2025 20:27:25 +0800 Subject: [PATCH] refactor: remove Tracer from middleware implementations and related debugging functionality --- .../net/gphttp/middleware/cidr_whitelist.go | 3 - .../gphttp/middleware/cloudflare_real_ip.go | 10 +-- internal/net/gphttp/middleware/middleware.go | 25 ------ .../net/gphttp/middleware/middleware_chain.go | 9 -- .../net/gphttp/middleware/modify_request.go | 4 - .../net/gphttp/middleware/modify_response.go | 3 - internal/net/gphttp/middleware/rate_limit.go | 2 - internal/net/gphttp/middleware/real_ip.go | 11 +-- .../net/gphttp/middleware/real_ip_test.go | 1 - internal/net/gphttp/middleware/trace.go | 87 ------------------- internal/net/gphttp/middleware/tracer.go | 62 ------------- 11 files changed, 3 insertions(+), 214 deletions(-) delete mode 100644 internal/net/gphttp/middleware/trace.go delete mode 100644 internal/net/gphttp/middleware/tracer.go diff --git a/internal/net/gphttp/middleware/cidr_whitelist.go b/internal/net/gphttp/middleware/cidr_whitelist.go index 291b45f..c0ba222 100644 --- a/internal/net/gphttp/middleware/cidr_whitelist.go +++ b/internal/net/gphttp/middleware/cidr_whitelist.go @@ -14,7 +14,6 @@ import ( type ( cidrWhitelist struct { CIDRWhitelistOpts - Tracer cachedAddr F.Map[string, bool] // cache for trusted IPs } CIDRWhitelistOpts struct { @@ -64,13 +63,11 @@ func (wl *cidrWhitelist) checkIP(w http.ResponseWriter, r *http.Request) bool { if cidr.Contains(ip) { wl.cachedAddr.Store(r.RemoteAddr, true) allow = true - wl.AddTracef("client %s is allowed", ipStr).With("allowed CIDR", cidr) break } } if !allow { wl.cachedAddr.Store(r.RemoteAddr, false) - wl.AddTracef("client %s is forbidden", ipStr).With("allowed CIDRs", wl.Allow) } } if !allow { diff --git a/internal/net/gphttp/middleware/cloudflare_real_ip.go b/internal/net/gphttp/middleware/cloudflare_real_ip.go index 59c79d3..a5173bd 100644 --- a/internal/net/gphttp/middleware/cloudflare_real_ip.go +++ b/internal/net/gphttp/middleware/cloudflare_real_ip.go @@ -45,7 +45,7 @@ var CloudflareRealIP = NewMiddleware[cloudflareRealIP]() // setup implements MiddlewareWithSetup. func (cri *cloudflareRealIP) setup() { - cri.realIP.RealIPOpts = RealIPOpts{ + cri.realIP = realIP{ Header: "CF-Connecting-IP", Recursive: true, } @@ -60,14 +60,6 @@ func (cri *cloudflareRealIP) before(w http.ResponseWriter, r *http.Request) bool return cri.realIP.before(w, r) } -func (cri *cloudflareRealIP) enableTrace() { - cri.realIP.enableTrace() -} - -func (cri *cloudflareRealIP) getTracer() *Tracer { - return cri.realIP.getTracer() -} - func tryFetchCFCIDR() (cfCIDRs []*types.CIDR) { if time.Since(cfCIDRsLastUpdate.Load()) < cfCIDRsUpdateInterval { return diff --git a/internal/net/gphttp/middleware/middleware.go b/internal/net/gphttp/middleware/middleware.go index ab7227f..d42d3a9 100644 --- a/internal/net/gphttp/middleware/middleware.go +++ b/internal/net/gphttp/middleware/middleware.go @@ -8,7 +8,6 @@ import ( "sort" "strings" - "github.com/rs/zerolog/log" "github.com/yusing/go-proxy/internal/gperr" gphttp "github.com/yusing/go-proxy/internal/net/gphttp" "github.com/yusing/go-proxy/internal/net/gphttp/reverseproxy" @@ -52,10 +51,6 @@ type ( MiddlewareFinalizerWithError interface { finalize() error } - MiddlewareWithTracer interface { - enableTrace() - getTracer() *Tracer - } ) const DefaultPriority = 10 @@ -84,26 +79,6 @@ func NewMiddleware[ImplType any]() *Middleware { } } -func (m *Middleware) enableTrace() { - if tracer, ok := m.impl.(MiddlewareWithTracer); ok { - tracer.enableTrace() - log.Trace().Msgf("middleware %s enabled trace", m.name) - } -} - -func (m *Middleware) getTracer() *Tracer { - if tracer, ok := m.impl.(MiddlewareWithTracer); ok { - return tracer.getTracer() - } - return nil -} - -func (m *Middleware) setParent(parent *Middleware) { - if tracer := m.getTracer(); tracer != nil { - tracer.SetParent(parent.getTracer()) - } -} - func (m *Middleware) setup() { if setup, ok := m.impl.(MiddlewareWithSetup); ok { setup.setup() diff --git a/internal/net/gphttp/middleware/middleware_chain.go b/internal/net/gphttp/middleware/middleware_chain.go index 986f22d..b749f55 100644 --- a/internal/net/gphttp/middleware/middleware_chain.go +++ b/internal/net/gphttp/middleware/middleware_chain.go @@ -3,7 +3,6 @@ package middleware import ( "net/http" - "github.com/yusing/go-proxy/internal/common" "github.com/yusing/go-proxy/internal/gperr" ) @@ -24,14 +23,6 @@ func NewMiddlewareChain(name string, chain []*Middleware) *Middleware { if mr, ok := comp.impl.(ResponseModifier); ok { chainMid.modResps = append(chainMid.modResps, mr) } - comp.setParent(m) - } - - if common.IsTrace { - for _, child := range chain { - child.enableTrace() - } - m.enableTrace() } return m } diff --git a/internal/net/gphttp/middleware/modify_request.go b/internal/net/gphttp/middleware/modify_request.go index 81c3b4f..3f227cf 100644 --- a/internal/net/gphttp/middleware/modify_request.go +++ b/internal/net/gphttp/middleware/modify_request.go @@ -9,7 +9,6 @@ import ( type ( modifyRequest struct { ModifyRequestOpts - Tracer } // order: add_prefix -> set_headers -> add_headers -> hide_headers ModifyRequestOpts struct { @@ -31,8 +30,6 @@ func (mr *ModifyRequestOpts) finalize() { // before implements RequestModifier. func (mr *modifyRequest) before(w http.ResponseWriter, r *http.Request) (proceed bool) { - mr.AddTraceRequest("before modify request", r) - if len(mr.AddPrefix) != 0 { mr.addPrefix(r, r.URL.Path) } @@ -41,7 +38,6 @@ func (mr *modifyRequest) before(w http.ResponseWriter, r *http.Request) (proceed } else { mr.modifyHeadersWithVarSubstitution(r, nil, r.Header) } - mr.AddTraceRequest("after modify request", r) return true } diff --git a/internal/net/gphttp/middleware/modify_response.go b/internal/net/gphttp/middleware/modify_response.go index e110cc5..df616b9 100644 --- a/internal/net/gphttp/middleware/modify_response.go +++ b/internal/net/gphttp/middleware/modify_response.go @@ -6,19 +6,16 @@ import ( type modifyResponse struct { ModifyRequestOpts - Tracer } var ModifyResponse = NewMiddleware[modifyResponse]() // modifyResponse implements ResponseModifier. func (mr *modifyResponse) modifyResponse(resp *http.Response) error { - mr.AddTraceResponse("before modify response", resp) if !mr.needVarSubstitution { mr.modifyHeaders(resp.Request, resp.Header) } else { mr.modifyHeadersWithVarSubstitution(resp.Request, resp, resp.Header) } - mr.AddTraceResponse("after modify response", resp) return nil } diff --git a/internal/net/gphttp/middleware/rate_limit.go b/internal/net/gphttp/middleware/rate_limit.go index fd0b1a2..381ae97 100644 --- a/internal/net/gphttp/middleware/rate_limit.go +++ b/internal/net/gphttp/middleware/rate_limit.go @@ -13,7 +13,6 @@ type ( requestMap = map[string]*rate.Limiter rateLimiter struct { RateLimiterOpts - Tracer requestMap requestMap mu sync.Mutex @@ -51,7 +50,6 @@ func (rl *rateLimiter) newLimiter() *rate.Limiter { func (rl *rateLimiter) limit(w http.ResponseWriter, r *http.Request) bool { host, _, err := net.SplitHostPort(r.RemoteAddr) if err != nil { - rl.AddTracef("unable to parse remote address %s", r.RemoteAddr) http.Error(w, "Internal error", http.StatusInternalServerError) return false } diff --git a/internal/net/gphttp/middleware/real_ip.go b/internal/net/gphttp/middleware/real_ip.go index ed11d12..76ba777 100644 --- a/internal/net/gphttp/middleware/real_ip.go +++ b/internal/net/gphttp/middleware/real_ip.go @@ -11,10 +11,7 @@ import ( // https://nginx.org/en/docs/http/ngx_http_realip_module.html type ( - realIP struct { - RealIPOpts - Tracer - } + realIP RealIPOpts RealIPOpts struct { // Header is the name of the header to use for the real client IP Header string `validate:"required"` @@ -42,7 +39,7 @@ var ( // setup implements MiddlewareWithSetup. func (ri *realIP) setup() { - ri.RealIPOpts = realIPOptsDefault + *ri = realIP(realIPOptsDefault) } // before implements RequestModifier. @@ -77,7 +74,6 @@ func (ri *realIP) setRealIP(req *http.Request) { } } if !isTrusted { - ri.AddTracef("client ip %s is not trusted", clientIP).With("allowed CIDRs", ri.From) return } @@ -90,7 +86,6 @@ func (ri *realIP) setRealIP(req *http.Request) { } if len(realIPs) == 0 { - ri.AddTracef("no real ip found in header %s", ri.Header).WithRequest(req) return } @@ -105,12 +100,10 @@ func (ri *realIP) setRealIP(req *http.Request) { } if lastNonTrustedIP == "" { - ri.AddTracef("no non-trusted ip found").With("allowed CIDRs", ri.From).With("ips", realIPs) return } req.RemoteAddr = lastNonTrustedIP req.Header.Set(ri.Header, lastNonTrustedIP) req.Header.Set(httpheaders.HeaderXRealIP, lastNonTrustedIP) - ri.AddTracef("set real ip %s", lastNonTrustedIP) } diff --git a/internal/net/gphttp/middleware/real_ip_test.go b/internal/net/gphttp/middleware/real_ip_test.go index 372862d..331cb80 100644 --- a/internal/net/gphttp/middleware/real_ip_test.go +++ b/internal/net/gphttp/middleware/real_ip_test.go @@ -71,7 +71,6 @@ func TestSetRealIP(t *testing.T) { result, err := newMiddlewareTest(mid, nil) ExpectNoError(t, err) - t.Log(traces) ExpectEqual(t, result.ResponseStatus, http.StatusOK) ExpectEqual(t, strings.Split(result.RemoteAddr, ":")[0], testRealIP) } diff --git a/internal/net/gphttp/middleware/trace.go b/internal/net/gphttp/middleware/trace.go deleted file mode 100644 index 4c9550a..0000000 --- a/internal/net/gphttp/middleware/trace.go +++ /dev/null @@ -1,87 +0,0 @@ -package middleware - -import ( - "net/http" - "sync" - - "github.com/yusing/go-proxy/internal/net/gphttp/httpheaders" -) - -type ( - Trace struct { - Time string `json:"time,omitempty"` - Caller string `json:"caller,omitempty"` - URL string `json:"url,omitempty"` - Message string `json:"msg"` - ReqHeaders map[string]string `json:"req_headers,omitempty"` - RespHeaders map[string]string `json:"resp_headers,omitempty"` - RespStatus int `json:"resp_status,omitempty"` - Additional map[string]any `json:"additional,omitempty"` - } - Traces []*Trace -) - -var ( - traces = make(Traces, 0) - tracesMu sync.Mutex -) - -const MaxTraceNum = 100 - -func GetAllTrace() []*Trace { - return traces -} - -func (tr *Trace) WithRequest(req *http.Request) *Trace { - if tr == nil { - return nil - } - tr.URL = req.RequestURI - tr.ReqHeaders = httpheaders.HeaderToMap(req.Header) - return tr -} - -func (tr *Trace) WithResponse(resp *http.Response) *Trace { - if tr == nil { - return nil - } - tr.URL = resp.Request.RequestURI - tr.ReqHeaders = httpheaders.HeaderToMap(resp.Request.Header) - tr.RespHeaders = httpheaders.HeaderToMap(resp.Header) - tr.RespStatus = resp.StatusCode - return tr -} - -func (tr *Trace) With(what string, additional any) *Trace { - if tr == nil { - return nil - } - - if tr.Additional == nil { - tr.Additional = map[string]any{} - } - tr.Additional[what] = additional - return tr -} - -func (tr *Trace) WithError(err error) *Trace { - if tr == nil { - return nil - } - - if tr.Additional == nil { - tr.Additional = map[string]any{} - } - tr.Additional["error"] = err.Error() - return tr -} - -func addTrace(t *Trace) *Trace { - tracesMu.Lock() - defer tracesMu.Unlock() - if len(traces) > MaxTraceNum { - traces = traces[1:] - } - traces = append(traces, t) - return t -} diff --git a/internal/net/gphttp/middleware/tracer.go b/internal/net/gphttp/middleware/tracer.go deleted file mode 100644 index c99f08c..0000000 --- a/internal/net/gphttp/middleware/tracer.go +++ /dev/null @@ -1,62 +0,0 @@ -package middleware - -import ( - "fmt" - "net/http" - "time" - - "github.com/yusing/go-proxy/internal/utils/strutils" -) - -type Tracer struct { - name string - enabled bool -} - -func _() { - var _ MiddlewareWithTracer = &Tracer{} -} - -func (t *Tracer) enableTrace() { - t.enabled = true -} - -func (t *Tracer) getTracer() *Tracer { - return t -} - -func (t *Tracer) SetParent(parent *Tracer) { - if parent == nil { - return - } - t.name = parent.name + "." + t.name -} - -func (t *Tracer) addTrace(msg string) *Trace { - return addTrace(&Trace{ - Time: strutils.FormatTime(time.Now()), - Caller: t.name, - Message: msg, - }) -} - -func (t *Tracer) AddTracef(msg string, args ...any) *Trace { - if !t.enabled { - return nil - } - return t.addTrace(fmt.Sprintf(msg, args...)) -} - -func (t *Tracer) AddTraceRequest(msg string, req *http.Request) *Trace { - if !t.enabled { - return nil - } - return t.addTrace(msg).WithRequest(req) -} - -func (t *Tracer) AddTraceResponse(msg string, resp *http.Response) *Trace { - if !t.enabled { - return nil - } - return t.addTrace(msg).WithResponse(resp) -}