add reload and plugin support for hop

This commit is contained in:
ginuerzh 2023-09-28 21:05:44 +08:00
parent 0d41f5edc8
commit 8a699e1906
3 changed files with 34 additions and 24 deletions

View File

@ -9,7 +9,17 @@ import (
"github.com/go-gost/core/service" "github.com/go-gost/core/service"
"github.com/go-gost/x/api" "github.com/go-gost/x/api"
"github.com/go-gost/x/config" "github.com/go-gost/x/config"
"github.com/go-gost/x/config/parsing" admission_parser "github.com/go-gost/x/config/parsing/admission"
auth_parser "github.com/go-gost/x/config/parsing/auth"
bypass_parser "github.com/go-gost/x/config/parsing/bypass"
chain_parser "github.com/go-gost/x/config/parsing/chain"
hop_parser "github.com/go-gost/x/config/parsing/hop"
hosts_parser "github.com/go-gost/x/config/parsing/hosts"
ingress_parser "github.com/go-gost/x/config/parsing/ingress"
limiter_parser "github.com/go-gost/x/config/parsing/limiter"
recorder_parser "github.com/go-gost/x/config/parsing/recorder"
resolver_parser "github.com/go-gost/x/config/parsing/resolver"
service_parser "github.com/go-gost/x/config/parsing/service"
xlogger "github.com/go-gost/x/logger" xlogger "github.com/go-gost/x/logger"
metrics "github.com/go-gost/x/metrics/service" metrics "github.com/go-gost/x/metrics/service"
"github.com/go-gost/x/registry" "github.com/go-gost/x/registry"
@ -24,7 +34,7 @@ func buildService(cfg *config.Config) (services []service.Service) {
log := logger.Default() log := logger.Default()
for _, autherCfg := range cfg.Authers { for _, autherCfg := range cfg.Authers {
if auther := parsing.ParseAuther(autherCfg); auther != nil { if auther := auth_parser.ParseAuther(autherCfg); auther != nil {
if err := registry.AutherRegistry().Register(autherCfg.Name, auther); err != nil { if err := registry.AutherRegistry().Register(autherCfg.Name, auther); err != nil {
log.Fatal(err) log.Fatal(err)
} }
@ -32,7 +42,7 @@ func buildService(cfg *config.Config) (services []service.Service) {
} }
for _, admissionCfg := range cfg.Admissions { for _, admissionCfg := range cfg.Admissions {
if adm := parsing.ParseAdmission(admissionCfg); adm != nil { if adm := admission_parser.ParseAdmission(admissionCfg); adm != nil {
if err := registry.AdmissionRegistry().Register(admissionCfg.Name, adm); err != nil { if err := registry.AdmissionRegistry().Register(admissionCfg.Name, adm); err != nil {
log.Fatal(err) log.Fatal(err)
} }
@ -40,7 +50,7 @@ func buildService(cfg *config.Config) (services []service.Service) {
} }
for _, bypassCfg := range cfg.Bypasses { for _, bypassCfg := range cfg.Bypasses {
if bp := parsing.ParseBypass(bypassCfg); bp != nil { if bp := bypass_parser.ParseBypass(bypassCfg); bp != nil {
if err := registry.BypassRegistry().Register(bypassCfg.Name, bp); err != nil { if err := registry.BypassRegistry().Register(bypassCfg.Name, bp); err != nil {
log.Fatal(err) log.Fatal(err)
} }
@ -48,7 +58,7 @@ func buildService(cfg *config.Config) (services []service.Service) {
} }
for _, resolverCfg := range cfg.Resolvers { for _, resolverCfg := range cfg.Resolvers {
r, err := parsing.ParseResolver(resolverCfg) r, err := resolver_parser.ParseResolver(resolverCfg)
if err != nil { if err != nil {
log.Fatal(err) log.Fatal(err)
} }
@ -60,7 +70,7 @@ func buildService(cfg *config.Config) (services []service.Service) {
} }
for _, hostsCfg := range cfg.Hosts { for _, hostsCfg := range cfg.Hosts {
if h := parsing.ParseHosts(hostsCfg); h != nil { if h := hosts_parser.ParseHostMapper(hostsCfg); h != nil {
if err := registry.HostsRegistry().Register(hostsCfg.Name, h); err != nil { if err := registry.HostsRegistry().Register(hostsCfg.Name, h); err != nil {
log.Fatal(err) log.Fatal(err)
} }
@ -68,7 +78,7 @@ func buildService(cfg *config.Config) (services []service.Service) {
} }
for _, ingressCfg := range cfg.Ingresses { for _, ingressCfg := range cfg.Ingresses {
if h := parsing.ParseIngress(ingressCfg); h != nil { if h := ingress_parser.ParseIngress(ingressCfg); h != nil {
if err := registry.IngressRegistry().Register(ingressCfg.Name, h); err != nil { if err := registry.IngressRegistry().Register(ingressCfg.Name, h); err != nil {
log.Fatal(err) log.Fatal(err)
} }
@ -76,7 +86,7 @@ func buildService(cfg *config.Config) (services []service.Service) {
} }
for _, recorderCfg := range cfg.Recorders { for _, recorderCfg := range cfg.Recorders {
if h := parsing.ParseRecorder(recorderCfg); h != nil { if h := recorder_parser.ParseRecorder(recorderCfg); h != nil {
if err := registry.RecorderRegistry().Register(recorderCfg.Name, h); err != nil { if err := registry.RecorderRegistry().Register(recorderCfg.Name, h); err != nil {
log.Fatal(err) log.Fatal(err)
} }
@ -84,28 +94,28 @@ func buildService(cfg *config.Config) (services []service.Service) {
} }
for _, limiterCfg := range cfg.Limiters { for _, limiterCfg := range cfg.Limiters {
if h := parsing.ParseTrafficLimiter(limiterCfg); h != nil { if h := limiter_parser.ParseTrafficLimiter(limiterCfg); h != nil {
if err := registry.TrafficLimiterRegistry().Register(limiterCfg.Name, h); err != nil { if err := registry.TrafficLimiterRegistry().Register(limiterCfg.Name, h); err != nil {
log.Fatal(err) log.Fatal(err)
} }
} }
} }
for _, limiterCfg := range cfg.CLimiters { for _, limiterCfg := range cfg.CLimiters {
if h := parsing.ParseConnLimiter(limiterCfg); h != nil { if h := limiter_parser.ParseConnLimiter(limiterCfg); h != nil {
if err := registry.ConnLimiterRegistry().Register(limiterCfg.Name, h); err != nil { if err := registry.ConnLimiterRegistry().Register(limiterCfg.Name, h); err != nil {
log.Fatal(err) log.Fatal(err)
} }
} }
} }
for _, limiterCfg := range cfg.RLimiters { for _, limiterCfg := range cfg.RLimiters {
if h := parsing.ParseRateLimiter(limiterCfg); h != nil { if h := limiter_parser.ParseRateLimiter(limiterCfg); h != nil {
if err := registry.RateLimiterRegistry().Register(limiterCfg.Name, h); err != nil { if err := registry.RateLimiterRegistry().Register(limiterCfg.Name, h); err != nil {
log.Fatal(err) log.Fatal(err)
} }
} }
} }
for _, hopCfg := range cfg.Hops { for _, hopCfg := range cfg.Hops {
hop, err := parsing.ParseHop(hopCfg) hop, err := hop_parser.ParseHop(hopCfg)
if err != nil { if err != nil {
log.Fatal(err) log.Fatal(err)
} }
@ -116,7 +126,7 @@ func buildService(cfg *config.Config) (services []service.Service) {
} }
} }
for _, chainCfg := range cfg.Chains { for _, chainCfg := range cfg.Chains {
c, err := parsing.ParseChain(chainCfg) c, err := chain_parser.ParseChain(chainCfg)
if err != nil { if err != nil {
log.Fatal(err) log.Fatal(err)
} }
@ -128,7 +138,7 @@ func buildService(cfg *config.Config) (services []service.Service) {
} }
for _, svcCfg := range cfg.Services { for _, svcCfg := range cfg.Services {
svc, err := parsing.ParseService(svcCfg) svc, err := service_parser.ParseService(svcCfg)
if err != nil { if err != nil {
log.Fatal(err) log.Fatal(err)
} }
@ -186,7 +196,7 @@ func logFromConfig(cfg *config.LogConfig) logger.Logger {
} }
func buildAPIService(cfg *config.APIConfig) (service.Service, error) { func buildAPIService(cfg *config.APIConfig) (service.Service, error) {
auther := parsing.ParseAutherFromAuth(cfg.Auth) auther := auth_parser.ParseAutherFromAuth(cfg.Auth)
if cfg.Auther != "" { if cfg.Auther != "" {
auther = registry.AutherRegistry().Get(cfg.Auther) auther = registry.AutherRegistry().Get(cfg.Auther)
} }

6
go.mod
View File

@ -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 replace github.com/templexxx/cpu v0.0.7 => github.com/templexxx/cpu v0.0.10-0.20211111114238-98168dcec14a
require ( require (
github.com/go-gost/core v0.0.0-20230920145336-6d0e88635be9 github.com/go-gost/core v0.0.0-20230928130125-b0bd45c1b862
github.com/go-gost/x v0.0.0-20230921115956-ddc3c9392e1d github.com/go-gost/x v0.0.0-20230928130415-ea585fc25d1f
github.com/judwhite/go-svc v1.2.1 github.com/judwhite/go-svc v1.2.1
gopkg.in/natefinch/lumberjack.v2 v2.0.0 gopkg.in/natefinch/lumberjack.v2 v2.0.0
) )
@ -28,7 +28,7 @@ require (
github.com/gin-gonic/gin v1.9.1 // indirect github.com/gin-gonic/gin v1.9.1 // indirect
github.com/go-gost/gosocks4 v0.0.1 // indirect github.com/go-gost/gosocks4 v0.0.1 // indirect
github.com/go-gost/gosocks5 v0.4.0 // indirect github.com/go-gost/gosocks5 v0.4.0 // indirect
github.com/go-gost/plugin v0.0.0-20230921115816-47001719099f // indirect github.com/go-gost/plugin v0.0.0-20230928130211-8bc0679b5c15 // indirect
github.com/go-gost/relay v0.4.1-0.20230916134211-828f314ddfe7 // 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-gost/tls-dissector v0.0.2-0.20220408131628-aac992c27451 // indirect
github.com/go-playground/locales v0.14.1 // indirect github.com/go-playground/locales v0.14.1 // indirect

12
go.sum
View File

@ -101,20 +101,20 @@ github.com/gin-gonic/gin v1.9.1/go.mod h1:hPrL7YrpYKXt5YId3A/Tnip5kqbEAP+KLuI3SU
github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
github.com/go-gost/core v0.0.0-20230920145336-6d0e88635be9 h1:VHka8LcdBJmM7Yv2bjQO5kctF0T9O4E/PVzgkdk0Vdo= github.com/go-gost/core v0.0.0-20230928130125-b0bd45c1b862 h1:hbCHyfYE96WZefTBitiL35FCYxHCgEWpS+W/5oCyEXk=
github.com/go-gost/core v0.0.0-20230920145336-6d0e88635be9/go.mod h1:ndkgWVYRLwupVaFFWv8ML1Nr8tD3xhHK245PLpUDg4E= github.com/go-gost/core v0.0.0-20230928130125-b0bd45c1b862/go.mod h1:ndkgWVYRLwupVaFFWv8ML1Nr8tD3xhHK245PLpUDg4E=
github.com/go-gost/gosocks4 v0.0.1 h1:+k1sec8HlELuQV7rWftIkmy8UijzUt2I6t+iMPlGB2s= 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/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 h1:EIrOEkpJez4gwHrMa33frA+hHXJyevjp47thpMQsJzI=
github.com/go-gost/gosocks5 v0.4.0/go.mod h1:1G6I7HP7VFVxveGkoK8mnprnJqSqJjdcASKsdUn4Pp4= github.com/go-gost/gosocks5 v0.4.0/go.mod h1:1G6I7HP7VFVxveGkoK8mnprnJqSqJjdcASKsdUn4Pp4=
github.com/go-gost/plugin v0.0.0-20230921115816-47001719099f h1:Z6k8xfvQv8PmrC++wV4BlzVv85iuGtHhL6QSzrF6m5Q= github.com/go-gost/plugin v0.0.0-20230928130211-8bc0679b5c15 h1:SKPbGuJUBKhh4qE2G5juT4PNMrzYH86itiY3TGwvYcs=
github.com/go-gost/plugin v0.0.0-20230921115816-47001719099f/go.mod h1:mM/RLNsVy2nz5PiOijuqLYR3LhMzyQ9Kh/p0rXybJoo= github.com/go-gost/plugin v0.0.0-20230928130211-8bc0679b5c15/go.mod h1:mM/RLNsVy2nz5PiOijuqLYR3LhMzyQ9Kh/p0rXybJoo=
github.com/go-gost/relay v0.4.1-0.20230916134211-828f314ddfe7 h1:qAG1OyjvdA5h221CfFSS3J359V3d2E7dJWyP29QoDSI= 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/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 h1:xj8gUZGYO3nb5+6Bjw9+tsFkA9sYynrOvDvvC4uDV2I=
github.com/go-gost/tls-dissector v0.0.2-0.20220408131628-aac992c27451/go.mod h1:/9QfdewqmHdaE362Hv5nDaSWLx3pCmtD870d6GaquXs= github.com/go-gost/tls-dissector v0.0.2-0.20220408131628-aac992c27451/go.mod h1:/9QfdewqmHdaE362Hv5nDaSWLx3pCmtD870d6GaquXs=
github.com/go-gost/x v0.0.0-20230921115956-ddc3c9392e1d h1:CcvAiJyJRePwGNkthSX2XMhgK8fQ3XvSCp/Oi0NcwRU= github.com/go-gost/x v0.0.0-20230928130415-ea585fc25d1f h1:k5aeEAiw35bJwYHBbKHWlYF6Up5XglN6MDo0UVi7xG4=
github.com/go-gost/x v0.0.0-20230921115956-ddc3c9392e1d/go.mod h1:1Z7dufNApXaRdwg4XW6TjPSoXUHZMw/yWoMO6+4vFcE= github.com/go-gost/x v0.0.0-20230928130415-ea585fc25d1f/go.mod h1:C1trZX4uveaL1igcIWCE88qAVaUBIj0tXGcOPMCre8Q=
github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY=