Пример #1
0
func main() {
	flags := flag.NewFlagSet(os.Args[0], flag.ExitOnError)

	pidfile := flags.String("pidfile", "", "Path to pid file")
	scriptPath := flags.String("scriptPath", "./check_node_validity.sh", "Path to script file")
	cf_lager.AddFlags(flags)

	serviceConfig := service_config.New()
	serviceConfig.AddFlags(flags)
	flags.Set("configPath", "registrar_settings.yml")

	flags.Parse(os.Args[1:])

	logger, _ := cf_lager.New("Route Registrar")

	logger.Info("Route Registrar started")

	var registrarConfig config.Config
	err := serviceConfig.Read(&registrarConfig)
	if err != nil {
		logger.Fatal("error parsing file: %s\n", err)
	}

	registrar := NewRegistrar(registrarConfig, logger)
	//add health check handler
	checker := InitHealthChecker(registrarConfig, logger, *scriptPath)
	if checker != nil {
		registrar.AddHealthCheckHandler(checker)
	}

	if *pidfile != "" {
		pid := strconv.Itoa(os.Getpid())
		err := ioutil.WriteFile(*pidfile, []byte(pid), 0644)
		if err != nil {
			logger.Fatal(
				"error writing pid to pidfile",
				err,
				lager.Data{
					"pid":     pid,
					"pidfile": *pidfile},
			)
		}
	}

	registrar.RegisterRoutes()
	os.Exit(1)
}
	It("Sends a router.register message and does not send a router.unregister message", func() {
		// Detect when a router.register message gets sent
		var registered chan (string)
		registered = subscribeToRegisterEvents(func(msg *yagnats.Message) {
			registered <- string(msg.Payload)
		})

		// Detect when an unregister message gets sent
		var unregistered chan (bool)
		unregistered = subscribeToUnregisterEvents(func(msg *yagnats.Message) {
			unregistered <- true
		})

		go func() {
			registrar := NewRegistrar(config, logger)
			registrar.RegisterRoutes()
		}()

		// Assert that we got the right router.register message
		var receivedMessage string
		Eventually(registered, 2).Should(Receive(&receivedMessage))
		Expect(receivedMessage).To(Equal(`{"uris":["riakcs.vcap.me"],"host":"127.0.0.1","port":8080}`))

		// Assert that we never got a router.unregister message
		Consistently(unregistered, 2).ShouldNot(Receive())
	})

	It("Emits a router.unregister message when SIGINT is sent to the registrar's signal channel", func() {
		verifySignalTriggersUnregister(syscall.SIGINT, logger)
	})