Files
gluetun/internal/storage/merge.go
Quentin McGaw bd0868d764 chore(all): provider to servers map in allServers
- Simplify formatting CLI
- Simplify updater code
- Simplify filter choices for config validation
- Simplify all servers deep copying
- Custom JSON marshaling methods for `AllServers`
- Simplify provider constructor switch
- Simplify storage merging
- Simplify storage reading and extraction
- Simplify updating code
2022-05-27 16:17:53 +00:00

56 lines
1.6 KiB
Go

package storage
import (
"strconv"
"time"
"github.com/qdm12/gluetun/internal/constants/providers"
"github.com/qdm12/gluetun/internal/models"
)
func (s *Storage) logVersionDiff(provider string, hardcodedVersion, persistedVersion uint16) {
message := provider + " servers from file discarded because they have version " +
strconv.Itoa(int(persistedVersion)) +
" and hardcoded servers have version " +
strconv.Itoa(int(hardcodedVersion))
s.logger.Info(message)
}
func (s *Storage) logTimeDiff(provider string, persistedUnix, hardcodedUnix int64) {
diff := time.Unix(persistedUnix, 0).Sub(time.Unix(hardcodedUnix, 0))
if diff < 0 {
diff = -diff
}
diff = diff.Truncate(time.Second)
message := "Using " + provider + " servers from file which are " +
diff.String() + " more recent"
s.logger.Info(message)
}
func (s *Storage) mergeServers(hardcoded, persisted models.AllServers) models.AllServers {
allProviders := providers.All()
merged := models.AllServers{
Version: hardcoded.Version,
ProviderToServers: make(map[string]models.Servers, len(allProviders)),
}
for _, provider := range allProviders {
hardcodedServers := hardcoded.ProviderToServers[provider]
persistedServers := persisted.ProviderToServers[provider]
merged.ProviderToServers[provider] = s.mergeProviderServers(provider,
hardcodedServers, persistedServers)
}
return merged
}
func (s *Storage) mergeProviderServers(provider string,
hardcoded, persisted models.Servers) (merged models.Servers) {
if persisted.Timestamp <= hardcoded.Timestamp {
return hardcoded
}
s.logTimeDiff(provider, persisted.Timestamp, hardcoded.Timestamp)
return persisted
}