commit 20614df5445be3a725202978ba4abd1232034fae Author: rodley82 Date: Tue Feb 1 09:21:57 2022 -0300 Version inicial diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..b500e56 --- /dev/null +++ b/go.mod @@ -0,0 +1,3 @@ +module partyinvites + +go 1.17 diff --git a/index.html b/index.html new file mode 100644 index 0000000..d9c0a19 --- /dev/null +++ b/index.html @@ -0,0 +1,58 @@ +{{ define "body"}} +
+

Este es el servidor Raspberry Pi!

+

Algunas acciones

+
+
+
+ + +
+
+ Servidor Proliant + {{ if .ProliantIsAlive }} + Encendido + {{ else }} + Apagado + {{ end }} +
+

+ El servidor Proliant +

+ + {{ if .ProliantIsAlive }} + Apagar + {{ else }} + Encender + {{ end }} +
+
+
+
+
+ + +
+
+ Servidor Oracle + {{ if .OracleIsAlive }} + Encendido + {{ else }} + Apagado + {{ end }} +
+

+ El servidor Oracle +

+ + {{ if .OracleIsAlive }} + Apagar + {{ else }} + Encender + {{ end }} +
+
+
+
+
+{{ end }} diff --git a/layout.html b/layout.html new file mode 100644 index 0000000..3d03723 --- /dev/null +++ b/layout.html @@ -0,0 +1,14 @@ + + + + + Raspberry Pi - Rodley + + + + + {{ block "body" . }} Content Goes Here {{ end }} + + diff --git a/main.go b/main.go new file mode 100644 index 0000000..110e5e2 --- /dev/null +++ b/main.go @@ -0,0 +1,124 @@ +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) + } +}