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