-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.go
134 lines (110 loc) · 2.39 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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
/*
* @Author: lingguohua
* @Date: 2019-08-12 19:46:21
* @Description:
*/
package main
import (
"flag"
"fmt"
"os"
"runtime"
"runtime/pprof"
"time"
"wegirl/gamecfg"
"wegirl/gfunc"
"wegirl/server"
"wegirl/servercfg"
_ "net/http/pprof"
_ "wegirl/handles/auth"
_ "wegirl/handles/home"
log "github.com/sirupsen/logrus"
)
var (
cfgFilepath = ""
genInPath = ""
genOutPath = ""
)
var (
// 显示版本
showVer = false
// BuildVersion 编译版本
BuildVersion string
//BuildTime 编译时间
BuildTime string
//CommitID 提供ID
CommitID string
)
func init() {
flag.StringVar(&cfgFilepath, "c", "servercfg/x.json", "specify the config file path name")
flag.StringVar(&genInPath, "gi", "", "input path")
flag.StringVar(&genOutPath, "go", "", "output path")
}
func main() {
// only one thread
runtime.GOMAXPROCS(1)
flag.BoolVar(&showVer, "v", false, "show version")
flag.Parse()
if showVer {
fmt.Println("Build Version:", BuildVersion)
fmt.Println("Build Time:", BuildTime)
fmt.Println("CommitID:", CommitID)
os.Exit(0)
}
if genInPath != "" && genOutPath != "" {
gamecfg.Gen(genInPath, genOutPath)
os.Exit(0)
}
if cfgFilepath != "" {
r := servercfg.ParseConfigFile(cfgFilepath)
if r != true {
log.Fatal("can't parse configure file:", cfgFilepath)
}
} else {
log.Fatal("please specify a valid config file path")
}
// server startTime
servercfg.StartTime = int(time.Now().Unix())
log.Println("try to start stupid server...")
// load sensitiveword
gfunc.LoadSensitiveWordDictionary(servercfg.SensitiveWordFile)
// start http server
server.CreateHTTPServer()
// start cron job
server.CronJob()
log.Println("start stupid server ok!")
if servercfg.Daemon == "yes" {
waitForSignal()
} else {
waitInput()
}
return
}
func waitInput() {
var cmd string
for {
_, err := fmt.Scanf("%s\n", &cmd)
if err != nil {
//log.Println("Scanf err:", err)
continue
}
switch cmd {
case "exit", "quit":
log.Println("exit by user")
return
case "gr":
log.Println("current goroutine count:", runtime.NumGoroutine())
break
case "gd":
pprof.Lookup("goroutine").WriteTo(os.Stdout, 1)
break
default:
break
}
}
}
func dumpGoRoutinesInfo() {
log.Println("current goroutine count:", runtime.NumGoroutine())
// use DEBUG=2, to dump stack like golang dying due to an unrecovered panic.
pprof.Lookup("goroutine").WriteTo(os.Stdout, 2)
}