From d710ef9beafc0bb2bbd72c13ea8999cc880c7933 Mon Sep 17 00:00:00 2001 From: "A. Svensson" Date: Sun, 19 Jun 2016 14:22:19 +0200 Subject: [PATCH] Refactor ss13.go into main.go and a much cleaner state. --- main.go | 64 +++++++++++++++++++++++++++++ ss13.go | 122 -------------------------------------------------------- 2 files changed, 64 insertions(+), 122 deletions(-) create mode 100644 main.go delete mode 100644 ss13.go diff --git a/main.go b/main.go new file mode 100644 index 0000000..dee7eed --- /dev/null +++ b/main.go @@ -0,0 +1,64 @@ +package main + +import ( + "flag" + "log" + "time" + + "github.com/lmas/ss13_se/src" +) + +var ( + fAddr = flag.String("addr", ":8000", "address to listen on, for the web server") + fDatabase = flag.String("database", "./ss13.db", "database file") + fDebug = flag.Bool("debug", false, "run in debug mode") + fPrivateServers = flag.String("servers", "./servers.json", "file with a list of private servers to poll") + fTimeout = flag.Int("timeout", 15, "time (in minutes) between each update") + fVerbose = flag.Bool("verbose", false, "show verbose messages") +) + +func main() { + flag.Parse() + + db, e := ss13.OpenSqliteDB(*fDatabase) + CheckError(e) + + ins := &ss13.Instance{ + Debug: *fDebug, + DB: db, + PrivServersFile: *fPrivateServers, + } + ins.Init() + + td := time.Duration(*fTimeout) * time.Minute + go func() { + if *fVerbose { + Log("Updating servers every %s", td) + } + for { + start := time.Now() + ins.UpdateServers() + dur := time.Since(start) + if *fVerbose { + Log("Update completed in %s", dur) + } + time.Sleep(td) + } + }() + + if *fVerbose { + Log("Listening on %s", *fAddr) + } + e = ins.Serve(*fAddr) + CheckError(e) +} + +func Log(f string, args ...interface{}) { + log.Printf(f+"\n", args...) +} + +func CheckError(e error) { + if e != nil { + panic(e) + } +} diff --git a/ss13.go b/ss13.go deleted file mode 100644 index d038b79..0000000 --- a/ss13.go +++ /dev/null @@ -1,122 +0,0 @@ -package main - -import ( - "fmt" - "os" - "time" - - "github.com/codegangsta/cli" - "github.com/lmas/ss13_se/src" -) - -func main() { - app := cli.NewApp() - app.Version = ss13.VERSION - app.Usage = "Web server for showing stats for SS13 servers." - app.Flags = []cli.Flag{ - cli.BoolFlag{ - Name: "debug", - Usage: "Run in debug mode", - }, - cli.BoolFlag{ - Name: "verbose", - Usage: "Show verbose messages", - }, - cli.StringFlag{ - Name: "addr", - Usage: "Set the listen address for the web server", - Value: ":8000", - }, - cli.BoolFlag{ - Name: "daemon", - Usage: "Continuously run when using the update command", - }, - cli.IntFlag{ - Name: "timeout", - Usage: "Time (in minutes) between each update in daemon mode", - Value: 15, - }, - cli.StringFlag{ - Name: "private-servers", - Usage: "JSON file with a list of private servers to poll", - Value: "./servers.json", - }, - cli.StringFlag{ - Name: "database", - Usage: "Database file", - Value: "./ss13.db", - }, - } - app.Commands = []cli.Command{ - { - Name: "run", - Usage: "Run the web server", - Action: run_server, - }, - { - Name: "update", - Usage: "Update the server stats", - Action: update_stats, - }, - } - - app.Run(os.Args) -} - -func run_server(c *cli.Context) { - if c.GlobalBool("verbose") { - fmt.Printf("Listening on %s.\n\n", c.GlobalString("addr")) - } - - db, e := ss13.OpenSqliteDB(c.GlobalString("database")) - if ss13.LogError(e) { - return - } - - instance := &ss13.Instance{ - Debug: c.GlobalBool("debug"), - DB: db, - PrivServersFile: c.GlobalString("private-servers"), - } - instance.Init() - e = instance.Serve(c.GlobalString("addr")) - ss13.LogError(e) -} - -func update_stats(c *cli.Context) { - td := time.Duration(c.GlobalInt("timeout")) * time.Minute - if c.GlobalBool("verbose") { - if c.GlobalBool("daemon") { - fmt.Printf("Running updates every %v minutes\n", c.GlobalInt("timeout")) - } else { - fmt.Println("Updating...") - } - } - - db, e := ss13.OpenSqliteDB(c.GlobalString("database")) - if ss13.LogError(e) { - return - } - - instance := &ss13.Instance{ - Debug: c.GlobalBool("debug"), - DB: db, - PrivServersFile: c.GlobalString("private-servers"), - } - instance.Init() - - for { - start := time.Now() - instance.UpdateServers() - stop := time.Now() - if c.GlobalBool("verbose") { - fmt.Printf("Update completed in %v\n", stop.Sub(start)) - } - - if !c.GlobalBool("daemon") { - return - } - fmt.Println("Next at ", time.Now().Add(td)) - time.Sleep(td) - } -}