You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
124 lines
2.6 KiB
124 lines
2.6 KiB
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("./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)
|
|
}
|
|
}
|
|
|