mirror of
https://github.com/yusing/godoxy.git
synced 2025-05-20 04:42:33 +02:00
62 lines
1 KiB
Go
62 lines
1 KiB
Go
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)
|
|
}
|