-
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathapp_old.go
More file actions
240 lines (225 loc) · 6.07 KB
/
app_old.go
File metadata and controls
240 lines (225 loc) · 6.07 KB
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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
package main
import (
"blog/config"
"blog/logger"
"blog/models"
"blog/models/dao/crdb"
"blog/models/dao/migrate"
"blog/routers"
"blog/timer"
"blog/utils/cmd"
"context"
"flag"
"fmt"
"net/http"
"os"
"os/signal"
"runtime"
"strings"
"time"
)
var version = "4.3"
var build = "20210412"
func old_entry() {
// 注册额外参数
flags := flags{}
initFlag(&flags)
if flags.flagVersion {
fmt.Println("blog version: ", version)
fmt.Println("build: ", build)
os.Exit(0)
}
if flags.flagHelp {
flag.Usage()
os.Exit(0)
}
// 初始化日志记录器
logger.PrintLogo()
// 设置初始化
config.InitCfg()
logger.InitLogger()
if flags.flagSt != "" {
// 仅支持linux
avil1 := runtime.GOOS != "linux"
avil2 := runtime.GOOS != "unix"
avil3 := runtime.GOOS != "darwin"
if avil1 && avil2 && avil3 {
fmt.Println("你的操作系统不支持此特性")
os.Exit(0)
}
appName := config.Cfg.AppName
appPid := config.Cfg.APPPid
appLog := config.Cfg.APPLog
switch flags.flagSt {
case "start":
cmd.StartAPP(appName, appPid, appLog)
case "stop":
cmd.StopAPP(appName, appPid)
case "restart":
cmd.RestartAPP(appName, appPid, appLog)
case "status":
cmd.StatusAPP(appName, appPid)
default:
cmd.StatusAPP(appName, appPid)
}
os.Exit(0)
}
// 初始化数据库
models.InitDB()
// init create db
dbErr := crdb.InitTables()
if dbErr != nil {
logger.BlogLogger.PanicF("数据库创建失败")
}
// 初始化定时器
timer.InitTimer()
// 初始化路由
app := routers.InitRouter()
// 迁移
if flags.flagMg {
logger.BlogLogger.InfoF("开始图片数据迁移")
args := flag.Args()
logger.BlogLogger.InfoF("输入参数%v", args)
if len(args) < 2 {
logger.BlogLogger.ErrorF("输入参数个数不满足")
} else {
logger.BlogLogger.InfoF("开始数据迁移 旧地址: %s 新地址: %s", args[0], args[1])
e := migrate.ImageMigrate(args[0], args[1])
logger.BlogLogger.InfoF("输出%v", e)
}
os.Exit(0)
}
// 测试模式下使用gin自带的web服务器启动
if flags.flagTest {
logger.BlogLogger.InfoF("以测试模式启动")
logger.BlogLogger.InfoF("监听端口5000")
config.Cfg.RunMode = "debug"
app.Run(":5000")
} else {
if flags.flagPort != "" {
cluster := config.Cfg.Cluster
if cluster {
logger.BlogLogger.InfoF("以集群模式启动")
ports := strings.Fields(flags.flagPort)
logger.BlogLogger.InfoF("监听端口: %s", strings.Join(ports, " "))
portch := make(chan string)
for _, port := range ports {
app := routers.InitRouter()
s := &http.Server{
Addr: fmt.Sprintf(":%s", port),
Handler: app,
ReadTimeout: config.Cfg.ReadTimeout,
WriteTimeout: config.Cfg.WriteTimeout,
MaxHeaderBytes: 1 << 20,
}
go func(s *http.Server, port string) {
err := s.ListenAndServe()
portch <- port
if err != nil {
fmt.Println(err)
}
}(s, port)
}
// 阻塞进程
for _, _ = range ports {
logger.BlogLogger.InfoF("子服务运行成功 端口: " + <-portch)
}
} else {
logger.BlogLogger.InfoF("以单实例模式启动")
port := strings.Fields(flags.flagPort)[0]
logger.BlogLogger.InfoF("监听端口: %s", port)
s := &http.Server{
Addr: fmt.Sprintf(":%s", port),
Handler: app,
ReadTimeout: config.Cfg.ReadTimeout,
WriteTimeout: config.Cfg.WriteTimeout,
MaxHeaderBytes: 1 << 20,
}
go func() {
quit := make(chan os.Signal)
signal.Notify(quit, os.Interrupt)
// 监听退出信号
<-quit
logger.BlogLogger.InfoF("接收到终止信号")
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
if err := s.Shutdown(ctx); err != nil {
logger.BlogLogger.InfoF("服务关闭中")
logger.BlogLogger.InfoF("即将退出 开始保存临时数据")
timer.ForceSaveUV()
timer.ForceSavePv()
}
}()
err := s.ListenAndServe()
if err != nil {
logger.BlogLogger.ErrorF(err.Error())
// 开始写入全部缓存数据
logger.BlogLogger.InfoF("即将退出 开始保存临时数据")
timer.ForceSaveUV()
timer.ForceSavePv()
}
}
} else {
// 为空时读取默认值
port := config.Cfg.HTTPPort
logger.BlogLogger.InfoF("以单实例模式启动")
logger.BlogLogger.InfoF("监听端口: %d", port)
s := &http.Server{
Addr: fmt.Sprintf(":%d", port),
Handler: app,
ReadTimeout: config.Cfg.ReadTimeout,
WriteTimeout: config.Cfg.WriteTimeout,
MaxHeaderBytes: 1 << 20,
}
go func() {
quit := make(chan os.Signal)
signal.Notify(quit, os.Interrupt)
// 监听退出信号
<-quit
logger.BlogLogger.InfoF("接收到终止信号")
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
if err := s.Shutdown(ctx); err != nil {
logger.BlogLogger.InfoF("服务关闭中")
logger.BlogLogger.InfoF("即将退出 开始保存临时数据")
timer.ForceSaveUV()
timer.ForceSavePv()
}
}()
err := s.ListenAndServe()
if err != nil {
logger.BlogLogger.ErrorF(err.Error())
// 开始写入全部缓存数据
logger.BlogLogger.InfoF("即将退出 开始保存临时数据")
timer.ForceSaveUV()
timer.ForceSavePv()
}
}
}
}
type flags struct {
flagTest bool
flagReload bool
flagPort string
flagVersion bool
flagHelp bool
flagSt string
flagMg bool
}
func initFlag(flags *flags) {
ftest := flag.Bool("t", false, "是否开启测试模式")
fport := flag.String("p", "", "选择监听端口")
freload := flag.Bool("r", false, "重载配置文件")
fversion := flag.Bool("v", false, "查看版本信息")
fst := flag.String("s", "", "操作服务进程")
fmigrate := flag.Bool("m", false, "图片链接迁移")
fhelp := flag.Bool("h", false, "查看帮助信息")
flag.Parse()
flags.flagTest = *ftest
flags.flagPort = *fport
flags.flagReload = *freload
flags.flagVersion = *fversion
flags.flagHelp = *fhelp
flags.flagSt = *fst
flags.flagMg = *fmigrate
}