diff --git a/cmd/gluetun/main.go b/cmd/gluetun/main.go index 58db17c6..2c0b32c4 100644 --- a/cmd/gluetun/main.go +++ b/cmd/gluetun/main.go @@ -37,7 +37,7 @@ import ( "github.com/qdm12/gluetun/internal/shadowsocks" "github.com/qdm12/gluetun/internal/storage" "github.com/qdm12/gluetun/internal/tun" - "github.com/qdm12/gluetun/internal/updater" + updater "github.com/qdm12/gluetun/internal/updater/loop" "github.com/qdm12/gluetun/internal/vpn" "github.com/qdm12/golibs/command" "github.com/qdm12/goshutdown" diff --git a/internal/server/handler.go b/internal/server/handler.go index 25b4b518..3d126946 100644 --- a/internal/server/handler.go +++ b/internal/server/handler.go @@ -9,7 +9,6 @@ import ( "github.com/qdm12/gluetun/internal/models" "github.com/qdm12/gluetun/internal/portforward" "github.com/qdm12/gluetun/internal/publicip" - "github.com/qdm12/gluetun/internal/updater" "github.com/qdm12/gluetun/internal/vpn" ) @@ -18,7 +17,7 @@ func newHandler(ctx context.Context, logger infoWarner, logging bool, vpnLooper vpn.Looper, pfGetter portforward.Getter, unboundLooper dns.Looper, - updaterLooper updater.Looper, + updaterLooper UpdaterLooper, publicIPLooper publicip.Looper, ) http.Handler { handler := &handler{} diff --git a/internal/server/handlerv0.go b/internal/server/handlerv0.go index 10ab2132..93e6645d 100644 --- a/internal/server/handlerv0.go +++ b/internal/server/handlerv0.go @@ -6,12 +6,11 @@ import ( "github.com/qdm12/gluetun/internal/constants" "github.com/qdm12/gluetun/internal/dns" - "github.com/qdm12/gluetun/internal/updater" "github.com/qdm12/gluetun/internal/vpn" ) func newHandlerV0(ctx context.Context, logger infoWarner, - vpn vpn.Looper, dns dns.Looper, updater updater.Looper) http.Handler { + vpn vpn.Looper, dns dns.Looper, updater UpdaterLooper) http.Handler { return &handlerV0{ ctx: ctx, logger: logger, @@ -26,7 +25,7 @@ type handlerV0 struct { logger infoWarner vpn vpn.Looper dns dns.Looper - updater updater.Looper + updater UpdaterLooper } func (h *handlerV0) ServeHTTP(w http.ResponseWriter, r *http.Request) { diff --git a/internal/server/server.go b/internal/server/server.go index a1f007a8..b55d978b 100644 --- a/internal/server/server.go +++ b/internal/server/server.go @@ -10,14 +10,13 @@ import ( "github.com/qdm12/gluetun/internal/models" "github.com/qdm12/gluetun/internal/portforward" "github.com/qdm12/gluetun/internal/publicip" - "github.com/qdm12/gluetun/internal/updater" "github.com/qdm12/gluetun/internal/vpn" ) func New(ctx context.Context, address string, logEnabled bool, logger Logger, buildInfo models.BuildInformation, openvpnLooper vpn.Looper, pfGetter portforward.Getter, unboundLooper dns.Looper, - updaterLooper updater.Looper, publicIPLooper publicip.Looper) (server httpserver.Runner, err error) { + updaterLooper UpdaterLooper, publicIPLooper publicip.Looper) (server httpserver.Runner, err error) { handler := newHandler(ctx, logger, logEnabled, buildInfo, openvpnLooper, pfGetter, unboundLooper, updaterLooper, publicIPLooper) diff --git a/internal/server/updater.go b/internal/server/updater.go index 4fecaec1..d1037e53 100644 --- a/internal/server/updater.go +++ b/internal/server/updater.go @@ -6,12 +6,20 @@ import ( "net/http" "strings" - "github.com/qdm12/gluetun/internal/updater" + "github.com/qdm12/gluetun/internal/configuration/settings" + "github.com/qdm12/gluetun/internal/models" ) +type UpdaterLooper interface { + GetStatus() (status models.LoopStatus) + SetStatus(ctx context.Context, status models.LoopStatus) ( + outcome string, err error) + SetSettings(settings settings.Updater) (outcome string) +} + func newUpdaterHandler( ctx context.Context, - looper updater.Looper, + looper UpdaterLooper, warner warner) http.Handler { return &updaterHandler{ ctx: ctx, @@ -22,7 +30,7 @@ func newUpdaterHandler( type updaterHandler struct { ctx context.Context //nolint:containedctx - looper updater.Looper + looper UpdaterLooper warner warner } diff --git a/internal/updater/logger.go b/internal/updater/logger.go deleted file mode 100644 index 4c027f22..00000000 --- a/internal/updater/logger.go +++ /dev/null @@ -1,24 +0,0 @@ -package updater - -type Logger interface { - infoer - warner - errorer -} - -type infoErrorer interface { - infoer - errorer -} - -type infoer interface { - Info(s string) -} - -type warner interface { - Warn(s string) -} - -type errorer interface { - Error(s string) -} diff --git a/internal/updater/loop.go b/internal/updater/loop/loop.go similarity index 93% rename from internal/updater/loop.go rename to internal/updater/loop/loop.go index 93f13ea3..1c9eaca4 100644 --- a/internal/updater/loop.go +++ b/internal/updater/loop/loop.go @@ -1,4 +1,4 @@ -package updater +package loop import ( "context" @@ -10,6 +10,7 @@ import ( "github.com/qdm12/gluetun/internal/constants" "github.com/qdm12/gluetun/internal/models" "github.com/qdm12/gluetun/internal/storage" + "github.com/qdm12/gluetun/internal/updater" ) type Looper interface { @@ -22,13 +23,17 @@ type Looper interface { SetSettings(settings settings.Updater) (outcome string) } +type Updater interface { + UpdateServers(ctx context.Context) (allServers models.AllServers, err error) +} + type looper struct { state state // Objects updater Updater flusher storage.Flusher setAllServers func(allServers models.AllServers) - logger infoErrorer + logger Logger // Internal channels and locks loopLock sync.Mutex start chan struct{} @@ -44,6 +49,12 @@ type looper struct { const defaultBackoffTime = 5 * time.Second +type Logger interface { + Info(s string) + Warn(s string) + Error(s string) +} + func NewLooper(settings settings.Updater, currentServers models.AllServers, flusher storage.Flusher, setAllServers func(allServers models.AllServers), client *http.Client, logger Logger) Looper { @@ -52,7 +63,7 @@ func NewLooper(settings settings.Updater, currentServers models.AllServers, status: constants.Stopped, settings: settings, }, - updater: New(settings, client, currentServers, logger), + updater: updater.New(settings, client, currentServers, logger), flusher: flusher, setAllServers: setAllServers, logger: logger, diff --git a/internal/updater/state.go b/internal/updater/loop/state.go similarity index 99% rename from internal/updater/state.go rename to internal/updater/loop/state.go index 42bf3637..b6972172 100644 --- a/internal/updater/state.go +++ b/internal/updater/loop/state.go @@ -1,4 +1,4 @@ -package updater +package loop import ( "context" diff --git a/internal/updater/providers.go b/internal/updater/providers.go index aeff0f91..568a1b87 100644 --- a/internal/updater/providers.go +++ b/internal/updater/providers.go @@ -30,7 +30,7 @@ import ( windscribe "github.com/qdm12/gluetun/internal/provider/windscribe/updater" ) -func (u *updater) updateProvider(ctx context.Context, provider string) ( +func (u *Updater) updateProvider(ctx context.Context, provider string) ( warnings []string, err error) { existingServers := u.getProviderServers(provider) minServers := getMinServers(existingServers) @@ -47,7 +47,7 @@ func (u *updater) updateProvider(ctx context.Context, provider string) ( return warnings, nil } -func (u *updater) getServers(ctx context.Context, provider string, +func (u *Updater) getServers(ctx context.Context, provider string, minServers int) (servers []models.Server, warnings []string, err error) { switch provider { case providers.Custom: @@ -101,7 +101,7 @@ func (u *updater) getServers(ctx context.Context, provider string, } } -func (u *updater) getProviderServers(provider string) (servers []models.Server) { +func (u *Updater) getProviderServers(provider string) (servers []models.Server) { providerServers, ok := u.servers.ProviderToServers[provider] if !ok { panic(fmt.Sprintf("provider %s is unknown", provider)) @@ -114,7 +114,7 @@ func getMinServers(servers []models.Server) (minServers int) { return int(minRatio * float64(len(servers))) } -func (u *updater) patchProvider(provider string, servers []models.Server) { +func (u *Updater) patchProvider(provider string, servers []models.Server) { providerServers, ok := u.servers.ProviderToServers[provider] if !ok { panic(fmt.Sprintf("provider %s is unknown", provider)) diff --git a/internal/updater/updater.go b/internal/updater/updater.go index a806a3ea..93a7f86a 100644 --- a/internal/updater/updater.go +++ b/internal/updater/updater.go @@ -14,11 +14,7 @@ import ( "golang.org/x/text/language" ) -type Updater interface { - UpdateServers(ctx context.Context) (allServers models.AllServers, err error) -} - -type updater struct { +type Updater struct { // configuration options settings.Updater @@ -33,10 +29,16 @@ type updater struct { unzipper unzip.Unzipper } +type Logger interface { + Info(s string) + Warn(s string) + Error(s string) +} + func New(settings settings.Updater, httpClient *http.Client, - currentServers models.AllServers, logger Logger) Updater { + currentServers models.AllServers, logger Logger) *Updater { unzipper := unzip.New(httpClient) - return &updater{ + return &Updater{ logger: logger, timeNow: time.Now, presolver: resolver.NewParallelResolver(settings.DNSAddress.String()), @@ -49,7 +51,7 @@ func New(settings settings.Updater, httpClient *http.Client, var caser = cases.Title(language.English) //nolint:gochecknoglobals -func (u *updater) UpdateServers(ctx context.Context) (allServers models.AllServers, err error) { +func (u *Updater) UpdateServers(ctx context.Context) (allServers models.AllServers, err error) { for _, provider := range u.options.Providers { u.logger.Info("updating " + caser.String(provider) + " servers...") // TODO support servers offering only TCP or only UDP