From de4a8960049d292fc657e64dcc63a153462743d2 Mon Sep 17 00:00:00 2001 From: ginuerzh Date: Wed, 25 Mar 2020 21:06:58 +0800 Subject: [PATCH] move reload to github.com/go-gost/reload --- cmd/gost/cfg.go | 9 ++++--- cmd/gost/route.go | 3 ++- go.mod | 1 + go.sum | 2 ++ reload.go | 65 ----------------------------------------------- resolver.go | 5 ++-- 6 files changed, 13 insertions(+), 72 deletions(-) delete mode 100644 reload.go diff --git a/cmd/gost/cfg.go b/cmd/gost/cfg.go index 5f9e4bd..5954d9d 100644 --- a/cmd/gost/cfg.go +++ b/cmd/gost/cfg.go @@ -13,6 +13,7 @@ import ( "strings" "github.com/ginuerzh/gost" + "github.com/go-gost/reload" ) var ( @@ -130,7 +131,7 @@ func parseAuthenticator(s string) (gost.Authenticator, error) { au := gost.NewLocalAuthenticator(nil) au.Reload(f) - go gost.PeriodReload(au, s) + go reload.PeriodReload(au, s) return au, nil } @@ -200,7 +201,7 @@ func parseBypass(s string) *gost.Bypass { bp := gost.NewBypass(reversed) bp.Reload(f) - go gost.PeriodReload(bp, s) + go reload.PeriodReload(bp, s) return bp } @@ -257,7 +258,7 @@ func parseResolver(cfg string) gost.Resolver { resolver := gost.NewResolver(0) resolver.Reload(f) - go gost.PeriodReload(resolver, cfg) + go reload.PeriodReload(resolver, cfg) return resolver } @@ -272,7 +273,7 @@ func parseHosts(s string) *gost.Hosts { hosts := gost.NewHosts() hosts.Reload(f) - go gost.PeriodReload(hosts, s) + go reload.PeriodReload(hosts, s) return hosts } diff --git a/cmd/gost/route.go b/cmd/gost/route.go index 7f22cd4..9426f30 100644 --- a/cmd/gost/route.go +++ b/cmd/gost/route.go @@ -12,6 +12,7 @@ import ( "github.com/ginuerzh/gost" "github.com/go-gost/log" + "github.com/go-gost/reload" ) type stringList []string @@ -76,7 +77,7 @@ func (r *route) parseChain() (*gost.Chain, error) { peerCfg.Reload(f) f.Close() - go gost.PeriodReload(peerCfg, cfg) + go reload.PeriodReload(peerCfg, cfg) } chain.AddNodeGroup(ngroup) diff --git a/go.mod b/go.mod index bd149ee..f1a52b5 100644 --- a/go.mod +++ b/go.mod @@ -18,6 +18,7 @@ require ( github.com/go-gost/bpool v1.0.0 github.com/go-gost/log v1.0.0 github.com/go-gost/relay v0.1.0 + github.com/go-gost/reload v1.0.0 github.com/gobwas/glob v0.2.3 github.com/golang/mock v1.2.0 // indirect github.com/google/gopacket v1.1.17 // indirect diff --git a/go.sum b/go.sum index 535bc7a..8063cd8 100644 --- a/go.sum +++ b/go.sum @@ -35,6 +35,8 @@ github.com/go-gost/log v1.0.0 h1:maSjjMvQqLSQYb0Ta5nJTdlRI+aiLMt6WIBYVxajJgs= github.com/go-gost/log v1.0.0/go.mod h1:FCOaaJQ7moHTlLxYk7dsFewlS68U9A1GG3OR+yXkF6s= github.com/go-gost/relay v0.1.0 h1:UOf2YwAzzaUjY5mdpMuLfSw0vz62iIFYk7oJQkuhlGw= github.com/go-gost/relay v0.1.0/go.mod h1:YFCpddLOFE3NlIkeDWRdEs8gL/GFsqXdtaf8SV5v4YQ= +github.com/go-gost/reload v1.0.0 h1:dcC3YwHXLlvow53UKH8gKhyguX0atkBV+/y7fHIGpCU= +github.com/go-gost/reload v1.0.0/go.mod h1:IVKerwSiS/YATAMeKRnmv3NhnIwFeLfXRTAyMsySnUM= github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y= github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8= github.com/golang/mock v1.2.0 h1:28o5sBqPkBsMGnC6b4MvE2TzSr5/AT4c/1fLqVGIwlk= diff --git a/reload.go b/reload.go deleted file mode 100644 index d8a6b34..0000000 --- a/reload.go +++ /dev/null @@ -1,65 +0,0 @@ -package gost - -import ( - "io" - "os" - "time" - - "github.com/go-gost/log" -) - -// Reloader is the interface for objects that support live reloading. -type Reloader interface { - Reload(r io.Reader) error - Period() time.Duration -} - -// Stoppable is the interface that indicates a Reloader can be stopped. -type Stoppable interface { - Stop() - Stopped() bool -} - -// PeriodReload reloads the config configFile periodically according to the period of the Reloader r. -func PeriodReload(r Reloader, configFile string) error { - if r == nil || configFile == "" { - return nil - } - - var lastMod time.Time - for { - if r.Period() < 0 { - log.Log("[reload] stopped:", configFile) - return nil - } - - f, err := os.Open(configFile) - if err != nil { - return err - } - - mt := lastMod - if finfo, err := f.Stat(); err == nil { - mt = finfo.ModTime() - } - - if !lastMod.IsZero() && !mt.Equal(lastMod) { - log.Log("[reload]", configFile) - if err := r.Reload(f); err != nil { - log.Logf("[reload] %s: %s", configFile, err) - } - } - f.Close() - lastMod = mt - - period := r.Period() - if period == 0 { - log.Log("[reload] disabled:", configFile) - return nil - } - if period < time.Second { - period = time.Second - } - <-time.After(period) - } -} diff --git a/resolver.go b/resolver.go index 8f388a9..25006e8 100644 --- a/resolver.go +++ b/resolver.go @@ -17,6 +17,7 @@ import ( "time" "github.com/go-gost/log" + "github.com/go-gost/reload" "github.com/miekg/dns" ) @@ -180,8 +181,8 @@ type Resolver interface { // ReloadResolver is resolover that support live reloading. type ReloadResolver interface { Resolver - Reloader - Stoppable + reload.Reloader + reload.Stoppable } type resolver struct {