Start cleaning up the updater.

This commit is contained in:
A. Svensson 2016-06-19 16:51:09 +02:00
parent adc85bc815
commit 883f06953a
2 changed files with 37 additions and 61 deletions

View File

@ -2,7 +2,11 @@ package ss13
import "time" import "time"
var updatedServers []string var now = time.Now()
func Now() time.Time {
return now.UTC()
}
type RawServerData struct { type RawServerData struct {
Title string Title string
@ -13,12 +17,18 @@ type RawServerData struct {
} }
func (i *Instance) UpdateServers() { func (i *Instance) UpdateServers() {
reset() now = time.Now()
tx := i.db.NewTransaction() servers := make(map[string]*RawServerData)
addServer := func(s *RawServerData) {
if _, exists := servers[s.Title]; exists {
return
}
servers[s.Title] = s
}
polled := i.PollServers(i.Config.Servers, i.Config.UpdateTimeout) polled := i.PollServers(i.Config.Servers, i.Config.UpdateTimeout)
for _, s := range polled { for _, s := range polled {
i.updateServer(tx, s) addServer(s)
} }
scraped, e := i.ScrapePage() scraped, e := i.ScrapePage()
@ -26,36 +36,27 @@ func (i *Instance) UpdateServers() {
Log("Error scraping servers: %s", e) Log("Error scraping servers: %s", e)
} else { } else {
for _, s := range scraped { for _, s := range scraped {
i.updateServer(tx, s) addServer(s)
} }
} }
for _, s := range i.getOldServers() { for _, s := range i.getOldServers() {
i.updateServer(tx, s) addServer(s)
} }
tx := i.db.NewTransaction()
for _, s := range servers {
// get server's db id (or create)
id := tx.InsertOrSelect(s)
// create new player history point
tx.AddServerPopulation(id, s)
// update server (urls and player stats)
tx.UpdateServerStats(id, s)
}
tx.RemoveOldServers(Now()) tx.RemoveOldServers(Now())
tx.Commit() tx.Commit()
} }
func reset() {
// Have to reset some stuff between each update.
updatedServers = *new([]string)
ResetNow()
}
func isUpdated(title string) bool {
// Prevent low pop. servers, with identical name as a high pop. server,
// from fucking with another server's history.
for _, t := range updatedServers {
if title == t {
return true
}
}
updatedServers = append(updatedServers, title)
return false
}
func (i *Instance) getOldServers() []*RawServerData { func (i *Instance) getOldServers() []*RawServerData {
var tmp []*RawServerData var tmp []*RawServerData
for _, old := range i.db.GetOldServers(Now()) { for _, old := range i.db.GetOldServers(Now()) {
@ -70,16 +71,3 @@ func (i *Instance) getOldServers() []*RawServerData {
} }
return tmp return tmp
} }
func (i *Instance) updateServer(tx *DB, s *RawServerData) {
if isUpdated(s.Title) {
return
}
// get server's db id (or create)
id := tx.InsertOrSelect(s)
// create new player history point
tx.AddServerPopulation(id, s)
// update server (urls and player stats)
tx.UpdateServerStats(id, s)
}

View File

@ -6,10 +6,7 @@ import (
"time" "time"
) )
var ( var funcmap = template.FuncMap{
now = time.Now()
funcmap = template.FuncMap{
// safe_href let's us use URLs with custom protocols // safe_href let's us use URLs with custom protocols
"safe_href": func(s string) template.HTMLAttr { "safe_href": func(s string) template.HTMLAttr {
return template.HTMLAttr(`href="` + s + `"`) return template.HTMLAttr(`href="` + s + `"`)
@ -21,16 +18,7 @@ var (
return time.Now().Year() return time.Now().Year()
}, },
} }
)
func Log(f string, args ...interface{}) { func Log(f string, args ...interface{}) {
log.Printf(f+"\n", args...) log.Printf(f+"\n", args...)
} }
func ResetNow() {
now = time.Now()
}
func Now() time.Time {
return now.UTC()
}