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