Exemple #1
0
// TODO remove serfConif
func onAgentReady(serfAgent *agent.Agent, serfConfig *agent.Config, shutdownCh <-chan struct{}) {
	// search for the path in environment, fallback to default
	cfgPath, err := config.Path()
	if err != nil {
		log.Error("error searching configuration file: %v", err)
		return
	}
	cfg, err := config.Load(cfgPath)
	if err != nil {
		log.Error("failed to load configuration: %v", err)
		return
	}

	hub, err := composeEventHub(cfg, serfAgent)
	if err != nil {
		log.Error("failed to compose sentinel event hub: %s", err)
		return
	}

	if cfg.Heartbeat.Plugin == "event" {
		log.Info("registering new event handler")
		serfAgent.RegisterEventHandler(hub)
	} else {
		// setting up heartbeat
		heartbeatCreator, ok := heartbeats.Plugins[cfg.Heartbeat.Plugin]
		if !ok {
			log.Error("invalid heartbeat: %s", cfg.Heartbeat.Plugin)
			return
		}
		heartbeat_, err := heartbeatCreator(cfg.Heartbeat.Opts)
		if err != nil {
			log.Error("failed to initialize heartbeat: %s", err)
			return
		}
		defer heartbeat_.Stop()

		log.Info("scheduling new sentinel actuator")
		heartbeat_.Schedule(cfg.Name, hub)
	}

	handleSignals(serfAgent, shutdownCh)
	return
}