diff --git a/src/db.go b/src/db.go index fcd9e1d..5f2998b 100644 --- a/src/db.go +++ b/src/db.go @@ -18,12 +18,9 @@ func OpenSqliteDB(args ...interface{}) (*DB, error) { if e != nil { return nil, e } - return &DB{db}, nil -} - -func (db *DB) InitSchema() { db.AutoMigrate(&Server{}) db.AutoMigrate(&ServerPopulation{}) + return &DB{db}, nil } func (db *DB) NewTransaction() *DB { @@ -77,21 +74,21 @@ func (db *DB) InsertOrSelect(s *RawServerData) int { return tmp.ID } -func (db *DB) AddServerPopulation(id int, s *RawServerData) { +func (db *DB) AddServerPopulation(id int, s *RawServerData, now time.Time) { var tmp Server db.Where("id = ?", id).First(&tmp) pop := ServerPopulation{ - Timestamp: Now(), + Timestamp: now, Players: s.Players, Server: tmp, } db.Create(&pop) } -func (db *DB) UpdateServerStats(id int, s *RawServerData) { +func (db *DB) UpdateServerStats(id int, s *RawServerData, now time.Time) { var tmp Server - period := Now().Add(-time.Duration(30*24) * time.Hour) + period := now.Add(-time.Duration(30*24) * time.Hour) db.Where("id = ?", id).First(&tmp) rows, err := db.Table("server_populations").Where("server_id = ? AND timestamp > ?", tmp.ID, period).Select("timestamp, players").Order("timestamp desc").Rows() if err != nil { diff --git a/src/updater.go b/src/updater.go index 0c36c10..51b6e3a 100644 --- a/src/updater.go +++ b/src/updater.go @@ -1,6 +1,9 @@ package ss13 -import "time" +import ( + "fmt" + "time" +) var now = time.Now() @@ -21,16 +24,19 @@ func (i *Instance) UpdateServers() { servers := make(map[string]*RawServerData) addServer := func(s *RawServerData) { if _, exists := servers[s.Title]; exists { + fmt.Println("Already existed:", s.Title) return } servers[s.Title] = s } + fmt.Println("polling") polled := i.PollServers(i.Config.Servers, i.Config.UpdateTimeout) for _, s := range polled { addServer(s) } + fmt.Println("scraping") scraped, e := i.ScrapePage() if e != nil { Log("Error scraping servers: %s", e) @@ -40,24 +46,27 @@ func (i *Instance) UpdateServers() { } } + fmt.Println("oldies") for _, s := range i.getOldServers() { addServer(s) } tx := i.db.NewTransaction() for _, s := range servers { + fmt.Println("Updating:", s.Title) // get server's db id (or create) id := tx.InsertOrSelect(s) // create new player history point - tx.AddServerPopulation(id, s) + tx.AddServerPopulation(id, s, now) // update server (urls and player stats) - tx.UpdateServerStats(id, s) + tx.UpdateServerStats(id, s, now) } tx.RemoveOldServers(Now()) tx.Commit() } func (i *Instance) getOldServers() []*RawServerData { + // TODO: there's some bug that makes this func return all servers? var tmp []*RawServerData for _, old := range i.db.GetOldServers(Now()) { s := RawServerData{ diff --git a/src/web.go b/src/web.go index 0f243eb..4ab3da0 100644 --- a/src/web.go +++ b/src/web.go @@ -47,7 +47,6 @@ func New(debug bool, path string) (*Instance, error) { if e != nil { return nil, e } - db.InitSchema() i := Instance{ Config: c,