From 883f06953a36f8bf441b1f3bddc752a52ccb4ce2 Mon Sep 17 00:00:00 2001 From: "A. Svensson" Date: Sun, 19 Jun 2016 16:51:09 +0200 Subject: [PATCH] Start cleaning up the updater. --- src/updater.go | 62 ++++++++++++++++++++------------------------------ src/utils.go | 36 ++++++++++------------------- 2 files changed, 37 insertions(+), 61 deletions(-) diff --git a/src/updater.go b/src/updater.go index 437999d..0c36c10 100644 --- a/src/updater.go +++ b/src/updater.go @@ -2,7 +2,11 @@ package ss13 import "time" -var updatedServers []string +var now = time.Now() + +func Now() time.Time { + return now.UTC() +} type RawServerData struct { Title string @@ -13,12 +17,18 @@ type RawServerData struct { } func (i *Instance) UpdateServers() { - reset() - tx := i.db.NewTransaction() + now = time.Now() + 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) for _, s := range polled { - i.updateServer(tx, s) + addServer(s) } scraped, e := i.ScrapePage() @@ -26,36 +36,27 @@ func (i *Instance) UpdateServers() { Log("Error scraping servers: %s", e) } else { for _, s := range scraped { - i.updateServer(tx, s) + addServer(s) } } 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.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 { var tmp []*RawServerData for _, old := range i.db.GetOldServers(Now()) { @@ -70,16 +71,3 @@ func (i *Instance) getOldServers() []*RawServerData { } 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) -} diff --git a/src/utils.go b/src/utils.go index 25283c7..d21920b 100644 --- a/src/utils.go +++ b/src/utils.go @@ -6,31 +6,19 @@ import ( "time" ) -var ( - now = time.Now() - - funcmap = template.FuncMap{ - // safe_href let's us use URLs with custom protocols - "safe_href": func(s string) template.HTMLAttr { - return template.HTMLAttr(`href="` + s + `"`) - }, - "inms": func(t time.Time) int64 { - return t.Unix() * 1000 - }, - "year": func() int { - return time.Now().Year() - }, - } -) +var funcmap = template.FuncMap{ + // safe_href let's us use URLs with custom protocols + "safe_href": func(s string) template.HTMLAttr { + return template.HTMLAttr(`href="` + s + `"`) + }, + "inms": func(t time.Time) int64 { + return t.Unix() * 1000 + }, + "year": func() int { + return time.Now().Year() + }, +} func Log(f string, args ...interface{}) { log.Printf(f+"\n", args...) } - -func ResetNow() { - now = time.Now() -} - -func Now() time.Time { - return now.UTC() -}