/
app.go
73 lines (59 loc) · 1.54 KB
/
app.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
package main
import (
"fmt"
"net/http"
"strconv"
"time"
"github.com/gin-gonic/gin"
"github.com/spf13/pflag"
"github.com/spf13/viper"
"github.com/13sai/gin-frame/config"
"github.com/13sai/gin-frame/db"
"github.com/13sai/gin-frame/graceful"
"github.com/13sai/gin-frame/logger"
"github.com/13sai/gin-frame/router"
)
var (
conf = pflag.StringP("config", "c", "", "config filepath")
)
func main() {
pflag.Parse()
// 初始化配置
if err := config.Run(*conf); err != nil {
panic(err)
}
logger.Start()
logger.Info("i'm log123-----Info")
logger.Error("i'm log123-----Error")
// 连接mysql数据库
DB := db.GetDB()
defer db.CloseDB(DB)
// redis
db.RedisInit()
go func() {
pingServer()
}()
gin.SetMode(viper.GetString("mode"))
g := gin.New()
g = router.Load(g)
// g.Run(viper.GetString("addr"))
// logger.Info("启动http服务端口%s\n", viper.GetString("addr"))
// time.Sleep(2*time.Second)
if err := graceful.ListenAndServe(viper.GetString("addr"), g); err != nil && err != http.ErrServerClosed {
logger.Error("fail:http服务启动失败: %s\n", err)
}
}
// 健康检查
func pingServer() {
for i := 0; i < viper.GetInt("max_ping_count"); i++ {
url := fmt.Sprintf("%s%s%s", "http://127.0.0.1", viper.GetString("addr"), viper.GetString("healthCheck"))
resp, err := http.Get(url)
if err == nil && resp.StatusCode == 200 {
fmt.Println("health check success!")
return
}
fmt.Println("check fail -" + strconv.Itoa(i+1) + "times")
time.Sleep(time.Second)
}
fmt.Println("Cannot connect to the router!!!")
}