cronsun/bin/web/server.go

89 lines
1.7 KiB
Go
Raw Normal View History

2017-01-09 02:32:14 +00:00
package main
import (
2017-05-12 08:47:13 +00:00
"flag"
slog "log"
2017-01-09 02:32:14 +00:00
"net"
2017-04-06 08:50:07 +00:00
"time"
2017-01-09 02:32:14 +00:00
"github.com/cockroachdb/cmux"
2017-05-12 08:47:13 +00:00
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
2017-01-09 02:32:14 +00:00
2017-05-12 07:38:50 +00:00
"github.com/shunfei/cronsun"
2017-05-09 10:27:32 +00:00
"github.com/shunfei/cronsun/conf"
2017-05-10 12:04:11 +00:00
"github.com/shunfei/cronsun/event"
2017-05-12 07:38:50 +00:00
"github.com/shunfei/cronsun/log"
2017-05-09 10:27:32 +00:00
"github.com/shunfei/cronsun/web"
2017-01-09 02:32:14 +00:00
)
2017-05-12 08:47:13 +00:00
var (
2017-06-30 01:53:47 +00:00
level = flag.Int("l", 0, "log level, -1:debug, 0:info, 1:warn, 2:error")
2017-05-12 08:47:13 +00:00
)
2017-01-09 02:32:14 +00:00
func main() {
2017-05-12 08:47:13 +00:00
flag.Parse()
lcf := zap.NewDevelopmentConfig()
lcf.Level.SetLevel(zapcore.Level(*level))
lcf.Development = false
2017-06-30 01:53:47 +00:00
logger, err := lcf.Build(zap.AddCallerSkip(1))
2017-05-12 08:47:13 +00:00
if err != nil {
slog.Fatalln("new log err:", err.Error())
}
log.SetLogger(logger.Sugar())
2017-05-12 06:48:24 +00:00
if err := cronsun.Init(); err != nil {
2017-05-12 07:38:50 +00:00
log.Errorf(err.Error())
2017-01-09 10:51:52 +00:00
return
}
2017-01-09 02:32:14 +00:00
l, err := net.Listen("tcp", conf.Config.Web.BindAddr)
if err != nil {
2017-05-12 07:38:50 +00:00
log.Errorf(err.Error())
2017-01-09 03:10:55 +00:00
return
2017-01-09 02:32:14 +00:00
}
// Create a cmux.
m := cmux.New(l)
httpL := m.Match(cmux.HTTP1Fast())
httpServer, err := web.InitServer()
2017-01-09 02:32:14 +00:00
if err != nil {
2017-05-12 07:38:50 +00:00
log.Errorf(err.Error())
2017-01-09 03:10:55 +00:00
return
2017-01-09 02:32:14 +00:00
}
if conf.Config.Mail.Enable {
2017-05-12 06:48:24 +00:00
var noticer cronsun.Noticer
if len(conf.Config.Mail.HttpAPI) > 0 {
2017-05-12 06:48:24 +00:00
noticer = &cronsun.HttpAPI{}
} else {
2017-05-12 06:48:24 +00:00
mailer, err := cronsun.NewMail(10 * time.Second)
if err != nil {
2017-05-12 07:38:50 +00:00
log.Errorf(err.Error())
return
}
noticer = mailer
}
2017-05-12 06:48:24 +00:00
go cronsun.StartNoticer(noticer)
2017-04-06 08:50:07 +00:00
}
2017-01-11 08:12:37 +00:00
go func() {
err := httpServer.Serve(httpL)
if err != nil {
panic(err.Error())
}
}()
go m.Serve()
2017-01-09 02:32:14 +00:00
2017-05-12 07:38:50 +00:00
log.Infof("cronsun web server started on %s, Ctrl+C or send kill sign to exit", conf.Config.Web.BindAddr)
2017-01-09 02:32:14 +00:00
// 注册退出事件
event.On(event.EXIT, conf.Exit)
2017-01-09 02:32:14 +00:00
// 监听退出信号
event.Wait()
event.Emit(event.EXIT, nil)
2017-05-12 07:38:50 +00:00
log.Infof("exit success")
2017-01-09 02:32:14 +00:00
}