75 lines
1.7 KiB
Go
75 lines
1.7 KiB
Go
package main
|
|
|
|
import (
|
|
"flag"
|
|
"fmt"
|
|
"github.com/jar3b/concron/src/tasks"
|
|
"github.com/jar3b/logrus-levelpad-formatter"
|
|
"github.com/julienschmidt/httprouter"
|
|
log "github.com/sirupsen/logrus"
|
|
"net/http"
|
|
)
|
|
|
|
func healthHandler(w http.ResponseWriter, r *http.Request, ps httprouter.Params) {
|
|
w.WriteHeader(200)
|
|
w.Write([]byte("OK"))
|
|
}
|
|
|
|
func initLog(debug bool) {
|
|
// Log as JSON instead of the default ASCII formatter.
|
|
log.SetFormatter(&levelpad.Formatter{
|
|
TimestampFormat: "2006-01-02 15:04:05.000",
|
|
LogFormat: "[%lvl%][%time%] %msg%\n",
|
|
LevelPad: 8,
|
|
})
|
|
|
|
if debug {
|
|
log.SetLevel(log.DebugLevel)
|
|
} else {
|
|
log.SetLevel(log.InfoLevel)
|
|
}
|
|
}
|
|
|
|
func main() {
|
|
// command arguments
|
|
port := flag.Int("p", 8080, "HTTP server port")
|
|
debug := flag.Bool("debug", false, "debug mode")
|
|
configFile := flag.String("c", "tasks.yaml", "config file location")
|
|
flag.Parse()
|
|
|
|
initLog(*debug)
|
|
|
|
// manage tasks
|
|
taskList, err := tasks.LoadTasks(*configFile)
|
|
if err != nil {
|
|
log.Fatalf("cannot load %s: %v", *configFile, err)
|
|
return
|
|
}
|
|
|
|
// start scheduler
|
|
sched, err := tasks.NewScheduler()
|
|
if err != nil {
|
|
log.Fatalf("cannot initialize scheduler: %v", err)
|
|
return
|
|
}
|
|
if err = sched.AddTasks(taskList.Tasks); err != nil {
|
|
log.Fatalf("cannot add task list to scheduler: %v", err)
|
|
return
|
|
}
|
|
if err = sched.Start(); err != nil {
|
|
log.Fatalf("cannot start scheduler: %v", err)
|
|
return
|
|
}
|
|
|
|
// setup http router
|
|
router := httprouter.New()
|
|
router.GET("/healthz", healthHandler)
|
|
|
|
// start HTTP server
|
|
log.Infof("concron was started on :%d", *port)
|
|
err = http.ListenAndServe(fmt.Sprintf(":%d", *port), router)
|
|
if err != nil {
|
|
log.Errorf("cannot start concron http server", err)
|
|
}
|
|
}
|