Start cleaning up the updater.
This commit is contained in:
parent
adc85bc815
commit
883f06953a
@ -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)
|
||||
}
|
||||
|
||||
36
src/utils.go
36
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()
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user