forked from habeanf/yap
-
Notifications
You must be signed in to change notification settings - Fork 23
/
all.go
98 lines (86 loc) · 2.06 KB
/
all.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
package app
import (
"os"
"github.com/gonuts/commander"
"github.com/gonuts/flag"
"log"
// "net/http"
"runtime"
"runtime/pprof"
)
const (
NUM_CPUS_FLAG = "cpus"
VERSION = "0.0.0.2"
)
var (
CPUs int
CPUProfile string
)
var AppCommands []*commander.Command = []*commander.Command{
// MorphCmd(),
// DepEvalCmd(),
// EnglishCmd(),
MdCmd(),
// JointCmd(),
MALearnCmd(),
MACmd(),
HebMACmd(),
// ValidateMAGoldCmd(),
// GenLemmasCmd(),
// GenUnAmbLemmasCmd(),
// GoldSegCmd(),
// Xliter8Cmd(),
}
func AllCommands() *commander.Command {
cmd := &commander.Command{
// Name: os.Args[0],
Subcommands: AppCommands,
Flag: *flag.NewFlagSet("app", flag.ExitOnError),
}
for _, app := range cmd.Subcommands {
app.Run = NewAppWrapCommand(app.Run)
app.Flag.IntVar(&CPUs, NUM_CPUS_FLAG, 0, "Max CPUS to use (runtime.GOMAXPROCS); 0 = all")
app.Flag.StringVar(&CPUProfile, "cpuprofile", "", "write cpu profile to file")
}
return cmd
}
func InitCommand(cmd *commander.Command, args []string) {
maxCPUs := runtime.NumCPU()
if CPUs > maxCPUs {
log.Printf("Warning: Number of CPUs capped to all available (%d)", maxCPUs)
CPUs = 0
}
if CPUs == 0 {
CPUs = maxCPUs
}
if allOut {
log.Printf("GOMAXPROCS:\t%d", CPUs)
}
runtime.GOMAXPROCS(CPUs)
// launch net server for profiling
// log.Println("Profiler interface:", "http://127.0.0.1:6060/debug/pprof")
// go func() {
// log.Println(http.ListenAndServe("127.0.0.1:6060", nil))
// }()
}
func NewAppWrapCommand(f func(cmd *commander.Command, args []string) error) func(cmd *commander.Command, args []string) error {
log.SetFlags(log.LstdFlags | log.Lmicroseconds)
wrapped := func(cmd *commander.Command, args []string) error {
// log.Println("Version", VERSION)
InitCommand(cmd, args)
if CPUProfile != "" {
f, err := os.Create(CPUProfile)
if err != nil {
log.Fatal(err)
}
log.Println("Writing profiling info to", CPUProfile)
pprof.StartCPUProfile(f)
defer pprof.StopCPUProfile()
}
if allOut {
log.Println()
}
return f(cmd, args)
}
return wrapped
}