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
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)
|
|
}
|
|
}
|
|
|