more abstraction and simple dashboard for processes
All checks were successful
Build Process Supervisor / build (amd64, .exe, windows) (push) Successful in 2m24s
Build Process Supervisor / build (amd64, , linux) (push) Successful in 2m36s
Build Process Supervisor / build (arm, 6, , linux) (push) Successful in 2m19s
Build Process Supervisor / build (arm64, , linux) (push) Successful in 2m14s
All checks were successful
Build Process Supervisor / build (amd64, .exe, windows) (push) Successful in 2m24s
Build Process Supervisor / build (amd64, , linux) (push) Successful in 2m36s
Build Process Supervisor / build (arm, 6, , linux) (push) Successful in 2m19s
Build Process Supervisor / build (arm64, , linux) (push) Successful in 2m14s
This commit is contained in:
96
mainPage/mainPage.go
Normal file
96
mainPage/mainPage.go
Normal file
@@ -0,0 +1,96 @@
|
||||
package mainPage
|
||||
|
||||
import (
|
||||
"embed"
|
||||
"html/template"
|
||||
"log"
|
||||
"net/http"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"processSupervisor/supervisor"
|
||||
"time"
|
||||
)
|
||||
|
||||
//go:embed templates
|
||||
var templatesFS embed.FS
|
||||
|
||||
type MainPage struct {
|
||||
Supervisor *supervisor.Supervisor
|
||||
}
|
||||
|
||||
func NewMainPage(cfgDir string) (*MainPage, error) {
|
||||
var sv supervisor.Supervisor
|
||||
file := filepath.Join(cfgDir, "supervisorTemplate.json")
|
||||
if _, err := os.Stat(file); err == nil {
|
||||
sv, err = supervisor.ReadTemplate(file)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
if err := sv.StartProcesses(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
m := MainPage{
|
||||
Supervisor: &sv,
|
||||
}
|
||||
|
||||
return &m, nil
|
||||
}
|
||||
|
||||
func (m *MainPage) LoadMainPage(w http.ResponseWriter, r *http.Request) {
|
||||
tmpl := template.Must(
|
||||
template.New("index.html").ParseFS(
|
||||
templatesFS,
|
||||
"templates/index.html",
|
||||
"templates/processes.html",
|
||||
),
|
||||
)
|
||||
tmpl.Execute(w, m)
|
||||
}
|
||||
|
||||
func (m *MainPage) UpdateMainPage(w http.ResponseWriter, r *http.Request) {
|
||||
tmpl := template.Must(
|
||||
template.New("processes.html").ParseFS(
|
||||
templatesFS,
|
||||
"templates/processes.html",
|
||||
),
|
||||
)
|
||||
tmpl.Execute(w, m)
|
||||
}
|
||||
|
||||
func (m *MainPage) StartProcess(w http.ResponseWriter, r *http.Request) {
|
||||
name := r.PostFormValue("name")
|
||||
|
||||
// This is where you trigger the .Start method
|
||||
err := m.Supervisor.StartProcessByName(name)
|
||||
if err != nil {
|
||||
log.Println("Failed to start process", err)
|
||||
}
|
||||
m.UpdateMainPage(w, r)
|
||||
}
|
||||
|
||||
func (m *MainPage) StopProcess(w http.ResponseWriter, r *http.Request) {
|
||||
name := r.PostFormValue("name")
|
||||
|
||||
err := m.Supervisor.StopProcessByName(name)
|
||||
if err != nil {
|
||||
log.Println("Failed to stop process", err)
|
||||
}
|
||||
m.UpdateMainPage(w, r)
|
||||
}
|
||||
|
||||
func (m *MainPage) RestartProcess(w http.ResponseWriter, r *http.Request) {
|
||||
name := r.PostFormValue("name")
|
||||
|
||||
err := m.Supervisor.StopProcessByName(name)
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
time.Sleep(time.Second)
|
||||
err = m.Supervisor.StartProcessByName(name)
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
m.UpdateMainPage(w, r)
|
||||
}
|
Reference in New Issue
Block a user