add recorder for relay tunnel endpoint

This commit is contained in:
ginuerzh
2023-10-14 21:06:03 +08:00
parent 4be7d60147
commit 5488076801
5 changed files with 25 additions and 9 deletions

View File

@ -222,6 +222,9 @@ func (h *relayHandler) handleBindTunnel(ctx context.Context, conn net.Conn, netw
h.pool.Add(tunnelID, NewConnector(connectorID, session)) h.pool.Add(tunnelID, NewConnector(connectorID, session))
log.Debugf("tunnel %s connector %s/%s established", tunnelID, connectorID, network) log.Debugf("tunnel %s connector %s/%s established", tunnelID, connectorID, network)
if h.recorder.Recorder != nil {
h.recorder.Recorder.Record(ctx, tunnelID[:])
}
return return
} }

View File

@ -182,7 +182,7 @@ func (h *relayHandler) handleConnectTunnel(ctx context.Context, conn net.Conn, n
} }
var features []relay.Feature var features []relay.Feature
af := &relay.AddrFeature{} // visitor address af := &relay.AddrFeature{} // source/visitor address
af.ParseFrom(conn.RemoteAddr().String()) af.ParseFrom(conn.RemoteAddr().String())
features = append(features, af) features = append(features, af)

View File

@ -13,10 +13,12 @@ import (
"github.com/go-gost/core/hop" "github.com/go-gost/core/hop"
"github.com/go-gost/core/listener" "github.com/go-gost/core/listener"
md "github.com/go-gost/core/metadata" md "github.com/go-gost/core/metadata"
"github.com/go-gost/core/recorder"
"github.com/go-gost/core/service" "github.com/go-gost/core/service"
"github.com/go-gost/relay" "github.com/go-gost/relay"
xnet "github.com/go-gost/x/internal/net" xnet "github.com/go-gost/x/internal/net"
auth_util "github.com/go-gost/x/internal/util/auth" auth_util "github.com/go-gost/x/internal/util/auth"
xrecorder "github.com/go-gost/x/recorder"
"github.com/go-gost/x/registry" "github.com/go-gost/x/registry"
xservice "github.com/go-gost/x/service" xservice "github.com/go-gost/x/service"
) )
@ -39,6 +41,7 @@ type relayHandler struct {
options handler.Options options handler.Options
ep service.Service ep service.Service
pool *ConnectorPool pool *ConnectorPool
recorder recorder.RecorderObject
} }
func NewHandler(opts ...handler.Option) handler.Handler { func NewHandler(opts ...handler.Option) handler.Handler {
@ -63,6 +66,15 @@ func (h *relayHandler) Init(md md.Metadata) (err error) {
h.router = chain.NewRouter(chain.LoggerRouterOption(h.options.Logger)) h.router = chain.NewRouter(chain.LoggerRouterOption(h.options.Logger))
} }
if opts := h.router.Options(); opts != nil {
for _, ro := range opts.Recorders {
if ro.Record == xrecorder.RecorderServiceHandlerRelayTunnelEndpoint {
h.recorder = ro
break
}
}
}
if err = h.initEntryPoint(); err != nil { if err = h.initEntryPoint(); err != nil {
return return
} }

View File

@ -100,7 +100,7 @@ func (t *Tunnel) GetConnector(network string) *Connector {
} }
func (t *Tunnel) clean() { func (t *Tunnel) clean() {
ticker := time.NewTicker(3 * time.Second) ticker := time.NewTicker(30 * time.Second)
for range ticker.C { for range ticker.C {
t.mu.Lock() t.mu.Lock()
var connectors []*Connector var connectors []*Connector

View File

@ -2,4 +2,5 @@ package recorder
const ( const (
RecorderServiceHandlerSerial = "recorder.service.handler.serial" RecorderServiceHandlerSerial = "recorder.service.handler.serial"
RecorderServiceHandlerRelayTunnelEndpoint = "recorder.service.handler.relay.tunnel.endpoint"
) )