add traffic reset for stats
This commit is contained in:
@@ -34,6 +34,7 @@ import (
|
||||
"github.com/go-gost/x/internal/util/sniffing"
|
||||
tls_util "github.com/go-gost/x/internal/util/tls"
|
||||
ws_util "github.com/go-gost/x/internal/util/ws"
|
||||
xstats "github.com/go-gost/x/observer/stats"
|
||||
stats_wrapper "github.com/go-gost/x/observer/stats/wrapper"
|
||||
xrecorder "github.com/go-gost/x/recorder"
|
||||
"golang.org/x/net/http/httpguts"
|
||||
@@ -123,7 +124,7 @@ func (h *Sniffer) HandleHTTP(ctx context.Context, conn net.Conn, opts ...HandleO
|
||||
opt(&ho)
|
||||
}
|
||||
|
||||
pStats := stats.Stats{}
|
||||
pStats := xstats.Stats{}
|
||||
conn = stats_wrapper.WrapConn(conn, &pStats)
|
||||
|
||||
br := bufio.NewReader(conn)
|
||||
@@ -349,7 +350,7 @@ func (h *Sniffer) serveH2(ctx context.Context, conn net.Conn, ho *HandleOptions)
|
||||
return nil
|
||||
}
|
||||
|
||||
func (h *Sniffer) httpRoundTrip(ctx context.Context, rw, cc io.ReadWriter, node *chain.Node, req *http.Request, pStats *stats.Stats, ho *HandleOptions) (close bool, err error) {
|
||||
func (h *Sniffer) httpRoundTrip(ctx context.Context, rw, cc io.ReadWriter, node *chain.Node, req *http.Request, pStats stats.Stats, ho *HandleOptions) (close bool, err error) {
|
||||
close = true
|
||||
|
||||
log := ho.Log
|
||||
|
||||
@@ -30,6 +30,7 @@ import (
|
||||
xhttp "github.com/go-gost/x/internal/net/http"
|
||||
tls_util "github.com/go-gost/x/internal/util/tls"
|
||||
ws_util "github.com/go-gost/x/internal/util/ws"
|
||||
xstats "github.com/go-gost/x/observer/stats"
|
||||
stats_wrapper "github.com/go-gost/x/observer/stats/wrapper"
|
||||
xrecorder "github.com/go-gost/x/recorder"
|
||||
"golang.org/x/net/http/httpguts"
|
||||
@@ -114,7 +115,7 @@ func (h *Sniffer) HandleHTTP(ctx context.Context, conn net.Conn, opts ...HandleO
|
||||
opt(&ho)
|
||||
}
|
||||
|
||||
pStats := stats.Stats{}
|
||||
pStats := xstats.Stats{}
|
||||
conn = stats_wrapper.WrapConn(conn, &pStats)
|
||||
|
||||
br := bufio.NewReader(conn)
|
||||
@@ -262,7 +263,7 @@ func (h *Sniffer) serveH2(ctx context.Context, conn net.Conn, ho *HandleOptions)
|
||||
return nil
|
||||
}
|
||||
|
||||
func (h *Sniffer) httpRoundTrip(ctx context.Context, rw, cc io.ReadWriter, req *http.Request, ro *xrecorder.HandlerRecorderObject, pStats *stats.Stats, log logger.Logger) (close bool, err error) {
|
||||
func (h *Sniffer) httpRoundTrip(ctx context.Context, rw, cc io.ReadWriter, req *http.Request, ro *xrecorder.HandlerRecorderObject, pStats stats.Stats, log logger.Logger) (close bool, err error) {
|
||||
close = true
|
||||
|
||||
ro2 := &xrecorder.HandlerRecorderObject{}
|
||||
|
||||
@@ -5,22 +5,25 @@ import (
|
||||
|
||||
"github.com/go-gost/core/observer"
|
||||
"github.com/go-gost/core/observer/stats"
|
||||
xstats "github.com/go-gost/x/observer/stats"
|
||||
)
|
||||
|
||||
type HandlerStats struct {
|
||||
service string
|
||||
stats map[string]*stats.Stats
|
||||
mu sync.RWMutex
|
||||
service string
|
||||
stats map[string]stats.Stats
|
||||
resetTraffic bool
|
||||
mu sync.RWMutex
|
||||
}
|
||||
|
||||
func NewHandlerStats(service string) *HandlerStats {
|
||||
func NewHandlerStats(service string, resetTraffic bool) *HandlerStats {
|
||||
return &HandlerStats{
|
||||
service: service,
|
||||
stats: make(map[string]*stats.Stats),
|
||||
service: service,
|
||||
stats: make(map[string]stats.Stats),
|
||||
resetTraffic: resetTraffic,
|
||||
}
|
||||
}
|
||||
|
||||
func (p *HandlerStats) Stats(client string) *stats.Stats {
|
||||
func (p *HandlerStats) Stats(client string) stats.Stats {
|
||||
p.mu.RLock()
|
||||
pstats := p.stats[client]
|
||||
p.mu.RUnlock()
|
||||
@@ -32,7 +35,7 @@ func (p *HandlerStats) Stats(client string) *stats.Stats {
|
||||
defer p.mu.Unlock()
|
||||
pstats = p.stats[client]
|
||||
if pstats == nil {
|
||||
pstats = &stats.Stats{}
|
||||
pstats = xstats.NewStats(p.resetTraffic)
|
||||
}
|
||||
p.stats[client] = pstats
|
||||
|
||||
@@ -47,7 +50,7 @@ func (p *HandlerStats) Events() (events []observer.Event) {
|
||||
if !v.IsUpdated() {
|
||||
continue
|
||||
}
|
||||
events = append(events, stats.StatsEvent{
|
||||
events = append(events, xstats.StatsEvent{
|
||||
Kind: "handler",
|
||||
Service: p.service,
|
||||
Client: k,
|
||||
|
||||
Reference in New Issue
Block a user