From 5a15f53fc6ae34b4d875ad635a5f3b8365916b63 Mon Sep 17 00:00:00 2001 From: ginuerzh Date: Sun, 22 May 2022 15:40:47 +0800 Subject: [PATCH] add new recorder object --- recorder/recorder.go | 1 + service/service.go | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/recorder/recorder.go b/recorder/recorder.go index 70b6099..c67ca9d 100644 --- a/recorder/recorder.go +++ b/recorder/recorder.go @@ -12,6 +12,7 @@ type RecorderObject struct { } const ( + RecorderServiceClientAddress = "recorder.service.client.address" RecorderServiceRouterDialAddress = "recorder.service.router.dial.address" RecorderServiceRouterDialAddressError = "recorder.service.router.dial.address.error" ) diff --git a/service/service.go b/service/service.go index b79e25a..402e876 100644 --- a/service/service.go +++ b/service/service.go @@ -10,10 +10,12 @@ import ( "github.com/go-gost/core/listener" "github.com/go-gost/core/logger" "github.com/go-gost/core/metrics" + "github.com/go-gost/core/recorder" ) type options struct { admission admission.Admission + recorders []recorder.RecorderObject 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 { return func(opts *options) { opts.logger = logger @@ -95,6 +103,17 @@ func (s *service) Serve() error { } 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 && !s.options.admission.Admit(conn.RemoteAddr().String()) { conn.Close()