-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathmain.go
114 lines (104 loc) · 3.9 KB
/
main.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
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
package main
import (
"fmt"
"net/http"
"os"
"github.com/gorilla/handlers"
"flag"
"github.com/gobuffalo/packr"
"github.com/wecatch/devops-ui/apps"
"github.com/wecatch/devops-ui/apps/home"
"github.com/wecatch/devops-ui/db"
"github.com/wecatch/devops-ui/logshow"
"github.com/wecatch/devops-ui/utils/consul"
"github.com/wecatch/devops-ui/utils/gitlab"
"github.com/wecatch/devops-ui/utils/log"
"github.com/wecatch/devops-ui/utils/ucloud"
"github.com/wecatch/devops-ui/utils/upyun"
"github.com/wecatch/devops-ui/worker"
)
func startServer(
port int,
consulAddress string,
gitlabToken string,
gitlabBaseURL string,
databaseAddress string,
databaseUser string,
databasePasswd string,
databaseName string,
databaseDebug bool,
ucloudPrivateKey string,
ucloudPublickKey string,
) {
//初始化 consul
consul.ConsulClient = consul.NewConsulClient(consulAddress)
//初始化 gitlab
gitlab.GitLabClient = gitlab.NewGitLabClient(gitlabToken, gitlabBaseURL)
//初始化 database
db.NewDB(databaseAddress, databaseUser, databasePasswd, databaseName, databaseDebug)
//初始化 ucloud api
ucloud.UcloundClient = ucloud.NewUcloundClient(ucloudPrivateKey, ucloudPublickKey, "https://api.ucloud.cn")
logger := log.Logger("server")
router := apps.InitRouter()
box := packr.NewBox("./static")
router.PathPrefix("/static/").Handler(http.StripPrefix("/static/", http.FileServer(box)))
// mux 是严格按照路由的顺序进行匹配,这个和我在社区报的一个 bug 类似,就是如果发现有 error 出现,接下来的 route 就不会得到遍历
// 所以把 not found 放到最后来匹配,防止把 static 给覆盖了
router.NotFoundHandler = http.HandlerFunc(home.Home)
handler := handlers.LoggingHandler(os.Stdout, router)
server := &http.Server{
Addr: fmt.Sprintf("0.0.0.0:%d", port),
Handler: handler,
}
server.SetKeepAlivesEnabled(false)
logger.Println("Server start Listening...", port)
// start run http server
server.ListenAndServe()
}
func main() {
serverMode := flag.Bool("server", false, "Start this agent as server")
workerMode := flag.Bool("worker", false, "Start this agent as worker")
consulAddress := flag.String("consul_address", "", "Consul API address")
databaseAddress := flag.String("database_address", "", "Database address")
databaseUser := flag.String("database_user", "", "Database user")
databasePasswd := flag.String("database_paswd", "", "Database passwd")
databaseName := flag.String("database_name", "devops", "Database name")
databaseDebug := flag.Bool("database_debug", false, "Database mode")
logServerPort := flag.Int("log_server_port", 8081, "Log server listening port")
httpServerPort := flag.Int("http_server_port", 8000, "API Server port")
gitlabToken := flag.String("gitlab_token", "", "Gitlab request token")
gitlabBaseURL := flag.String("gitlab_base_url", "", "Gitlab request base url")
logPath := flag.String("log_path", "devops.log", "App log path")
logLevel := flag.String("log_level", "info", "App log level")
ucloudPrivateKey := flag.String("ucloud_private_key", "", "ucloud private key")
ucloudPublickKey := flag.String("ucloud_publick_key", "", "ucloud publick key")
upyunBucket := flag.String("upyun_bucket", "", "Upyun bucket")
upyunOp := flag.String("upyun_op", "", "Upyun operator")
upyunPasswd := flag.String("upyun_passwd", "", "Upyun passwd")
upyunPrefix := flag.String("upyun_prefix", "", "Upyun prefix")
flag.Parse()
//初始化日志
log.NewLogConf(*logPath, *logLevel)
upyun.UpyunClient = upyun.NewUpyunClient(*upyunPrefix, *upyunBucket, *upyunOp, *upyunPasswd)
if *serverMode {
go logshow.StartWorker(*logServerPort)
startServer(
*httpServerPort,
*consulAddress,
*gitlabToken,
*gitlabBaseURL,
*databaseAddress,
*databaseUser,
*databasePasswd,
*databaseName,
*databaseDebug,
*ucloudPrivateKey,
*ucloudPublickKey,
)
*workerMode = false
}
if *workerMode {
worker.StartWorker()
}
// fmt.Println(*port)
}