package ss13
import (
"fmt"
"html/template"
"time"
"github.com/gorilla/mux"
)
type D map[string]interface{}
type Instance struct {
Debug bool
DB *DB
Config *Config
addr string
router *mux.Router
tmpls *template.Template
}
// Database models
type Server struct {
ID int
LastUpdated time.Time
Title string `sql:"type:varchar(64);unique"`
GameUrl string
SiteUrl string
PlayersCurrent int
PlayersAvg int
PlayersMin int
PlayersMax int
PlayersMon int
PlayersTue int
PlayersWed int
PlayersThu int
PlayersFri int
PlayersSat int
PlayersSun int
}
// Check if a server's last_updated time since now is greater or equal to X hours.
func (s *Server) TimeIsGreater(hours int) bool {
return int(time.Since(s.LastUpdated)/time.Hour) >= hours
}
// Return a formatted string of LastUpdated.
func (s *Server) Timestamp() string {
return s.LastUpdated.Format("2006-01-02 15:04 MST")
}
// Return a fancy string duration since LastUpdated.
func (s *Server) TimeSince() string {
d := time.Since(s.LastUpdated)
mins := int(d / time.Minute % 60)
hours := int(d / time.Hour % 24)
days := int(d / time.Hour / 24)
tmp := fmt.Sprintf("%d minutes", mins)
if hours > 1 {
tmp = fmt.Sprintf("%d hours, ", hours) + tmp
} else if hours == 1 {
tmp = fmt.Sprintf("%d hour, ", hours) + tmp
}
if days > 1 {
tmp = fmt.Sprintf("%d days, ", days) + tmp
} else if days == 1 {
tmp = fmt.Sprintf("%d day, ", days) + tmp
}
return tmp
}
type ServerPopulation struct {
ID int
Timestamp time.Time
Players int
ServerID int `sql:"index;type:integer REFERENCES servers(id) ON DELETE CASCADE ON UPDATE CASCADE"`
Server Server
}
// See https://github.com/jinzhu/gorm/issues/635 for why we have to manually add
// in a raw REFERENCES statement here.
// Hint: Foreign key creation is bugged when using gorm with sqlite.