package main import ( "flag" "net/http" "os" "time" "shared-sqs/app/models" log "github.com/sirupsen/logrus" "shared-sqs/app/conf" "shared-sqs/app/gosqs" "shared-sqs/app/router" ) func main() { var filename string var debug bool var loglevel string flag.StringVar(&filename, "config", "", "config file location + name") flag.BoolVar(&debug, "debug", false, "set debug log level") flag.StringVar(&loglevel, "loglevel", "info", "log level (default info)") flag.Parse() log.SetFormatter(&log.JSONFormatter{}) log.SetOutput(os.Stdout) if debug { log.SetLevel(log.DebugLevel) } else { level, err := log.ParseLevel(loglevel) if err != nil { log.SetLevel(log.InfoLevel) log.Warnf("Failed to parse loglevel %v, defaulting to info", loglevel) } else { log.SetLevel(level) } } env := "Local" if flag.NArg() > 0 { env = flag.Arg(0) } portNumbers := conf.LoadYamlConfig(filename, env) if models.CurrentEnvironment.LogToFile { filename := models.CurrentEnvironment.LogFile file, err := os.OpenFile(filename, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666) if err == nil { log.SetOutput(file) } else { log.Infof("Failed to log to file: %s, using default stderr", filename) } } r := router.New() quit := make(chan bool, 0) go gosqs.PeriodicTasks(1*time.Second, quit) if len(portNumbers) == 1 { log.Warnf("GoAws listening on: 0.0.0.0:%s", portNumbers[0]) err := http.ListenAndServe("0.0.0.0:"+portNumbers[0], r) log.Fatal(err) } else if len(portNumbers) == 2 { go func() { log.Warnf("GoAws listening on: 0.0.0.0:%s", portNumbers[0]) err := http.ListenAndServe("0.0.0.0:"+portNumbers[0], r) log.Fatal(err) }() log.Warnf("GoAws listening on: 0.0.0.0:%s", portNumbers[1]) err := http.ListenAndServe("0.0.0.0:"+portNumbers[1], r) log.Fatal(err) } else { log.Fatal("Not enough or too many ports defined to start GoAws.") } }