hdx/cmd/hdxd/main.go

117 lines
1.9 KiB
Go

package main
import (
"fmt"
"log"
"math/rand"
"net/http"
"os"
"os/signal"
"time"
"github.com/gorilla/context"
"github.com/kelseyhightower/envconfig"
"github.com/spf13/cobra"
"s.mcquay.me/dm/hdx"
)
type Config struct {
Host string
Port int
DBHost string
DBName string
DBUser string
}
func init() {
rand.Seed(time.Now().UnixNano())
}
func main() {
var host string
var port int
var run = &cobra.Command{
Use: "run",
Short: "run command",
Long: `run chipd with given options`,
Run: func(cmd *cobra.Command, args []string) {
config := &Config{
DBHost: "localhost",
DBName: "hdx",
DBUser: "dm",
}
err := envconfig.Process("hdxd", config)
if err != nil {
log.Fatal(err)
}
if host != "" {
config.Host = host
}
if port != -1 {
config.Port = port
} else {
if config.Port == 0 {
config.Port = 8080
}
}
log.Printf("%+v", config)
sigs := make(chan os.Signal, 1)
signal.Notify(sigs, os.Interrupt, os.Kill)
go func() {
s := <-sigs
log.Printf("signal: %+v", s)
os.Exit(1)
}()
sm := http.NewServeMux()
_, err = hdx.NewServer(
sm,
config.DBHost,
config.DBName,
config.DBUser,
"",
)
if err != nil {
log.Fatalf("problem initializing hdxd server: %+v", err)
}
hostname := "localhost"
if config.Host == "" {
hostname, err = os.Hostname()
if err != nil {
log.Printf("problem getting hostname:", err)
}
}
log.Printf("serving at: http://%s:%d/", hostname, config.Port)
addr := fmt.Sprintf("%s:%d", config.Host, config.Port)
err = http.ListenAndServe(addr, context.ClearHandler(sm))
if err != nil {
log.Printf("%+v", err)
os.Exit(1)
}
},
}
run.Flags().StringVarP(
&host,
"host",
"n",
"",
"hostname",
)
run.Flags().IntVarP(
&port,
"port",
"p",
-1,
"port",
)
var rootCmd = &cobra.Command{Use: "app"}
rootCmd.AddCommand(run)
rootCmd.Execute()
}