ss13_se/handlers.go

145 lines
3.2 KiB
Go

package ss13_se
import (
"fmt"
"net/http"
"time"
)
func (a *App) pageIndex(w http.ResponseWriter, r *http.Request, vars handlerVars) error {
servers, err := a.store.GetServers()
if err != nil {
return err
}
// Remove the internal entry used to count total players
index := -1
for i, s := range servers {
if s.Title == internalServerTitle {
index = i
break
}
}
if index > -1 {
servers = append(servers[:index], servers[index+1:]...)
}
return a.templates["index"].Execute(w, map[string]interface{}{
"Servers": servers,
"Hub": a.hub,
})
}
func (a *App) pageNews(w http.ResponseWriter, r *http.Request, vars handlerVars) error {
return a.templates["news"].Execute(w, map[string]interface{}{
"Reddit": a.news,
"Hub": a.hub,
})
}
func (a *App) pageServer(w http.ResponseWriter, r *http.Request, vars handlerVars) error {
id := vars["id"]
server, err := a.store.GetServer(id)
if err != nil {
// TODO: handle and log the error properly
return HttpError{
Status: 404,
Err: fmt.Errorf("server not found"),
}
}
if server.Title == internalServerTitle {
server.Title = "Global stats"
}
return a.templates["server"].Execute(w, map[string]interface{}{
"Server": server,
"Hub": a.hub,
})
}
func (a *App) pageDailyChart(w http.ResponseWriter, r *http.Request, vars handlerVars) error {
id := vars["id"]
points, err := a.store.GetSingleServerHistory(id, 1)
if err != nil {
return err
}
if len(points) < 1 {
return HttpError{
Status: 404,
Err: fmt.Errorf("server not found"),
}
}
c := makeHistoryChart(true, points)
return a.renderChart(w, c)
}
func (a *App) pageWeeklyChart(w http.ResponseWriter, r *http.Request, vars handlerVars) error {
id := vars["id"]
points, err := a.store.GetSingleServerHistory(id, 6)
if err != nil {
return err
}
if len(points) < 1 {
return HttpError{
Status: 404,
Err: fmt.Errorf("server not found"),
}
}
c := makeHistoryChart(false, points)
return a.renderChart(w, c)
}
func (a *App) pageAverageDailyChart(w http.ResponseWriter, r *http.Request, vars handlerVars) error {
id := vars["id"]
points, err := a.store.GetSingleServerHistory(id, 30)
if err != nil {
return err
}
if len(points) < 1 {
return HttpError{
Status: 404,
Err: fmt.Errorf("server not found"),
}
}
days := make(map[int][]int)
for _, p := range points {
d := int(p.Time.Weekday())
days[d] = append(days[d], p.Players)
}
formatter := func(i int, f float64) string {
d := time.Weekday(i)
return fmt.Sprintf("%s", d)
}
c := makeAverageChart(days, formatter)
return a.renderChart(w, c)
}
func (a *App) pageAverageHourlyChart(w http.ResponseWriter, r *http.Request, vars handlerVars) error {
id := vars["id"]
points, err := a.store.GetSingleServerHistory(id, 30)
if err != nil {
return err
}
if len(points) < 1 {
return HttpError{
Status: 404,
Err: fmt.Errorf("server not found"),
}
}
hours := make(map[int][]int)
for _, p := range points {
h := p.Time.Hour()
hours[h] = append(hours[h], p.Players)
}
formatter := func(i int, f float64) string {
return fmt.Sprintf("%02d:00", i)
}
c := makeAverageChart(hours, formatter)
return a.renderChart(w, c)
}