Run updates in a DB transaction.

This commit is contained in:
A. Svensson 2016-02-20 20:25:18 +01:00
parent 66cad28cf9
commit 3dfee907c1

View File

@ -3,6 +3,8 @@ package ss13
import ( import (
"fmt" "fmt"
"time" "time"
"github.com/jinzhu/gorm"
) )
var updatedservers []string var updatedservers []string
@ -20,6 +22,8 @@ type RawServerData struct {
func (i *Instance) UpdateServers() { func (i *Instance) UpdateServers() {
reset() reset()
tx := i.DB.Begin()
config, err := LoadConfig(SERVERS_CONFIG) config, err := LoadConfig(SERVERS_CONFIG)
if err != nil { if err != nil {
fmt.Printf("Unable to load servers to poll: %s\n", err) // TODO fmt.Printf("Unable to load servers to poll: %s\n", err) // TODO
@ -28,7 +32,7 @@ func (i *Instance) UpdateServers() {
fmt.Println("\nPolling servers...") fmt.Println("\nPolling servers...")
} }
for _, s := range PollServers(config.PollServers, config.Timeout) { for _, s := range PollServers(config.PollServers, config.Timeout) {
i.update_server(s) i.update_server(tx, s)
} }
} }
@ -36,20 +40,22 @@ func (i *Instance) UpdateServers() {
fmt.Println("\nScraping servers...") fmt.Println("\nScraping servers...")
} }
for _, s := range ScrapePage() { for _, s := range ScrapePage() {
i.update_server(s) i.update_server(tx, s)
} }
if i.Debug { if i.Debug {
fmt.Println("\nRemoving old servers...") fmt.Println("\nRemoving old servers...")
} }
RemoveOldServers(i.DB, Now()) RemoveOldServers(tx, Now())
if i.Debug { if i.Debug {
fmt.Println("\nUpdating inactive servers...") fmt.Println("\nUpdating inactive servers...")
} }
for _, s := range i.get_old_servers() { for _, s := range i.get_old_servers() {
i.update_server(s) i.update_server(tx, s)
} }
tx.Commit()
} }
func reset() { func reset() {
@ -86,7 +92,7 @@ func (i *Instance) get_old_servers() []*RawServerData {
return tmp return tmp
} }
func (i *Instance) update_server(s *RawServerData) { func (i *Instance) update_server(tx *gorm.DB, s *RawServerData) {
if isupdated(s.Title) { if isupdated(s.Title) {
return return
} }
@ -96,11 +102,11 @@ func (i *Instance) update_server(s *RawServerData) {
} }
// get server's db id (or create) // get server's db id (or create)
id := InsertOrSelect(i.DB, s) id := InsertOrSelect(tx, s)
// create new player history point // create new player history point
AddServerPopulation(i.DB, id, s) AddServerPopulation(tx, id, s)
// update server (urls and player stats) // update server (urls and player stats)
UpdateServerStats(i.DB, id, s) UpdateServerStats(tx, id, s)
} }