-
Notifications
You must be signed in to change notification settings - Fork 321
/
webserver_cmd.go
87 lines (77 loc) · 2.1 KB
/
webserver_cmd.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
// web 服务
package cmds
import (
"github.com/axiaoxin-com/investool/cron"
"github.com/axiaoxin-com/investool/routes"
"github.com/axiaoxin-com/investool/routes/response"
"github.com/axiaoxin-com/investool/services"
"github.com/axiaoxin-com/investool/webserver"
"github.com/axiaoxin-com/logging"
"github.com/gin-gonic/gin"
"github.com/spf13/viper"
"github.com/urfave/cli/v2"
)
const (
// ProcessorWebserver web 服务
ProcessorWebserver = "webserver"
)
// FlagsWebserver cli flags
func FlagsWebserver() []cli.Flag {
return []cli.Flag{
&cli.StringFlag{
Name: "config",
Aliases: []string{"c"},
Value: "./config.toml",
Usage: "配置文件",
Required: false,
},
}
}
// DefaultGinMiddlewares 默认的 gin server 使用的中间件列表
func DefaultGinMiddlewares() []gin.HandlerFunc {
m := []gin.HandlerFunc{
// 记录请求处理日志,最顶层执行
webserver.GinLogMiddleware(),
// 捕获 panic 保存到 context 中由 GinLogger 统一打印, panic 时返回 500 JSON
webserver.GinRecovery(response.Respond),
}
// 配置开启请求限频则添加限频中间件
if viper.GetBool("ratelimiter.enable") {
m = append(m, webserver.GinRatelimitMiddleware())
}
return m
}
// ActionWebserver cli action
func ActionWebserver() func(c *cli.Context) error {
return func(c *cli.Context) error {
configFile := c.String("config")
webserver.InitWithConfigFile(configFile)
// 初始化或加载外部依赖服务
if err := services.Init(); err != nil {
logging.Error(nil, "services init error:"+err.Error())
}
// 启动定时任务
if viper.GetString("env") == "prod" {
cron.RunCronJobs(true)
}
// 创建 gin app
middlewares := DefaultGinMiddlewares()
server := webserver.NewGinEngine(middlewares...)
// 注册路由
routes.Register(server)
// 运行服务
webserver.Run(server)
return nil
}
}
// CommandWebserver 检测器 cli command
func CommandWebserver() *cli.Command {
flags := FlagsWebserver()
cmd := &cli.Command{
Name: ProcessorWebserver,
Usage: "web服务器",
Flags: flags,
Action: ActionWebserver(),
}
return cmd
}