func main()

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()
}