From 5a427b4eaf99c47a5ddb7b1b26d3dd326823a577 Mon Sep 17 00:00:00 2001 From: ginuerzh Date: Wed, 3 Jan 2024 20:53:00 +0800 Subject: [PATCH] add observer --- handler/option.go | 8 ++++++++ listener/option.go | 8 ++++++++ observer/observer.go | 22 ++++++++++++++++++++++ 3 files changed, 38 insertions(+) create mode 100644 observer/observer.go diff --git a/handler/option.go b/handler/option.go index 8176081..91760be 100644 --- a/handler/option.go +++ b/handler/option.go @@ -11,6 +11,7 @@ import ( "github.com/go-gost/core/limiter/traffic" "github.com/go-gost/core/logger" "github.com/go-gost/core/metadata" + "github.com/go-gost/core/observer" ) type Options struct { @@ -22,6 +23,7 @@ type Options struct { Limiter traffic.TrafficLimiter TLSConfig *tls.Config Logger logger.Logger + Observer observer.Observer Service string } @@ -75,6 +77,12 @@ func LoggerOption(logger logger.Logger) Option { } } +func ObserverOption(observer observer.Observer) Option { + return func(opts *Options) { + opts.Observer = observer + } +} + func ServiceOption(service string) Option { return func(opts *Options) { opts.Service = service diff --git a/listener/option.go b/listener/option.go index d3b05f1..aa5159f 100644 --- a/listener/option.go +++ b/listener/option.go @@ -10,6 +10,7 @@ import ( "github.com/go-gost/core/limiter/conn" "github.com/go-gost/core/limiter/traffic" "github.com/go-gost/core/logger" + "github.com/go-gost/x/stats" ) type Options struct { @@ -21,6 +22,7 @@ type Options struct { TrafficLimiter traffic.TrafficLimiter ConnLimiter conn.ConnLimiter Chain chain.Chainer + Stats *stats.Stats Logger logger.Logger Service string ProxyProtocol int @@ -76,6 +78,12 @@ func ChainOption(chain chain.Chainer) Option { } } +func StatsOption(stats *stats.Stats) Option { + return func(opts *Options) { + opts.Stats = stats + } +} + func LoggerOption(logger logger.Logger) Option { return func(opts *Options) { opts.Logger = logger diff --git a/observer/observer.go b/observer/observer.go new file mode 100644 index 0000000..3a0c97b --- /dev/null +++ b/observer/observer.go @@ -0,0 +1,22 @@ +package observer + +import "context" + +type Options struct{} + +type Option func(opts *Options) + +type Observer interface { + Observe(ctx context.Context, events []Event, opts ...Option) error +} + +type EventType string + +const ( + EventStatus EventType = "status" + EventStats EventType = "stats" +) + +type Event interface { + Type() EventType +}