Example #1
0
func SendMetrics(server *haproxy.Server) {

	c, err := statsd.Dial("localhost:8125")

	// TODO: Instead of dying completely, should put this on a retry
	// and try again.
	if err != nil {
		log.Fatal("Could not connect to statsd")
	}

	for {
		info := server.GetInfo()
		c.Gauge("current_connections", info.CurrConns, 1)
		c.Gauge("cum_connections", info.CumConns, 1)
		c.Flush()
		time.Sleep(1 * time.Second)
	}
}
func main() {

	// Read in the configuration file settings. I think we should instead
	// serialize to JSON and treat this like a view.
	// haproxy.Transform()

	flag.StringVar(&flagConfigFile, "configFile", DEFAULT_CONFIG_FILE, "Path to toml file")
	flag.StringVar(&flagDebugMode, "debugMode", false, "Enable debug mode")
	flag.Parse()

	conf, err := LoadConfig(flagConfigFile)

	if err != nil {
		log.Fatal("Could not load configuration", err)
	}

	server := new(haproxy.Server)

	// We use two channels— one to send actions to the server and one to recieve
	// notifications from it. Create them right now.
	actionChan := make(chan haproxy.Action)
	notificationChan := make(chan haproxy.Event)

	// Handle signals gracefully in another goroutine
	go gracefulSignals(server, actionChan, notificationChan)

	// Start up the HAProxy Server
	go server.Start(notificationChan, actionChan)

	// Setup the ELB HTTP Handlers
	go elb.InitApiHandlers()

	// Fire up statsd goroutine if statsd is enabled. This might be better off in
	// a seperate binary to monitor HAProxy.
	if conf.Statsd.Enabled {
		go statsd.SendMetrics(server)
	}

	// Event loop for handling events from the HAProxy server
	// (right now, it only sends start/stop notifications)
	for _ = range notificationChan {
		log.Println("Received a notification")

		server.Socket = conf.Haproxy.Socket
		serverInfo := server.GetInfo()
	}

}