Chromagies/main.go

108 lines
2.1 KiB
Go

package main
import (
"chromagies/src/api"
"chromagies/src/config"
"fmt"
"log"
"net/http"
"os"
"os/signal"
"syscall"
"time"
"github.com/gorilla/mux"
)
var router *mux.Router
var logFile *os.File
func main() {
startTime := time.Now()
log.SetOutput(os.Stdout)
log.Println("============================================================")
log.Println("Starting server...")
go handleStopSignal()
initConfig()
startLogger()
initRouter()
stopTime := time.Now()
log.Printf("Server ready in %d microseconds\n", stopTime.Sub(startTime).Microseconds())
var conf config.Server = (config.GetConfig()).Server
http.ListenAndServe(fmt.Sprintf("%s:%s", conf.IP, conf.Port), router)
stopServer()
}
func startLogger() {
var conf config.Logger = (config.GetConfig()).Logger
if conf.Output != "" {
var err error
logFile, err = os.OpenFile(conf.Output, os.O_RDWR|os.O_APPEND|os.O_CREATE, 0666)
if err != nil {
log.Printf("Output file \"%s\" un-openable : %s", conf.Output, err)
return
}
log.Printf("Switching logs to output file \"%s\"\nStopping to log in the console", conf.Output)
log.SetOutput(logFile)
log.Println("============================================================")
log.Printf("Hi there ! Server is starting...")
}
}
func initConfig() {
var err error
err = config.ReadConfigFile()
if err != nil {
err = config.CreateConfigFile()
if err == nil {
err = config.ReadConfigFile()
}
}
if err != nil {
log.Fatal("Cannot read/write config file !")
}
}
func initRouter() {
router = mux.NewRouter()
// routeur.NotFoundHandler = TODO
api.Init(router)
router.PathPrefix("/static/").Handler(http.StripPrefix("/static/", http.FileServer(http.Dir("./static/"))))
}
func handleStopSignal() {
sigs := make(chan os.Signal, 1)
signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)
<-sigs
close(sigs)
stopServer()
}
func stopServer() {
log.Println("Stopping server...")
// Close everything
if logFile != nil {
log.Println("Closing log file, giving back log output to console")
logFile.Close()
log.SetOutput(os.Stdout)
}
log.Println("Server stopped")
os.Exit(0)
}