Files
go-gin-api/internal/router/router.go
新亮 382c7d3c8f feature(1.2.7): 新增 cron_server - 后台任务
- import jakecoffman/cron ;
- 可在 WEB 界面中进行新增任务、编辑任务、手动执行任务等;
- 新增 cron.log 记录后台任务执行的日志;
- 调整项目初始化,使其支持安装后台任务模块;
2021-08-28 15:09:20 +08:00

115 lines
2.6 KiB
Go

package router
import (
"github.com/xinliangnote/go-gin-api/configs"
"github.com/xinliangnote/go-gin-api/internal/cron/cron_server"
"github.com/xinliangnote/go-gin-api/internal/pkg/cache"
"github.com/xinliangnote/go-gin-api/internal/pkg/core"
"github.com/xinliangnote/go-gin-api/internal/pkg/db"
"github.com/xinliangnote/go-gin-api/internal/pkg/grpc"
"github.com/xinliangnote/go-gin-api/internal/pkg/metrics"
"github.com/xinliangnote/go-gin-api/internal/pkg/notify"
"github.com/xinliangnote/go-gin-api/internal/router/middleware"
"github.com/xinliangnote/go-gin-api/pkg/errors"
"github.com/xinliangnote/go-gin-api/pkg/file"
"go.uber.org/zap"
)
type resource struct {
mux core.Mux
logger *zap.Logger
db db.Repo
cache cache.Repo
grpConn grpc.ClientConn
middles middleware.Middleware
cronServer cron_server.Server
}
type Server struct {
Mux core.Mux
Db db.Repo
Cache cache.Repo
GrpClient grpc.ClientConn
CronServer cron_server.Server
}
func NewHTTPServer(logger *zap.Logger, cronLogger *zap.Logger) (*Server, error) {
if logger == nil {
return nil, errors.New("logger required")
}
r := new(resource)
r.logger = logger
openBrowserUri := configs.ProjectDomain + configs.ProjectPort
_, ok := file.IsExists(configs.ProjectInstallMark)
if !ok { // 未安装
openBrowserUri += "/install"
} else { // 已安装
// 初始化 DB
dbRepo, err := db.New()
if err != nil {
logger.Fatal("new db err", zap.Error(err))
}
r.db = dbRepo
// 初始化 Cache
cacheRepo, err := cache.New()
if err != nil {
logger.Fatal("new cache err", zap.Error(err))
}
r.cache = cacheRepo
// 初始化 gRPC client
gRPCRepo, err := grpc.New()
if err != nil {
logger.Fatal("new grpc err", zap.Error(err))
}
r.grpConn = gRPCRepo
// 初始化 CRON Server
cronServer, err := cron_server.New(cronLogger, dbRepo, cacheRepo)
if err != nil {
logger.Fatal("new cron err", zap.Error(err))
}
cronServer.Start()
r.cronServer = cronServer
}
mux, err := core.New(logger,
core.WithEnableOpenBrowser(openBrowserUri),
core.WithEnableCors(),
core.WithEnableRate(),
core.WithPanicNotify(notify.OnPanicNotify),
core.WithRecordMetrics(metrics.RecordMetrics),
)
if err != nil {
panic(err)
}
r.mux = mux
r.middles = middleware.New(logger, r.cache, r.db)
// 设置 WEB 路由
setWebRouter(r)
// 设置 API 路由
setApiRouter(r)
// 设置 GraphQL 路由
setGraphQLRouter(r)
s := new(Server)
s.Mux = mux
s.Db = r.db
s.Cache = r.cache
s.GrpClient = r.grpConn
s.CronServer = r.cronServer
return s, nil
}