add new recorder object

This commit is contained in:
ginuerzh 2022-05-22 15:40:47 +08:00
parent acee883234
commit 5a15f53fc6
2 changed files with 20 additions and 0 deletions

View File

@ -12,6 +12,7 @@ type RecorderObject struct {
} }
const ( const (
RecorderServiceClientAddress = "recorder.service.client.address"
RecorderServiceRouterDialAddress = "recorder.service.router.dial.address" RecorderServiceRouterDialAddress = "recorder.service.router.dial.address"
RecorderServiceRouterDialAddressError = "recorder.service.router.dial.address.error" RecorderServiceRouterDialAddressError = "recorder.service.router.dial.address.error"
) )

View File

@ -10,10 +10,12 @@ import (
"github.com/go-gost/core/listener" "github.com/go-gost/core/listener"
"github.com/go-gost/core/logger" "github.com/go-gost/core/logger"
"github.com/go-gost/core/metrics" "github.com/go-gost/core/metrics"
"github.com/go-gost/core/recorder"
) )
type options struct { type options struct {
admission admission.Admission admission admission.Admission
recorders []recorder.RecorderObject
logger logger.Logger logger logger.Logger
} }
@ -25,6 +27,12 @@ func AdmissionOption(admission admission.Admission) Option {
} }
} }
func RecordersOption(recorders ...recorder.RecorderObject) Option {
return func(opts *options) {
opts.recorders = recorders
}
}
func LoggerOption(logger logger.Logger) Option { func LoggerOption(logger logger.Logger) Option {
return func(opts *options) { return func(opts *options) {
opts.logger = logger opts.logger = logger
@ -95,6 +103,17 @@ func (s *service) Serve() error {
} }
tempDelay = 0 tempDelay = 0
for _, rec := range s.options.recorders {
host := conn.RemoteAddr().String()
if h, _, _ := net.SplitHostPort(host); h != "" {
host = h
}
if rec.Record == recorder.RecorderServiceClientAddress {
if err := rec.Recorder.Record(context.Background(), []byte(host)); err != nil {
s.options.logger.Errorf("record %s: %v", rec.Record, err)
}
}
}
if s.options.admission != nil && if s.options.admission != nil &&
!s.options.admission.Admit(conn.RemoteAddr().String()) { !s.options.admission.Admit(conn.RemoteAddr().String()) {
conn.Close() conn.Close()