commit
20614df544
4 changed files with 199 additions and 0 deletions
@ -0,0 +1,3 @@ |
|||
module partyinvites |
|||
|
|||
go 1.17 |
|||
@ -0,0 +1,58 @@ |
|||
{{ define "body"}} |
|||
<div class="container"> |
|||
<h1> Este es el servidor Raspberry Pi!</h3> |
|||
<h2>Algunas acciones</h4> |
|||
<div class="row"> |
|||
<div class="col"> |
|||
<div class="card" style="width: 24rem;"> |
|||
<i class="bi-cpu-fill card-img-top" style="text-align: center; font-size: 10rem; color: darkorange;"></i> |
|||
|
|||
<div class="card-body"> |
|||
<h5 class="card-title"> |
|||
Servidor Proliant |
|||
{{ if .ProliantIsAlive }} |
|||
<span class="badge bg-success">Encendido</span> |
|||
{{ else }} |
|||
<span class="badge bg-warning">Apagado</span> |
|||
{{ end }} |
|||
</h5> |
|||
<p class="card-text"> |
|||
El servidor Proliant |
|||
</p> |
|||
|
|||
{{ if .ProliantIsAlive }} |
|||
<a class="btn btn-danger" href="/power-off-proliant">Apagar</a> |
|||
{{ else }} |
|||
<a class="btn btn-primary" href="/power-on-proliant">Encender</a> |
|||
{{ end }} |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="col"> |
|||
<div class="card" style="width: 24rem;"> |
|||
<i class="bi-server card-img-top" style="text-align: center; font-size: 10rem; color: darkorange;"></i> |
|||
|
|||
<div class="card-body"> |
|||
<h5 class="card-title"> |
|||
Servidor Oracle |
|||
{{ if .OracleIsAlive }} |
|||
<span class="badge bg-success">Encendido</span> |
|||
{{ else }} |
|||
<span class="badge bg-warning">Apagado</span> |
|||
{{ end }} |
|||
</h5> |
|||
<p class="card-text"> |
|||
El servidor Oracle |
|||
</p> |
|||
|
|||
{{ if .OracleIsAlive }} |
|||
<a class="btn btn-danger" href="/power-off-oracle">Apagar</a> |
|||
{{ else }} |
|||
<a class="btn btn-primary" href="/power-on-oracle">Encender</a> |
|||
{{ end }} |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
{{ end }} |
|||
@ -0,0 +1,14 @@ |
|||
<!DOCTYPE html> |
|||
<html> |
|||
<head> |
|||
<meta name="viewport" content="width=device-width" /> |
|||
<title>Raspberry Pi - Rodley</title> |
|||
<link href= |
|||
"https://cdnjs.cloudflare.com/ajax/libs/bootstrap/5.1.1/css/bootstrap.min.css" |
|||
rel="stylesheet"> |
|||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.8.0/font/bootstrap-icons.css"> |
|||
</head> |
|||
<body class="p-2"> |
|||
{{ block "body" . }} Content Goes Here {{ end }} |
|||
</body> |
|||
</html> |
|||
@ -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) |
|||
} |
|||
} |
|||
Loading…
Reference in new issue