From c45f148a888c0feb434f575e376bd12cc2bdd138 Mon Sep 17 00:00:00 2001 From: ginuerzh Date: Fri, 22 Nov 2024 22:51:16 +0800 Subject: [PATCH] add unix domain socket support for api & metrics services --- cmd/gost/config.go | 19 +++++++++++++++++-- cmd/gost/program.go | 18 +++++++++++++++--- go.mod | 2 +- go.sum | 4 ++-- 4 files changed, 35 insertions(+), 8 deletions(-) diff --git a/cmd/gost/config.go b/cmd/gost/config.go index 32f4f4a..c995f44 100644 --- a/cmd/gost/config.go +++ b/cmd/gost/config.go @@ -1,6 +1,8 @@ package main import ( + "strings" + "github.com/go-gost/core/auth" "github.com/go-gost/core/logger" "github.com/go-gost/core/service" @@ -166,8 +168,14 @@ func buildAPIService(cfg *config.APIConfig) (service.Service, error) { auther = xauth.AuthenticatorGroup(authers...) } + network := "tcp" + addr := cfg.Addr + if strings.HasPrefix(addr, "unix://") { + network = "unix" + addr = strings.TrimPrefix(addr, "unix://") + } return api.NewService( - cfg.Addr, + network, addr, api.PathPrefixOption(cfg.PathPrefix), api.AccessLogOption(cfg.AccessLog), api.AutherOption(auther), @@ -179,8 +187,15 @@ func buildMetricsService(cfg *config.MetricsConfig) (service.Service, error) { if cfg.Auther != "" { auther = registry.AutherRegistry().Get(cfg.Auther) } + + network := "tcp" + addr := cfg.Addr + if strings.HasPrefix(addr, "unix://") { + network = "unix" + addr = strings.TrimPrefix(addr, "unix://") + } return metrics.NewService( - cfg.Addr, + network, addr, metrics.PathOption(cfg.Path), metrics.AutherOption(auther), ) diff --git a/cmd/gost/program.go b/cmd/gost/program.go index 4b1dac5..1c01fb9 100644 --- a/cmd/gost/program.go +++ b/cmd/gost/program.go @@ -7,6 +7,7 @@ import ( "strings" "github.com/go-gost/core/logger" + "github.com/go-gost/core/service" "github.com/go-gost/x/config" "github.com/go-gost/x/config/cmd" "github.com/go-gost/x/config/parsing" @@ -18,7 +19,10 @@ import ( "github.com/judwhite/go-svc" ) -type program struct{} +type program struct { + apiSrv service.Service + metricSrv service.Service +} func (p *program) Init(env svc.Environment) error { cfg := &config.Config{} @@ -154,10 +158,11 @@ func (p *program) Start() error { if err != nil { return err } + p.apiSrv = s go func() { defer s.Close() log.Info("api service on ", s.Addr()) - log.Fatal(s.Serve()) + log.Error(s.Serve()) }() } if cfg.Profiling != nil { @@ -178,10 +183,11 @@ func (p *program) Start() error { if err != nil { log.Fatal(err) } + p.metricSrv = s go func() { defer s.Close() log.Info("metrics service on ", s.Addr()) - log.Fatal(s.Serve()) + log.Error(s.Serve()) }() } } @@ -201,6 +207,12 @@ func (p *program) Stop() error { srv.Close() logger.Default().Debugf("service %s shutdown", name) } + if p.apiSrv != nil { + p.apiSrv.Close() + } + if p.metricSrv != nil { + p.metricSrv.Close() + } return nil } diff --git a/go.mod b/go.mod index 9cefafa..8dde3b6 100644 --- a/go.mod +++ b/go.mod @@ -6,7 +6,7 @@ toolchain go1.22.2 require ( github.com/go-gost/core v0.1.11 - github.com/go-gost/x v0.2.18 + github.com/go-gost/x v0.2.19 github.com/judwhite/go-svc v1.2.1 ) diff --git a/go.sum b/go.sum index 0a31f55..0f7311c 100644 --- a/go.sum +++ b/go.sum @@ -63,8 +63,8 @@ github.com/go-gost/relay v0.5.0 h1:JG1tgy/KWiVXS0ukuVXvbM0kbYuJTWxYpJ5JwzsCf/c= github.com/go-gost/relay v0.5.0/go.mod h1:lcX+23LCQ3khIeASBo+tJ/WbwXFO32/N5YN6ucuYTG8= github.com/go-gost/tls-dissector v0.1.1 h1:2zUOTPzCQAUQ54Rpy0UEi3JPMQSYsIFSeFeKrzmkCoU= github.com/go-gost/tls-dissector v0.1.1/go.mod h1:/9QfdewqmHdaE362Hv5nDaSWLx3pCmtD870d6GaquXs= -github.com/go-gost/x v0.2.18 h1:qNUUHoQMw3PaSS9ATLamkpYFw3FHWFh1vdzlxu9U6Ag= -github.com/go-gost/x v0.2.18/go.mod h1:tRK1pmbgYAeAEKm0/1kByL/xhxPZrCVZr5rsufUwFd8= +github.com/go-gost/x v0.2.19 h1:5gw+11L6H707huiuzYKj9JpdPHFo9G7HoBXE3kP44Zg= +github.com/go-gost/x v0.2.19/go.mod h1:tRK1pmbgYAeAEKm0/1kByL/xhxPZrCVZr5rsufUwFd8= github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ= github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s=