chore(updater): internal/updater/loop subpackage
- Do not export updater interface - Export updater struct - Define local interfaces where needed - More restrictive updater loop interface in http control server - Inject `Updater` into updater loop as an interface
This commit is contained in:
@@ -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"
|
||||
|
||||
@@ -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{}
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
@@ -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,
|
||||
@@ -1,4 +1,4 @@
|
||||
package updater
|
||||
package loop
|
||||
|
||||
import (
|
||||
"context"
|
||||
@@ -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))
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user