Browse Source

Version inicial

master
rodley82 4 years ago
commit
20614df544
  1. 3
      go.mod
  2. 58
      index.html
  3. 14
      layout.html
  4. 124
      main.go

3
go.mod

@ -0,0 +1,3 @@
module partyinvites
go 1.17

58
index.html

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

14
layout.html

@ -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>

124
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)
}
}
Loading…
Cancel
Save