Started cleaning up db.
This commit is contained in:
parent
883f06953a
commit
3ac516a822
13
src/db.go
13
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 {
|
||||
|
||||
@ -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{
|
||||
|
||||
@ -47,7 +47,6 @@ func New(debug bool, path string) (*Instance, error) {
|
||||
if e != nil {
|
||||
return nil, e
|
||||
}
|
||||
db.InitSchema()
|
||||
|
||||
i := Instance{
|
||||
Config: c,
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user