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.
80 lines
1.9 KiB
80 lines
1.9 KiB
5 years ago
|
package main
|
||
|
|
||
|
import (
|
||
|
"flag"
|
||
|
"fmt"
|
||
|
"io/ioutil"
|
||
|
"log"
|
||
|
"net/http"
|
||
|
"os"
|
||
|
"os/exec"
|
||
|
|
||
|
"github.com/gorilla/mux"
|
||
|
"github.com/unixvoid/glogger"
|
||
|
)
|
||
|
|
||
|
var (
|
||
|
loglevel string
|
||
|
recordlocation string
|
||
|
reclistlocation string
|
||
|
port = 8080
|
||
|
)
|
||
|
|
||
|
func main() {
|
||
|
// init runtime args
|
||
|
flag.StringVar(&loglevel, "loglevel", "debug", loglevel)
|
||
|
flag.StringVar(&recordlocation, "recordlocation", "record", recordlocation)
|
||
|
flag.StringVar(&reclistlocation, "reclistlocation", "reclist", reclistlocation)
|
||
|
flag.Parse()
|
||
|
|
||
|
// init config file and logger
|
||
|
initLogger(loglevel)
|
||
|
|
||
|
// make sure record file exists
|
||
|
if _, err := os.Stat(recordlocation); os.IsNotExist(err) {
|
||
|
glogger.Info.Printf("record file not found in %s\n", recordlocation)
|
||
|
fmt.Printf("%s\n", err)
|
||
|
os.Exit(1)
|
||
|
}
|
||
|
// make sure reclist bin exists
|
||
|
if _, err := os.Stat(reclistlocation); os.IsNotExist(err) {
|
||
|
glogger.Info.Printf("reclist binary not found in %s\n", reclistlocation)
|
||
|
fmt.Printf("%s\n", err)
|
||
|
os.Exit(1)
|
||
|
}
|
||
|
|
||
|
// router
|
||
|
router := mux.NewRouter()
|
||
|
router.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
|
||
|
gethighscore(w, r)
|
||
|
}).Methods("GET")
|
||
|
|
||
|
glogger.Info.Println("nethack-score-api running http on", port)
|
||
|
log.Fatal(http.ListenAndServe(fmt.Sprintf(":%d", port), router))
|
||
|
}
|
||
|
|
||
|
func initLogger(loglevel string) {
|
||
|
// init logger
|
||
|
if loglevel == "debug" {
|
||
|
glogger.LogInit(os.Stdout, os.Stdout, os.Stdout, os.Stderr)
|
||
|
} else if loglevel == "cluster" {
|
||
|
glogger.LogInit(os.Stdout, os.Stdout, ioutil.Discard, os.Stderr)
|
||
|
} else if loglevel == "info" {
|
||
|
glogger.LogInit(os.Stdout, ioutil.Discard, ioutil.Discard, os.Stderr)
|
||
|
} else {
|
||
|
glogger.LogInit(ioutil.Discard, ioutil.Discard, ioutil.Discard, os.Stderr)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func gethighscore(w http.ResponseWriter, r *http.Request) {
|
||
|
// run script
|
||
|
output, err := exec.Command(reclistlocation,
|
||
|
"-f",
|
||
|
recordlocation).CombinedOutput()
|
||
|
if err != nil {
|
||
|
fmt.Printf("%s\n", err)
|
||
|
}
|
||
|
|
||
|
fmt.Fprintf(w, "%s\n", output)
|
||
|
}
|