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) }