From f68bfdb14979d11da837dc36dc62cda025b6a571 Mon Sep 17 00:00:00 2001 From: ginuerzh Date: Wed, 3 Jan 2024 20:56:24 +0800 Subject: [PATCH 1/4] add observer --- cmd/gost/config.go | 8 ++++++++ cmd/gost/program.go | 1 + go.mod | 6 +++--- go.sum | 12 ++++++------ 4 files changed, 18 insertions(+), 9 deletions(-) diff --git a/cmd/gost/config.go b/cmd/gost/config.go index 0229c11..ab6381c 100644 --- a/cmd/gost/config.go +++ b/cmd/gost/config.go @@ -14,6 +14,7 @@ import ( ingress_parser "github.com/go-gost/x/config/parsing/ingress" limiter_parser "github.com/go-gost/x/config/parsing/limiter" logger_parser "github.com/go-gost/x/config/parsing/logger" + observer_parser "github.com/go-gost/x/config/parsing/observer" recorder_parser "github.com/go-gost/x/config/parsing/recorder" resolver_parser "github.com/go-gost/x/config/parsing/resolver" router_parser "github.com/go-gost/x/config/parsing/router" @@ -106,6 +107,13 @@ func buildService(cfg *config.Config) (services []service.Service) { } } + for _, observerCfg := range cfg.Observers { + if h := observer_parser.ParseObserver(observerCfg); h != nil { + if err := registry.ObserverRegistry().Register(observerCfg.Name, h); err != nil { + log.Fatal(err) + } + } + } for _, recorderCfg := range cfg.Recorders { if h := recorder_parser.ParseRecorder(recorderCfg); h != nil { if err := registry.RecorderRegistry().Register(recorderCfg.Name, h); err != nil { diff --git a/cmd/gost/program.go b/cmd/gost/program.go index ac2a7e9..c215c19 100644 --- a/cmd/gost/program.go +++ b/cmd/gost/program.go @@ -188,6 +188,7 @@ func (p *program) mergeConfig(cfg1, cfg2 *config.Config) *config.Config { RLimiters: append(cfg1.RLimiters, cfg2.RLimiters...), Loggers: append(cfg1.Loggers, cfg2.Loggers...), Routers: append(cfg1.Routers, cfg2.Routers...), + Observers: append(cfg1.Observers, cfg2.Observers...), TLS: cfg1.TLS, Log: cfg1.Log, API: cfg1.API, diff --git a/go.mod b/go.mod index 3a29a42..05bafcf 100644 --- a/go.mod +++ b/go.mod @@ -5,8 +5,8 @@ go 1.21 replace github.com/templexxx/cpu v0.0.7 => github.com/templexxx/cpu v0.0.10-0.20211111114238-98168dcec14a require ( - github.com/go-gost/core v0.0.0-20231219132306-6b5c04b5e446 - github.com/go-gost/x v0.0.0-20231227112431-e1ae379048a5 + github.com/go-gost/core v0.0.0-20240103125300-5a427b4eaf99 + github.com/go-gost/x v0.0.0-20240103125506-c959fc2f7376 github.com/judwhite/go-svc v1.2.1 ) @@ -28,7 +28,7 @@ require ( github.com/gin-gonic/gin v1.9.1 // indirect github.com/go-gost/gosocks4 v0.0.1 // indirect github.com/go-gost/gosocks5 v0.4.0 // indirect - github.com/go-gost/plugin v0.0.0-20231119084331-d49a1cb23b3b // indirect + github.com/go-gost/plugin v0.0.0-20240103125338-9c84e29cb81a // indirect github.com/go-gost/relay v0.4.1-0.20230916134211-828f314ddfe7 // indirect github.com/go-gost/tls-dissector v0.0.2-0.20220408131628-aac992c27451 // indirect github.com/go-playground/locales v0.14.1 // indirect diff --git a/go.sum b/go.sum index 98ba37c..e94baca 100644 --- a/go.sum +++ b/go.sum @@ -49,20 +49,20 @@ github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= github.com/gin-gonic/gin v1.9.1 h1:4idEAncQnU5cB7BeOkPtxjfCSye0AAm1R0RVIqJ+Jmg= github.com/gin-gonic/gin v1.9.1/go.mod h1:hPrL7YrpYKXt5YId3A/Tnip5kqbEAP+KLuI3SUcPTeU= -github.com/go-gost/core v0.0.0-20231219132306-6b5c04b5e446 h1:H7VyfQOOAH7smDQ41O/mMClFv8MyflVk5AO9uIp7qXg= -github.com/go-gost/core v0.0.0-20231219132306-6b5c04b5e446/go.mod h1:ndkgWVYRLwupVaFFWv8ML1Nr8tD3xhHK245PLpUDg4E= +github.com/go-gost/core v0.0.0-20240103125300-5a427b4eaf99 h1:/0hmilnQBEDlOaRcO+TlwaHH8a5ig6nc2aAsU4FGZcw= +github.com/go-gost/core v0.0.0-20240103125300-5a427b4eaf99/go.mod h1:ndkgWVYRLwupVaFFWv8ML1Nr8tD3xhHK245PLpUDg4E= github.com/go-gost/gosocks4 v0.0.1 h1:+k1sec8HlELuQV7rWftIkmy8UijzUt2I6t+iMPlGB2s= github.com/go-gost/gosocks4 v0.0.1/go.mod h1:3B6L47HbU/qugDg4JnoFPHgJXE43Inz8Bah1QaN9qCc= github.com/go-gost/gosocks5 v0.4.0 h1:EIrOEkpJez4gwHrMa33frA+hHXJyevjp47thpMQsJzI= github.com/go-gost/gosocks5 v0.4.0/go.mod h1:1G6I7HP7VFVxveGkoK8mnprnJqSqJjdcASKsdUn4Pp4= -github.com/go-gost/plugin v0.0.0-20231119084331-d49a1cb23b3b h1:ZmnYutflq+KOZK+Px5RDckorDSxTYlkT4aQbjTC8/C4= -github.com/go-gost/plugin v0.0.0-20231119084331-d49a1cb23b3b/go.mod h1:qXr2Zm9Ex2ATqnWuNUzVZqySPMnuIihvblYZt4MlZLw= +github.com/go-gost/plugin v0.0.0-20240103125338-9c84e29cb81a h1:ME7P1Brcg4C640DSPqlvQr7JuvvQfJ8QpmS3yCFlK3A= +github.com/go-gost/plugin v0.0.0-20240103125338-9c84e29cb81a/go.mod h1:qXr2Zm9Ex2ATqnWuNUzVZqySPMnuIihvblYZt4MlZLw= github.com/go-gost/relay v0.4.1-0.20230916134211-828f314ddfe7 h1:qAG1OyjvdA5h221CfFSS3J359V3d2E7dJWyP29QoDSI= github.com/go-gost/relay v0.4.1-0.20230916134211-828f314ddfe7/go.mod h1:lcX+23LCQ3khIeASBo+tJ/WbwXFO32/N5YN6ucuYTG8= github.com/go-gost/tls-dissector v0.0.2-0.20220408131628-aac992c27451 h1:xj8gUZGYO3nb5+6Bjw9+tsFkA9sYynrOvDvvC4uDV2I= github.com/go-gost/tls-dissector v0.0.2-0.20220408131628-aac992c27451/go.mod h1:/9QfdewqmHdaE362Hv5nDaSWLx3pCmtD870d6GaquXs= -github.com/go-gost/x v0.0.0-20231227112431-e1ae379048a5 h1:wd0kauz1Su3UP7Z3zlf/zR4RZVnVW3Lcsg0mUSyj/tc= -github.com/go-gost/x v0.0.0-20231227112431-e1ae379048a5/go.mod h1:DomeGDRedoAv33nq3R/pB9wSNQBYDcCAq7OZbOuOwMw= +github.com/go-gost/x v0.0.0-20240103125506-c959fc2f7376 h1:ZLaIjEbo/pGxK9Mw4RUTqsi0be9n22YnC7tsb6cHtnE= +github.com/go-gost/x v0.0.0-20240103125506-c959fc2f7376/go.mod h1:aZsf9kureYawzhBhxsl/IOTYgO7Tt3TETQ5xxXmRw5E= github.com/go-logr/logr v1.2.4 h1:g01GSCwiDw2xSZfjJ2/T9M+S6pFdcNtFYsp+Y43HYDQ= github.com/go-logr/logr v1.2.4/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s= From fdd3eb61c37b225b99805602220b36f257453b45 Mon Sep 17 00:00:00 2001 From: ginuerzh Date: Sun, 7 Jan 2024 19:42:14 +0800 Subject: [PATCH 2/4] add auth CLI support for api & metrics --- cmd/gost/program.go | 41 +++++++++++++++++++++++++++++++++++++++++ go.mod | 2 +- go.sum | 4 ++-- 3 files changed, 44 insertions(+), 3 deletions(-) diff --git a/cmd/gost/program.go b/cmd/gost/program.go index c215c19..a267c1b 100644 --- a/cmd/gost/program.go +++ b/cmd/gost/program.go @@ -7,9 +7,11 @@ import ( "strings" "github.com/go-gost/core/logger" + mdutil "github.com/go-gost/core/metadata/util" "github.com/go-gost/x/config" "github.com/go-gost/x/config/parsing" logger_parser "github.com/go-gost/x/config/parsing/logger" + xmd "github.com/go-gost/x/metadata" xmetrics "github.com/go-gost/x/metrics" "github.com/go-gost/x/registry" "github.com/judwhite/go-svc" @@ -71,6 +73,26 @@ func (p *program) Init(env svc.Environment) error { cfg.API = &config.APIConfig{ Addr: apiAddr, } + if url, _ := normCmd(apiAddr); url != nil { + cfg.API.Addr = url.Host + if url.User != nil { + username := url.User.Username() + password, _ := url.User.Password() + cfg.API.Auth = &config.AuthConfig{ + Username: username, + Password: password, + } + } + m := map[string]any{} + for k, v := range url.Query() { + if len(v) > 0 { + m[k] = v[0] + } + } + md := xmd.NewMetadata(m) + cfg.API.PathPrefix = mdutil.GetString(md, "pathPrefix") + cfg.API.AccessLog = mdutil.GetBool(md, "accesslog") + } } if debug { if cfg.Log == nil { @@ -82,6 +104,25 @@ func (p *program) Init(env svc.Environment) error { cfg.Metrics = &config.MetricsConfig{ Addr: metricsAddr, } + if url, _ := normCmd(metricsAddr); url != nil { + cfg.Metrics.Addr = url.Host + if url.User != nil { + username := url.User.Username() + password, _ := url.User.Password() + cfg.Metrics.Auth = &config.AuthConfig{ + Username: username, + Password: password, + } + } + m := map[string]any{} + for k, v := range url.Query() { + if len(v) > 0 { + m[k] = v[0] + } + } + md := xmd.NewMetadata(m) + cfg.Metrics.Path = mdutil.GetString(md, "path") + } } logCfg := cfg.Log diff --git a/go.mod b/go.mod index 05bafcf..821e2b3 100644 --- a/go.mod +++ b/go.mod @@ -6,7 +6,7 @@ replace github.com/templexxx/cpu v0.0.7 => github.com/templexxx/cpu v0.0.10-0.20 require ( github.com/go-gost/core v0.0.0-20240103125300-5a427b4eaf99 - github.com/go-gost/x v0.0.0-20240103125506-c959fc2f7376 + github.com/go-gost/x v0.0.0-20240107114042-262ac0e9a57c github.com/judwhite/go-svc v1.2.1 ) diff --git a/go.sum b/go.sum index e94baca..9710e85 100644 --- a/go.sum +++ b/go.sum @@ -61,8 +61,8 @@ github.com/go-gost/relay v0.4.1-0.20230916134211-828f314ddfe7 h1:qAG1OyjvdA5h221 github.com/go-gost/relay v0.4.1-0.20230916134211-828f314ddfe7/go.mod h1:lcX+23LCQ3khIeASBo+tJ/WbwXFO32/N5YN6ucuYTG8= github.com/go-gost/tls-dissector v0.0.2-0.20220408131628-aac992c27451 h1:xj8gUZGYO3nb5+6Bjw9+tsFkA9sYynrOvDvvC4uDV2I= github.com/go-gost/tls-dissector v0.0.2-0.20220408131628-aac992c27451/go.mod h1:/9QfdewqmHdaE362Hv5nDaSWLx3pCmtD870d6GaquXs= -github.com/go-gost/x v0.0.0-20240103125506-c959fc2f7376 h1:ZLaIjEbo/pGxK9Mw4RUTqsi0be9n22YnC7tsb6cHtnE= -github.com/go-gost/x v0.0.0-20240103125506-c959fc2f7376/go.mod h1:aZsf9kureYawzhBhxsl/IOTYgO7Tt3TETQ5xxXmRw5E= +github.com/go-gost/x v0.0.0-20240107114042-262ac0e9a57c h1:f5idgyuxDMC+AQoFjRGc6G65RUMb6RsZKXL+01ORk94= +github.com/go-gost/x v0.0.0-20240107114042-262ac0e9a57c/go.mod h1:aZsf9kureYawzhBhxsl/IOTYgO7Tt3TETQ5xxXmRw5E= github.com/go-logr/logr v1.2.4 h1:g01GSCwiDw2xSZfjJ2/T9M+S6pFdcNtFYsp+Y43HYDQ= github.com/go-logr/logr v1.2.4/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s= From 69ba5864ad11b70547379d2f5e7155f081158b74 Mon Sep 17 00:00:00 2001 From: ginuerzh Date: Mon, 8 Jan 2024 21:25:41 +0800 Subject: [PATCH 3/4] fix #390 --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 821e2b3..30f0922 100644 --- a/go.mod +++ b/go.mod @@ -6,7 +6,7 @@ replace github.com/templexxx/cpu v0.0.7 => github.com/templexxx/cpu v0.0.10-0.20 require ( github.com/go-gost/core v0.0.0-20240103125300-5a427b4eaf99 - github.com/go-gost/x v0.0.0-20240107114042-262ac0e9a57c + github.com/go-gost/x v0.0.0-20240108132220-c04c28e1fd78 github.com/judwhite/go-svc v1.2.1 ) diff --git a/go.sum b/go.sum index 9710e85..3e70226 100644 --- a/go.sum +++ b/go.sum @@ -61,8 +61,8 @@ github.com/go-gost/relay v0.4.1-0.20230916134211-828f314ddfe7 h1:qAG1OyjvdA5h221 github.com/go-gost/relay v0.4.1-0.20230916134211-828f314ddfe7/go.mod h1:lcX+23LCQ3khIeASBo+tJ/WbwXFO32/N5YN6ucuYTG8= github.com/go-gost/tls-dissector v0.0.2-0.20220408131628-aac992c27451 h1:xj8gUZGYO3nb5+6Bjw9+tsFkA9sYynrOvDvvC4uDV2I= github.com/go-gost/tls-dissector v0.0.2-0.20220408131628-aac992c27451/go.mod h1:/9QfdewqmHdaE362Hv5nDaSWLx3pCmtD870d6GaquXs= -github.com/go-gost/x v0.0.0-20240107114042-262ac0e9a57c h1:f5idgyuxDMC+AQoFjRGc6G65RUMb6RsZKXL+01ORk94= -github.com/go-gost/x v0.0.0-20240107114042-262ac0e9a57c/go.mod h1:aZsf9kureYawzhBhxsl/IOTYgO7Tt3TETQ5xxXmRw5E= +github.com/go-gost/x v0.0.0-20240108132220-c04c28e1fd78 h1:6iZ2BxZpWxI80Opwpursps7U8pFsb9wl6ZFe+zmnBqU= +github.com/go-gost/x v0.0.0-20240108132220-c04c28e1fd78/go.mod h1:aZsf9kureYawzhBhxsl/IOTYgO7Tt3TETQ5xxXmRw5E= github.com/go-logr/logr v1.2.4 h1:g01GSCwiDw2xSZfjJ2/T9M+S6pFdcNtFYsp+Y43HYDQ= github.com/go-logr/logr v1.2.4/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s= From 42d62550bf837bcf20f02f0a9461ef885d9b9930 Mon Sep 17 00:00:00 2001 From: ginuerzh Date: Fri, 12 Jan 2024 23:50:27 +0800 Subject: [PATCH 4/4] fix deadlock in websocket client conn --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 30f0922..019e29f 100644 --- a/go.mod +++ b/go.mod @@ -6,7 +6,7 @@ replace github.com/templexxx/cpu v0.0.7 => github.com/templexxx/cpu v0.0.10-0.20 require ( github.com/go-gost/core v0.0.0-20240103125300-5a427b4eaf99 - github.com/go-gost/x v0.0.0-20240108132220-c04c28e1fd78 + github.com/go-gost/x v0.0.0-20240112154622-01168e98467c github.com/judwhite/go-svc v1.2.1 ) diff --git a/go.sum b/go.sum index 3e70226..27c696a 100644 --- a/go.sum +++ b/go.sum @@ -61,8 +61,8 @@ github.com/go-gost/relay v0.4.1-0.20230916134211-828f314ddfe7 h1:qAG1OyjvdA5h221 github.com/go-gost/relay v0.4.1-0.20230916134211-828f314ddfe7/go.mod h1:lcX+23LCQ3khIeASBo+tJ/WbwXFO32/N5YN6ucuYTG8= github.com/go-gost/tls-dissector v0.0.2-0.20220408131628-aac992c27451 h1:xj8gUZGYO3nb5+6Bjw9+tsFkA9sYynrOvDvvC4uDV2I= github.com/go-gost/tls-dissector v0.0.2-0.20220408131628-aac992c27451/go.mod h1:/9QfdewqmHdaE362Hv5nDaSWLx3pCmtD870d6GaquXs= -github.com/go-gost/x v0.0.0-20240108132220-c04c28e1fd78 h1:6iZ2BxZpWxI80Opwpursps7U8pFsb9wl6ZFe+zmnBqU= -github.com/go-gost/x v0.0.0-20240108132220-c04c28e1fd78/go.mod h1:aZsf9kureYawzhBhxsl/IOTYgO7Tt3TETQ5xxXmRw5E= +github.com/go-gost/x v0.0.0-20240112154622-01168e98467c h1:0Qb2OwSvi80VlvlujOLbYsZ29P54HpmF1chSuMsY1K4= +github.com/go-gost/x v0.0.0-20240112154622-01168e98467c/go.mod h1:aZsf9kureYawzhBhxsl/IOTYgO7Tt3TETQ5xxXmRw5E= github.com/go-logr/logr v1.2.4 h1:g01GSCwiDw2xSZfjJ2/T9M+S6pFdcNtFYsp+Y43HYDQ= github.com/go-logr/logr v1.2.4/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s=