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 {
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 {

View File

@ -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{

View File

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