Fix the stupid DB functions and embed gorm instead.
This commit is contained in:
parent
3dfee907c1
commit
5a10cdecd9
30
src/db.go
30
src/db.go
@ -9,25 +9,33 @@ import (
|
|||||||
_ "github.com/mattn/go-sqlite3"
|
_ "github.com/mattn/go-sqlite3"
|
||||||
)
|
)
|
||||||
|
|
||||||
func OpenSqliteDB(args ...interface{}) *gorm.DB {
|
type DB struct {
|
||||||
|
*gorm.DB
|
||||||
|
}
|
||||||
|
|
||||||
|
func OpenSqliteDB(args ...interface{}) *DB {
|
||||||
var e error
|
var e error
|
||||||
db, e := gorm.Open("sqlite3", args...)
|
db, e := gorm.Open("sqlite3", args...)
|
||||||
check_error(e)
|
check_error(e)
|
||||||
return &db
|
return &DB{&db}
|
||||||
}
|
}
|
||||||
|
|
||||||
func InitSchema(db *gorm.DB) {
|
func (db *DB) InitSchema() {
|
||||||
db.AutoMigrate(&Server{})
|
db.AutoMigrate(&Server{})
|
||||||
db.AutoMigrate(&ServerPopulation{})
|
db.AutoMigrate(&ServerPopulation{})
|
||||||
}
|
}
|
||||||
|
|
||||||
func AllServers(db *gorm.DB) []*Server {
|
func (db *DB) NewTransaction() *DB {
|
||||||
|
return &DB{db.Begin()}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (db *DB) AllServers() []*Server {
|
||||||
var tmp []*Server
|
var tmp []*Server
|
||||||
db.Order("players_current desc, last_updated desc, title").Find(&tmp)
|
db.Order("players_current desc, last_updated desc, title").Find(&tmp)
|
||||||
return tmp
|
return tmp
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetServer(db *gorm.DB, id int) (*Server, error) {
|
func (db *DB) GetServer(id int) (*Server, error) {
|
||||||
var tmp Server
|
var tmp Server
|
||||||
if db.First(&tmp, id).RecordNotFound() {
|
if db.First(&tmp, id).RecordNotFound() {
|
||||||
return nil, fmt.Errorf("Server not found")
|
return nil, fmt.Errorf("Server not found")
|
||||||
@ -35,24 +43,24 @@ func GetServer(db *gorm.DB, id int) (*Server, error) {
|
|||||||
return &tmp, nil
|
return &tmp, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetOldServers(db *gorm.DB, ts time.Time) []*Server {
|
func (db *DB) GetOldServers(ts time.Time) []*Server {
|
||||||
var tmp []*Server
|
var tmp []*Server
|
||||||
db.Where("last_updated < ?", ts).Find(&tmp)
|
db.Where("last_updated < ?", ts).Find(&tmp)
|
||||||
return tmp
|
return tmp
|
||||||
}
|
}
|
||||||
|
|
||||||
func RemoveOldServers(db *gorm.DB, ts time.Time) {
|
func (db *DB) RemoveOldServers(ts time.Time) {
|
||||||
db.Where("last_updated < datetime(?, '-7 days')", ts).Delete(Server{})
|
db.Where("last_updated < datetime(?, '-7 days')", ts).Delete(Server{})
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetServerPopulation(db *gorm.DB, id int, d time.Duration) []*ServerPopulation {
|
func (db *DB) GetServerPopulation(id int, d time.Duration) []*ServerPopulation {
|
||||||
var tmp []*ServerPopulation
|
var tmp []*ServerPopulation
|
||||||
t := time.Now().Add(-d)
|
t := time.Now().Add(-d)
|
||||||
db.Order("timestamp desc, server_id").Where("server_id = ? and timestamp > ?", id, t).Find(&tmp)
|
db.Order("timestamp desc, server_id").Where("server_id = ? and timestamp > ?", id, t).Find(&tmp)
|
||||||
return tmp
|
return tmp
|
||||||
}
|
}
|
||||||
|
|
||||||
func InsertOrSelect(db *gorm.DB, s *RawServerData) int {
|
func (db *DB) InsertOrSelect(s *RawServerData) int {
|
||||||
var tmp Server
|
var tmp Server
|
||||||
newserver := Server{
|
newserver := Server{
|
||||||
LastUpdated: s.Timestamp,
|
LastUpdated: s.Timestamp,
|
||||||
@ -68,7 +76,7 @@ func InsertOrSelect(db *gorm.DB, s *RawServerData) int {
|
|||||||
return tmp.ID
|
return tmp.ID
|
||||||
}
|
}
|
||||||
|
|
||||||
func AddServerPopulation(db *gorm.DB, id int, s *RawServerData) {
|
func (db *DB) AddServerPopulation(id int, s *RawServerData) {
|
||||||
var tmp Server
|
var tmp Server
|
||||||
db.Where("id = ?", id).First(&tmp)
|
db.Where("id = ?", id).First(&tmp)
|
||||||
pop := ServerPopulation{
|
pop := ServerPopulation{
|
||||||
@ -79,7 +87,7 @@ func AddServerPopulation(db *gorm.DB, id int, s *RawServerData) {
|
|||||||
db.Create(&pop)
|
db.Create(&pop)
|
||||||
}
|
}
|
||||||
|
|
||||||
func UpdateServerStats(db *gorm.DB, id int, s *RawServerData) {
|
func (db *DB) UpdateServerStats(id int, s *RawServerData) {
|
||||||
var tmp Server
|
var tmp Server
|
||||||
|
|
||||||
period := Now().Add(-time.Duration(30*24) * time.Hour)
|
period := Now().Add(-time.Duration(30*24) * time.Hour)
|
||||||
|
|||||||
@ -5,13 +5,12 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
"github.com/jinzhu/gorm"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
type Instance struct {
|
type Instance struct {
|
||||||
// Settings required by the user.
|
// Settings required by the user.
|
||||||
Debug bool
|
Debug bool
|
||||||
DB *gorm.DB
|
DB *DB
|
||||||
|
|
||||||
// Internal stuff
|
// Internal stuff
|
||||||
addr string
|
addr string
|
||||||
|
|||||||
@ -3,8 +3,6 @@ package ss13
|
|||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/jinzhu/gorm"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
var updatedservers []string
|
var updatedservers []string
|
||||||
@ -22,7 +20,7 @@ type RawServerData struct {
|
|||||||
func (i *Instance) UpdateServers() {
|
func (i *Instance) UpdateServers() {
|
||||||
reset()
|
reset()
|
||||||
|
|
||||||
tx := i.DB.Begin()
|
tx := i.DB.NewTransaction()
|
||||||
|
|
||||||
config, err := LoadConfig(SERVERS_CONFIG)
|
config, err := LoadConfig(SERVERS_CONFIG)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -46,7 +44,7 @@ func (i *Instance) UpdateServers() {
|
|||||||
if i.Debug {
|
if i.Debug {
|
||||||
fmt.Println("\nRemoving old servers...")
|
fmt.Println("\nRemoving old servers...")
|
||||||
}
|
}
|
||||||
RemoveOldServers(tx, Now())
|
tx.RemoveOldServers(Now())
|
||||||
|
|
||||||
if i.Debug {
|
if i.Debug {
|
||||||
fmt.Println("\nUpdating inactive servers...")
|
fmt.Println("\nUpdating inactive servers...")
|
||||||
@ -79,7 +77,7 @@ func isupdated(title string) bool {
|
|||||||
|
|
||||||
func (i *Instance) get_old_servers() []*RawServerData {
|
func (i *Instance) get_old_servers() []*RawServerData {
|
||||||
var tmp []*RawServerData
|
var tmp []*RawServerData
|
||||||
for _, old := range GetOldServers(i.DB, Now()) {
|
for _, old := range i.DB.GetOldServers(Now()) {
|
||||||
s := RawServerData{
|
s := RawServerData{
|
||||||
Title: old.Title,
|
Title: old.Title,
|
||||||
Game_url: old.GameUrl,
|
Game_url: old.GameUrl,
|
||||||
@ -92,7 +90,7 @@ func (i *Instance) get_old_servers() []*RawServerData {
|
|||||||
return tmp
|
return tmp
|
||||||
}
|
}
|
||||||
|
|
||||||
func (i *Instance) update_server(tx *gorm.DB, s *RawServerData) {
|
func (i *Instance) update_server(tx *DB, s *RawServerData) {
|
||||||
if isupdated(s.Title) {
|
if isupdated(s.Title) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -102,11 +100,11 @@ func (i *Instance) update_server(tx *gorm.DB, s *RawServerData) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// get server's db id (or create)
|
// get server's db id (or create)
|
||||||
id := InsertOrSelect(tx, s)
|
id := tx.InsertOrSelect(s)
|
||||||
|
|
||||||
// create new player history point
|
// create new player history point
|
||||||
AddServerPopulation(tx, id, s)
|
tx.AddServerPopulation(id, s)
|
||||||
|
|
||||||
// update server (urls and player stats)
|
// update server (urls and player stats)
|
||||||
UpdateServerStats(tx, id, s)
|
tx.UpdateServerStats(id, s)
|
||||||
}
|
}
|
||||||
|
|||||||
10
src/web.go
10
src/web.go
@ -10,7 +10,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func (i *Instance) Init() {
|
func (i *Instance) Init() {
|
||||||
InitSchema(i.DB)
|
i.DB.InitSchema()
|
||||||
SetDebug(i.Debug) // TODO: get rid of this stupid debug thing
|
SetDebug(i.Debug) // TODO: get rid of this stupid debug thing
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -54,7 +54,7 @@ func (i *Instance) Serve(addr string) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (i *Instance) server_index(c *gin.Context) {
|
func (i *Instance) server_index(c *gin.Context) {
|
||||||
servers := AllServers(i.DB)
|
servers := i.DB.AllServers()
|
||||||
c.HTML(http.StatusOK, "server_index.html", gin.H{
|
c.HTML(http.StatusOK, "server_index.html", gin.H{
|
||||||
"pagetitle": "Index",
|
"pagetitle": "Index",
|
||||||
"servers": servers,
|
"servers": servers,
|
||||||
@ -64,7 +64,7 @@ func (i *Instance) server_index(c *gin.Context) {
|
|||||||
func (i *Instance) server_detail(c *gin.Context) {
|
func (i *Instance) server_detail(c *gin.Context) {
|
||||||
id, err := strconv.ParseInt(c.Param("server_id"), 10, 0)
|
id, err := strconv.ParseInt(c.Param("server_id"), 10, 0)
|
||||||
check_error(err)
|
check_error(err)
|
||||||
s, err := GetServer(i.DB, int(id))
|
s, err := i.DB.GetServer(int(id))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// TODO
|
// TODO
|
||||||
//c.HTML(http.StatusNotFound, "error_404.html", nil)
|
//c.HTML(http.StatusNotFound, "error_404.html", nil)
|
||||||
@ -87,8 +87,8 @@ func (i *Instance) server_detail(c *gin.Context) {
|
|||||||
c.HTML(http.StatusOK, "server_detail.html", gin.H{
|
c.HTML(http.StatusOK, "server_detail.html", gin.H{
|
||||||
"pagetitle": s.Title,
|
"pagetitle": s.Title,
|
||||||
"server": s,
|
"server": s,
|
||||||
"weekhistory": GetServerPopulation(i.DB, int(id), time.Duration(7*24+12)*time.Hour),
|
"weekhistory": i.DB.GetServerPopulation(int(id), time.Duration(7*24+12)*time.Hour),
|
||||||
"monthhistory": GetServerPopulation(i.DB, int(id), time.Duration(31*24)*time.Hour),
|
"monthhistory": i.DB.GetServerPopulation(int(id), time.Duration(31*24)*time.Hour),
|
||||||
"weekdayavg": weekdayavg,
|
"weekdayavg": weekdayavg,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user