func Start(site, pool string) *server.Server { datastore, err := resolver.NewDatastore("dir:./json") if err != nil { logging.Errorp(err.Error()) os.Exit(1) } configstore, err := config_resolver.NewConfigstore("stub:") if err != nil { logging.Errorp("Could not connect to configstore", logging.Pair{"error", err}, ) } acctstore, err := acct_resolver.NewAcctstore("stub:") if err != nil { logging.Errorp("Could not connect to acctstore", logging.Pair{"error", err}, ) } channel := make(server.RequestChannel, 10) server, err := server.NewServer(datastore, configstore, acctstore, "json", false, channel, 4, 0, false, false, server.KEEP_ALIVE_DEFAULT) if err != nil { logging.Errorp(err.Error()) os.Exit(1) } go server.Serve() return server }
func main() { flag.Parse() var f *os.File if *MEM_PROFILE != "" { var err error f, err = os.Create(*MEM_PROFILE) if err != nil { fmt.Printf("Cannot start mem profiler %v\n", err) } } if *CPU_PROFILE != "" { f, err := os.Create(*CPU_PROFILE) if err != nil { fmt.Printf("Cannot start cpu profiler %v\n", err) } else { pprof.StartCPUProfile(f) } } if *LOGGER != "" { logger, _ := log_resolver.NewLogger(*LOGGER) if logger == nil { fmt.Printf("Invalid logger: %s\n", *LOGGER) os.Exit(1) } logging.SetLogger(logger) } if *DEBUG { logging.SetLevel(logging.Debug) logging.Debugp("Debug mode enabled") } else { logging.SetLevel(logging.Info) } datastore, err := resolver.NewDatastore(*DATASTORE) if err != nil { logging.Errorp(err.Error()) os.Exit(1) } datastore_package.SetDatastore(datastore) configstore, err := config_resolver.NewConfigstore(*CONFIGSTORE) if err != nil { logging.Errorp("Could not connect to configstore", logging.Pair{"error", err}, ) } acctstore, err := acct_resolver.NewAcctstore(*ACCTSTORE) if err != nil { logging.Errorp("Could not connect to acctstore", logging.Pair{"error", err}, ) } else { // Create the metrics we are interested in accounting.RegisterMetrics(acctstore) // Make metrics available acctstore.MetricReporter().Start(1, 1) } keep_alive_length, e := util.ParseQuantity(*KEEP_ALIVE_LENGTH) if e != nil { logging.Errorp("Error parsing keep alive length; reverting to default", logging.Pair{"keep alive length", *KEEP_ALIVE_LENGTH}, logging.Pair{"error", e}, logging.Pair{"default", server.KEEP_ALIVE_DEFAULT}, ) } if e == nil && keep_alive_length < 1 { logging.Infop("Negative or zero keep alive length; reverting to default", logging.Pair{"keep alive length", *KEEP_ALIVE_LENGTH}, logging.Pair{"default", server.KEEP_ALIVE_DEFAULT}, ) } channel := make(server.RequestChannel, *REQUEST_CAP) server, err := server.NewServer(datastore, configstore, acctstore, *NAMESPACE, *READONLY, channel, *THREAD_COUNT, *TIMEOUT, *SIGNATURE, *METRICS, keep_alive_length) if err != nil { logging.Errorp(err.Error()) os.Exit(1) } go server.Serve() logging.Infop("cbq-engine started", logging.Pair{"version", VERSION}, logging.Pair{"datastore", *DATASTORE}, ) // Create http endpoint endpoint := http.NewServiceEndpoint(server, *STATIC_PATH, *METRICS) er := endpoint.Listen(*HTTP_ADDR) if er != nil { logging.Errorp("cbq-engine exiting with error", logging.Pair{"error", er}, logging.Pair{"HTTP_ADDR", *HTTP_ADDR}, ) os.Exit(1) } if *CERT_FILE != "" && *KEY_FILE != "" { er := endpoint.ListenTLS(*HTTPS_ADDR, *CERT_FILE, *KEY_FILE) if er != nil { logging.Errorp("cbq-engine exiting with error", logging.Pair{"error", er}, logging.Pair{"HTTP_ADDR", *HTTP_ADDR}, ) os.Exit(1) } } signalCatcher(server, endpoint, *CPU_PROFILE != "", f) }