feat(updater): Configurable min ratio
- `UPDATER_MIN_RATIO` variable - `-minratio` flag for CLI operation
This commit is contained in:
@@ -13,7 +13,7 @@ import (
|
||||
)
|
||||
|
||||
type Updater interface {
|
||||
UpdateServers(ctx context.Context, providers []string) (err error)
|
||||
UpdateServers(ctx context.Context, providers []string, minRatio float64) (err error)
|
||||
}
|
||||
|
||||
type Loop struct {
|
||||
@@ -97,7 +97,7 @@ func (l *Loop) Run(ctx context.Context, done chan<- struct{}) {
|
||||
runWg.Add(1)
|
||||
go func() {
|
||||
defer runWg.Done()
|
||||
err := l.updater.UpdateServers(updateCtx, settings.Providers)
|
||||
err := l.updater.UpdateServers(updateCtx, settings.Providers, settings.MinRatio)
|
||||
if err != nil {
|
||||
if updateCtx.Err() == nil {
|
||||
errorCh <- err
|
||||
|
||||
@@ -12,10 +12,11 @@ type Provider interface {
|
||||
FetchServers(ctx context.Context, minServers int) (servers []models.Server, err error)
|
||||
}
|
||||
|
||||
func (u *Updater) updateProvider(ctx context.Context, provider Provider) (err error) {
|
||||
func (u *Updater) updateProvider(ctx context.Context, provider Provider,
|
||||
minRatio float64) (err error) {
|
||||
providerName := provider.Name()
|
||||
existingServersCount := u.storage.GetServersCount(providerName)
|
||||
minServers := getMinServers(existingServersCount)
|
||||
minServers := int(minRatio * float64(existingServersCount))
|
||||
servers, err := provider.FetchServers(ctx, minServers)
|
||||
if err != nil {
|
||||
return fmt.Errorf("cannot get servers: %w", err)
|
||||
@@ -35,8 +36,3 @@ func (u *Updater) updateProvider(ctx context.Context, provider Provider) (err er
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func getMinServers(existingServersCount int) (minServers int) {
|
||||
const minRatio = 0.8
|
||||
return int(minRatio * float64(existingServersCount))
|
||||
}
|
||||
|
||||
@@ -37,7 +37,8 @@ func New(httpClient *http.Client, storage Storage,
|
||||
}
|
||||
}
|
||||
|
||||
func (u *Updater) UpdateServers(ctx context.Context, providers []string) (err error) {
|
||||
func (u *Updater) UpdateServers(ctx context.Context, providers []string,
|
||||
minRatio float64) (err error) {
|
||||
caser := cases.Title(language.English)
|
||||
for _, providerName := range providers {
|
||||
u.logger.Info("updating " + caser.String(providerName) + " servers...")
|
||||
@@ -45,7 +46,7 @@ func (u *Updater) UpdateServers(ctx context.Context, providers []string) (err er
|
||||
fetcher := u.providers.Get(providerName)
|
||||
// TODO support servers offering only TCP or only UDP
|
||||
// for NordVPN and PureVPN
|
||||
err := u.updateProvider(ctx, fetcher)
|
||||
err := u.updateProvider(ctx, fetcher, minRatio)
|
||||
if err == nil {
|
||||
continue
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user