-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.go
94 lines (81 loc) · 2.94 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
/*
castle-cron
*/
package main
import (
"flag"
"fmt"
"os"
"github.com/tooda02/castle-cron/cli"
"github.com/tooda02/castle-cron/cron"
log "github.com/tooda02/castle-cron/logging"
)
const (
DEFAULT_ZK_TIMEOUT = 10
)
var (
verbose *bool // true => TRACE logging on
isServer *bool // true => start server daemon
force *bool // true => force setup even if server already active
help *bool // true => print usage and exit
name string // name of server
zkServer string // Zookeeper server
zkTimeout = DEFAULT_ZK_TIMEOUT // Zookeeper session timeout
)
func init() {
force = flag.Bool("f", false, "Force running server even if server of that name is already active")
help = flag.Bool("h", false, "Print help and exit")
flag.StringVar(&name, "n", "", "Name of server when -s specified (default %h); %h->hostname; %p->pid")
isServer = flag.Bool("s", false, "Run as a castle-cron server daemon")
verbose = flag.Bool("v", false, "Provide TRACE logging")
flag.StringVar(&zkServer, "zk", "ZOOKEEPER_SERVERS", "Comma-separated list of Zookeeper server(s) in form host:port")
flag.IntVar(&zkTimeout, "zt", DEFAULT_ZK_TIMEOUT, "Zookeeper session timeout in seconds")
}
func usage(rc int) {
fmt.Printf("Usage: castle-cron [-d] [-f] [-s] [-n name] [-zk server:port] [-zt timeout]\n")
fmt.Printf(" castle-cron add|upd|del|list jobname \"schedule\" cmd args...\n\n")
fmt.Printf("Run a castle-cron job scheduler server and/or maintain its job queue.\n")
fmt.Printf("The second form of the command maintains the job queue. Use castle-cron help <cmd> for help on its subcommands.\n\n")
flag.PrintDefaults()
os.Exit(rc)
}
func main() {
flag.Parse()
if *help || (flag.NArg() == 1 && flag.Arg(0) == "help") {
usage(0)
}
log.SetDebug(*verbose)
overrideFromEnv(&zkServer, "ZOOKEEPER_SERVERS")
log.Trace.Printf("s(%t) zk(%s) zt(%d)", isServer, zkServer, zkTimeout)
if zkServer == "" {
log.Error.Printf("Required Zookeeper server not provided")
usage(2)
}
// Connect to Zookeeper and initialize for this run
if err := cron.Init(zkServer, zkTimeout); err != nil {
log.Error.Fatalf("Unable to connect to Zookeeper: %s", err.Error())
} else {
defer cron.Stop()
log.Trace.Printf("Connected to Zookeeper server %s with session timeout %d seconds", zkServer, zkTimeout)
}
// If non-flag arguments were specified, execute the CLI command
if flag.NArg() > 0 {
if err := cli.RunCommand(flag.Args()); err != nil {
log.Error.Printf(err.Error())
os.Exit(1)
}
}
// If -s was specified, run a castle-cron server
if *isServer {
if err := cron.Run(name, *force); err != nil {
log.Error.Printf("Server terminated with error: %s", err.Error())
} else {
log.Info.Printf("Server terminated normally")
}
}
}
func overrideFromEnv(value *string, envname string) {
if value != nil && (*value == "" || *value == envname) {
*value = os.Getenv(envname)
}
}