in main.go [39:98]
func main() {
flag.Parse()
if *configPath == "" {
fmt.Fprintln(os.Stderr, "configuration file must be specified")
flag.Usage()
os.Exit(2)
}
if *stateDir == "" && !*noState {
fmt.Fprintln(os.Stderr, "state directory must be specified (or use --no-state)")
flag.Usage()
os.Exit(2)
}
if *localPort <= 0 && !*noHttp {
fmt.Fprintln(os.Stderr, "local-port must be > 0 (or use --no-http)")
flag.Usage()
os.Exit(2)
}
configData, err := ioutil.ReadFile(*configPath)
if err != nil {
exitf("startup: failed to read configuration file: %+v", err)
}
agent, err := sdk.NewAgent(configData, *stateDir)
if err != nil {
exitf("startup: failed to create agent: %+v", err)
}
var rest *http.HttpInterface
if *localPort > 0 {
rest = http.NewHttpInterface(agent, *localPort)
if err := rest.Start(func(err error) {
// Process async http errors (which may be an immediate port in use error).
if err != httplib.ErrServerClosed {
exitf("http: %+v", err)
}
}); err != nil {
exitf("startup: %+v", err)
}
infof("Listening locally on port %v", *localPort)
} else {
infof("Not starting HTTP daemon")
}
c := make(chan os.Signal, 1)
signal.Notify(c, os.Interrupt)
<-c
infof("Shutting down...")
if rest != nil {
rest.Shutdown()
}
if err := agent.Shutdown(); err != nil {
glog.Warningf("shutdown: %+v", err)
}
glog.Flush()
}