Docker container that powers the high scores page at nethack.jerryaldrichiii.com
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

72 lines
1.3 KiB

package main
import (
"fmt"
"html/template"
"log"
"net/http"
"nethack-high-scores/pkg/logparser"
"os"
)
type siteData struct {
ServerName string
Records []logparser.Record
}
func main() {
HTTP_PORT := 8080
if len(os.Args) != 2 {
fmt.Printf("USAGE: %v NETHACK_LOG_FILE\n", os.Args[0])
os.Exit(1)
}
logFile := os.Args[1]
if _, err := os.Open(logFile); err != nil {
panic(err)
}
http.HandleFunc("/", servePage)
log.Printf("Listening on :%v...", HTTP_PORT)
addr := fmt.Sprintf(":%v", HTTP_PORT)
log.Fatal(http.ListenAndServe(addr, nil))
}
func servePage(w http.ResponseWriter, r *http.Request) {
log.Printf(
"%s %s %s %s",
r.RemoteAddr, r.Method, r.URL, r.Header["User-Agent"],
)
// Error already handled in main()
f, _ := os.Open(os.Args[1])
records, errs := logparser.ParseLog(f)
if len(errs) > 0 {
panic(errs)
}
records = logparser.TopX(records, 10)
tmpl := template.New("index.gohtml")
tmpl = tmpl.Funcs(template.FuncMap{
"add": func(i int, x int) int {
return i + x
},
})
tmpl, err := tmpl.ParseFiles("./templates/index.gohtml")
if err != nil {
log.Fatal(err)
}
log.Printf("%#v", tmpl)
data := siteData{
ServerName: "nethack.jerryaldrichiii.com",
Records: records,
}
err = tmpl.Execute(w, data)
if err != nil {
log.Fatal(err)
}
}