package main import ( "fmt" "html/template" "net/http" "os/exec" "time" ) var templates = make(map[string]*template.Template, 3) func loadTemplates() { templateNames := [1]string{"index"} for index, name := range templateNames { t, err := template.ParseFiles("layout.html", name+".html") if err == nil { templates[name] = t fmt.Println("Loaded template", index, name) } else { panic(err) } } } func indexHandler(writer http.ResponseWriter, request *http.Request) { proliantIsAlive := pingServer("server.rodley.net") oracleIsAlive := oracleServerUp() statuses := struct { ProliantIsAlive bool OracleIsAlive bool }{ProliantIsAlive: proliantIsAlive, OracleIsAlive: oracleIsAlive} fmt.Println("Statuses:", statuses) templates["index"].Execute(writer, statuses) } func pingServer(serverName string) bool { cmd := exec.Command("ping", "-c 1", serverName) fmt.Printf("Running ping and waiting for it to finish...\n") err := cmd.Run() if err == nil { return true } else { return false } } func oracleServerUp() bool { return portOpen("oracle.rodley.net", "1521") } func portOpen(serverName string, port string) bool { command := "nmap " + serverName + " | grep " + port fmt.Println(command) cmd := exec.Command("bash", "-c", command) fmt.Printf("Running nmap looking for the open port...\n") err := cmd.Run() if err == nil { return true } else { fmt.Println("Err", err) return false } } func powerOnOracle() bool { cmd := exec.Command("bash", "-c", "./start_oracle.sh") err := cmd.Run() if err == nil { return true } else { fmt.Println("Error ", err) return false } } func powerOffOracle() bool { cmd := exec.Command("./stop_oracle.sh") err := cmd.Run() if err == nil { return true } else { fmt.Println("Error ", err) return false } } func powerOnOracleHandler(writer http.ResponseWriter, request *http.Request) { result := powerOnOracle() if result == true { time.Sleep(10 * time.Second) http.Redirect(writer, request, "/", 301) } else { // TODO: Ver como render el error http.Redirect(writer, request, "/", 301) } } func powerOffOracleHandler(writer http.ResponseWriter, request *http.Request) { result := powerOffOracle() if result == true { time.Sleep(10 * time.Second) http.Redirect(writer, request, "/", 301) } else { // TODO: Ver como render el error http.Redirect(writer, request, "/", 301) } } func main() { loadTemplates() http.HandleFunc("/", indexHandler) http.HandleFunc("/power-on-oracle", powerOnOracleHandler) http.HandleFunc("/power-off-oracle", powerOffOracleHandler) err := http.ListenAndServe(":5001", nil) if err != nil { fmt.Println(err) } }