func setupTests() { if online := <-raven.Connect(); !online { panic("Failed to connect raven") } }
// Init is a local init call that handles setup func Init() { // Parse flags and handle them. No other code should be calling flag.Parse() handleFlags() if len(Name) == 0 { log.Critical("No service name found") cleanupLogs() os.Exit(1) } // GO! log.Infof("Starting up %v (%v)\n%v\n", Name, Version, banner.PrintS(Name)) rand.Seed(time.Now().UnixNano()) tokens = make(map[string]chan bool, 100) servicesConfigFile := configDir + "/" + Name + "-seelog.xml" if _, err := os.Stat(servicesConfigFile); err == nil { loadLogConfig(servicesConfigFile) } // Try and open the access log file if accessLogDir := os.Getenv(accessLogEnv); accessLogDir != "" { var err error accessLogFilename := filepath.Join(accessLogDir, Name+"-access.log") commonLogger, err = os.OpenFile(accessLogFilename, os.O_APPEND|os.O_WRONLY|os.O_CREATE, 0666) if err != nil { log.Errorf("[Server] Error opening access log file: %v", err) commonLogger = nil } } else { log.Errorf("[Server] No access log env (%v) set", accessLogEnv) } log.Infof("[Server] Running with %d cores", runtime.GOMAXPROCS(0)) uuid, _ := uuid.NewV4() InstanceID = fmt.Sprintf("server-%s-%s", Name, uuid) // Configure key service layer components, loading config from the config service automatically config.LoadFromService(Name) inst.SetNamespace(Name) ssync.SetRegionLockNamespace(Name) // Register region leader cleanup function RegisterCleanupHandler(ssync.CleanupRegionLeaders) // Ping graphite that we have started inst.Counter(1.0, "runtime.started", 1) // Connect the raven and keep checking its status ch := raven.Connect() if online := <-ch; !online { log.Warn("[Server] Failed to connect the raven on first attempt") } go monitorRaven(ch) // Create a new registry for the endpoints reg = newRegistry() // Add default middleware registerMiddleware(authMiddleware) registerMiddleware(tracingMiddleware) registerMiddleware(instrumentedMiddleware) registerMiddleware(tokenConstrainedMiddleware) registerMiddleware(waitGroupMiddleware) registerMiddleware(commonLoggerMiddleware(commonLogger)) // Add default endpoints registerEndpoint(&Endpoint{ Name: "health", Mean: 100, Upper95: 200, Handler: healthHandler, RequestProtocol: new(healthproto.Request), ResponseProtocol: new(healthproto.Response), }) registerEndpoint(&Endpoint{ Name: "stats", Mean: 100, Upper95: 200, Handler: statsHandler, RequestProtocol: new(statsproto.Request), ResponseProtocol: new(statsproto.PlatformStats), }) registerEndpoint(&Endpoint{ Name: "loadedconfig", Mean: 100, Upper95: 200, Handler: loadedConfigHandler, RequestProtocol: new(loadedconfigproto.Request), ResponseProtocol: new(loadedconfigproto.Response), }) registerEndpoint(&Endpoint{ Name: "jsonschema", Mean: 100, Upper95: 200, Handler: jsonschemaHandler, RequestProtocol: new(jsonschemaproto.Request), ResponseProtocol: new(jsonschemaproto.Response), Authoriser: OpenToTheWorldAuthoriser(), }) // Initialise platform healthchecks initHealthChecks() initialised = true }