package main import ( "fmt" "log" "net/http" "github.com/gliderlabs/ssh" "github.com/gorilla/mux" ) var ( metrics_num_passwords int metrics_city_num map[string]int cities map[string]location ) func main() { // create a map mapping a city to an amount of hits metrics_city_num = make(map[string]int) // create a cities map mapping a city to a location cities = make(map[string]location) // parse flags building a config struct config := parseFlags() // start the ssh server log.Println("Starting SSH listener") go func() { sshPortString := fmt.Sprintf(":%d", config.sshPort) listenErr := ssh.ListenAndServe(sshPortString, nil, ssh.PasswordAuth(handlePass)) if listenErr != nil { log.Fatalln(listenErr.Error()) } }() // start the http server logging the metrics log.Println("Starting HTTP metrics listener") r := mux.NewRouter() r.HandleFunc("/", indexHandler) r.HandleFunc("/metrics", metricsHandler) r.HandleFunc("/locations", locationHandlerEndpoint) // start the http server exposing the metrics and the locations httpPortString := fmt.Sprintf(":%d", config.httpPort) listenErr := http.ListenAndServe(httpPortString, r) // handle potential errors if listenErr != nil { log.Fatalln(listenErr.Error()) } }