Started cleaning up db.

This commit is contained in:
A. Svensson 2016-06-19 18:10:54 +02:00
parent 883f06953a
commit 3ac516a822
3 changed files with 17 additions and 12 deletions

View File

@ -18,12 +18,9 @@ func OpenSqliteDB(args ...interface{}) (*DB, error) {
if e != nil { if e != nil {
return nil, e return nil, e
} }
return &DB{db}, nil
}
func (db *DB) InitSchema() {
db.AutoMigrate(&Server{}) db.AutoMigrate(&Server{})
db.AutoMigrate(&ServerPopulation{}) db.AutoMigrate(&ServerPopulation{})
return &DB{db}, nil
} }
func (db *DB) NewTransaction() *DB { func (db *DB) NewTransaction() *DB {
@ -77,21 +74,21 @@ func (db *DB) InsertOrSelect(s *RawServerData) int {
return tmp.ID 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 var tmp Server
db.Where("id = ?", id).First(&tmp) db.Where("id = ?", id).First(&tmp)
pop := ServerPopulation{ pop := ServerPopulation{
Timestamp: Now(), Timestamp: now,
Players: s.Players, Players: s.Players,
Server: tmp, Server: tmp,
} }
db.Create(&pop) 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 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) 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() rows, err := db.Table("server_populations").Where("server_id = ? AND timestamp > ?", tmp.ID, period).Select("timestamp, players").Order("timestamp desc").Rows()
if err != nil { if err != nil {

View File

@ -1,6 +1,9 @@
package ss13 package ss13
import "time" import (
"fmt"
"time"
)
var now = time.Now() var now = time.Now()
@ -21,16 +24,19 @@ func (i *Instance) UpdateServers() {
servers := make(map[string]*RawServerData) servers := make(map[string]*RawServerData)
addServer := func(s *RawServerData) { addServer := func(s *RawServerData) {
if _, exists := servers[s.Title]; exists { if _, exists := servers[s.Title]; exists {
fmt.Println("Already existed:", s.Title)
return return
} }
servers[s.Title] = s servers[s.Title] = s
} }
fmt.Println("polling")
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 {
addServer(s) addServer(s)
} }
fmt.Println("scraping")
scraped, e := i.ScrapePage() scraped, e := i.ScrapePage()
if e != nil { if e != nil {
Log("Error scraping servers: %s", e) Log("Error scraping servers: %s", e)
@ -40,24 +46,27 @@ func (i *Instance) UpdateServers() {
} }
} }
fmt.Println("oldies")
for _, s := range i.getOldServers() { for _, s := range i.getOldServers() {
addServer(s) addServer(s)
} }
tx := i.db.NewTransaction() tx := i.db.NewTransaction()
for _, s := range servers { for _, s := range servers {
fmt.Println("Updating:", s.Title)
// get server's db id (or create) // get server's db id (or create)
id := tx.InsertOrSelect(s) id := tx.InsertOrSelect(s)
// create new player history point // create new player history point
tx.AddServerPopulation(id, s) tx.AddServerPopulation(id, s, now)
// update server (urls and player stats) // update server (urls and player stats)
tx.UpdateServerStats(id, s) tx.UpdateServerStats(id, s, now)
} }
tx.RemoveOldServers(Now()) tx.RemoveOldServers(Now())
tx.Commit() tx.Commit()
} }
func (i *Instance) getOldServers() []*RawServerData { func (i *Instance) getOldServers() []*RawServerData {
// TODO: there's some bug that makes this func return all servers?
var tmp []*RawServerData var tmp []*RawServerData
for _, old := range i.db.GetOldServers(Now()) { for _, old := range i.db.GetOldServers(Now()) {
s := RawServerData{ s := RawServerData{

View File

@ -47,7 +47,6 @@ func New(debug bool, path string) (*Instance, error) {
if e != nil { if e != nil {
return nil, e return nil, e
} }
db.InitSchema()
i := Instance{ i := Instance{
Config: c, Config: c,