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:
Quentin McGaw
2022-05-28 16:03:59 +00:00
parent 991d75a1d0
commit 292813831d
10 changed files with 45 additions and 51 deletions

View File

@@ -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)
}

View File

@@ -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,

View File

@@ -1,4 +1,4 @@
package updater
package loop
import (
"context"

View File

@@ -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))

View File

@@ -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