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 {
|
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 {
|
||||||
|
|||||||
@ -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{
|
||||||
|
|||||||
@ -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,
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user