/
main.go
61 lines (54 loc) · 1.26 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
//go:generate go tool yacc -o query.go -p cqbs query.y
package main
import (
"flag"
log "github.com/Sirupsen/logrus"
"github.com/gtfierro/cs262-project/common"
"github.com/pkg/profile"
"os"
"runtime/trace"
"time"
)
// config flags
var configfile = flag.String("c", "config.ini", "Path to configuration file")
func init() {
// set up logging
log.SetOutput(os.Stderr)
}
func main() {
flag.Parse()
// configure logging instance
config, configLogmsg := common.LoadConfig(*configfile)
common.SetupLogging(config)
log.Info(configLogmsg)
if config.Debug.Enable {
var p interface {
Stop()
}
switch config.Debug.ProfileType {
case "cpu", "profile":
p = profile.Start(profile.CPUProfile, profile.ProfilePath("."))
case "block":
p = profile.Start(profile.BlockProfile, profile.ProfilePath("."))
case "mem":
p = profile.Start(profile.MemProfile, profile.ProfilePath("."))
case "trace":
f, err := os.Create("trace.out")
if err != nil {
log.Fatal(err)
}
trace.Start(f)
}
time.AfterFunc(time.Duration(config.Debug.ProfileLength)*time.Second, func() {
if p != nil {
p.Stop()
}
if config.Debug.ProfileType == "trace" {
trace.Stop()
}
os.Exit(0)
})
}
server := NewServer(config)
server.listenAndDispatch()
}