2021-05-08 00:59:42 +00:00
|
|
|
package updater
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"context"
|
|
|
|
|
"fmt"
|
|
|
|
|
|
2022-05-27 00:59:47 +00:00
|
|
|
"github.com/qdm12/gluetun/internal/models"
|
2021-05-08 00:59:42 +00:00
|
|
|
)
|
|
|
|
|
|
2022-06-09 23:47:12 +00:00
|
|
|
type Provider interface {
|
|
|
|
|
Name() string
|
|
|
|
|
FetchServers(ctx context.Context, minServers int) (servers []models.Server, err error)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (u *Updater) updateProvider(ctx context.Context, provider Provider) (err error) {
|
|
|
|
|
providerName := provider.Name()
|
|
|
|
|
existingServersCount := u.storage.GetServersCount(providerName)
|
2022-06-05 14:58:46 +00:00
|
|
|
minServers := getMinServers(existingServersCount)
|
2022-06-09 23:47:12 +00:00
|
|
|
servers, err := provider.FetchServers(ctx, minServers)
|
2022-05-27 00:59:47 +00:00
|
|
|
if err != nil {
|
2022-06-05 14:58:46 +00:00
|
|
|
return fmt.Errorf("cannot get servers: %w", err)
|
2022-05-27 00:59:47 +00:00
|
|
|
}
|
|
|
|
|
|
2022-06-09 23:47:12 +00:00
|
|
|
if u.storage.ServersAreEqual(providerName, servers) {
|
2022-05-28 20:58:50 +00:00
|
|
|
return nil
|
2022-05-27 00:59:47 +00:00
|
|
|
}
|
|
|
|
|
|
2022-06-05 14:58:46 +00:00
|
|
|
// Note the servers variable must NOT BE MUTATED after this call,
|
|
|
|
|
// since the implementation does not deep copy the servers.
|
|
|
|
|
// TODO set in storage in provider updater directly, server by server,
|
|
|
|
|
// to avoid accumulating server data in memory.
|
2022-06-09 23:47:12 +00:00
|
|
|
err = u.storage.SetServers(providerName, servers)
|
2022-06-05 14:58:46 +00:00
|
|
|
if err != nil {
|
|
|
|
|
return fmt.Errorf("cannot set servers to storage: %w", err)
|
|
|
|
|
}
|
2022-05-28 20:58:50 +00:00
|
|
|
return nil
|
2022-05-27 00:59:47 +00:00
|
|
|
}
|
|
|
|
|
|
2022-06-05 14:58:46 +00:00
|
|
|
func getMinServers(existingServersCount int) (minServers int) {
|
2022-05-27 00:59:47 +00:00
|
|
|
const minRatio = 0.8
|
2022-06-05 14:58:46 +00:00
|
|
|
return int(minRatio * float64(existingServersCount))
|
2021-05-08 00:59:42 +00:00
|
|
|
}
|