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)
}
}