Add status of octoprint container
Signed-off-by: Thomas Klaehn <thomas.klaehn@perinet.io>
This commit is contained in:
2
Makefile
2
Makefile
@@ -22,7 +22,7 @@ service:
|
||||
.PHONY: clean
|
||||
clean:
|
||||
go clean
|
||||
rm -rf bin
|
||||
rm -rf build
|
||||
-rm $(PROJECT_NAME).tar.gz
|
||||
|
||||
.PHONY: install
|
||||
|
@@ -14,7 +14,8 @@ import (
|
||||
type state string
|
||||
|
||||
type State struct {
|
||||
State state `json:"state"`
|
||||
State state `json:"state"`
|
||||
DockerState octoprint.DockerState `json:"octoprint_containerstate"`
|
||||
}
|
||||
|
||||
const (
|
||||
@@ -56,6 +57,7 @@ func handle_get_printerstate(w http.ResponseWriter, r *http.Request) {
|
||||
} else {
|
||||
res.State = StateOff
|
||||
}
|
||||
res.DockerState = octoprint.Status()
|
||||
tmp, err := json.Marshal(res)
|
||||
if err != nil {
|
||||
w.WriteHeader(http.StatusInternalServerError)
|
||||
|
@@ -3,11 +3,23 @@ package octoprint
|
||||
import (
|
||||
"log"
|
||||
"powerswitch/internal/app/process"
|
||||
"strings"
|
||||
)
|
||||
|
||||
type DockerState struct {
|
||||
ContainerID string `json:"container_id"`
|
||||
Image string `json:"image"`
|
||||
Command string `json:"command"`
|
||||
Created string `json:"created"`
|
||||
Status string `json:"status"`
|
||||
Ports string `json:"ports"`
|
||||
Name string `json:"name"`
|
||||
}
|
||||
|
||||
const (
|
||||
start_cmd = "docker-compose -f /etc/printctrl/octoprint/docker-compose.yml up -d"
|
||||
stop_cmd = "docker-compose -f /etc/printctrl/octoprint/docker-compose.yml down"
|
||||
start_cmd = "docker-compose -f /etc/printctrl/octoprint/docker-compose.yml up -d"
|
||||
stop_cmd = "docker-compose -f /etc/printctrl/octoprint/docker-compose.yml down"
|
||||
status_cmd = "docker ps"
|
||||
)
|
||||
|
||||
var (
|
||||
@@ -35,3 +47,37 @@ func ReStart() error {
|
||||
}
|
||||
return Start()
|
||||
}
|
||||
|
||||
func Status() DockerState {
|
||||
var state DockerState
|
||||
state.Status = "off"
|
||||
p := process.NewProcess(status_cmd)
|
||||
p.Start()
|
||||
go func() {
|
||||
for {
|
||||
std := <-p.StdoutChannel
|
||||
if strings.Contains(std, "octoprint/octoprint") {
|
||||
res := strings.Split(std, " ")
|
||||
if len(res) != 7 {
|
||||
logger.Printf("Unkown number pf parameters (%d vs. 7)", len(res))
|
||||
} else {
|
||||
state.ContainerID = res[0]
|
||||
state.Image = res[1]
|
||||
state.Command = res[2]
|
||||
state.Created = res[3]
|
||||
state.Status = res[4]
|
||||
state.Ports = res[5]
|
||||
state.Name = res[6]
|
||||
}
|
||||
}
|
||||
}
|
||||
}()
|
||||
go func() {
|
||||
for {
|
||||
err := <-p.StderrChannel
|
||||
logger.Print(err)
|
||||
}
|
||||
}()
|
||||
p.Wait()
|
||||
return state
|
||||
}
|
||||
|
@@ -33,6 +33,20 @@
|
||||
chk = true;
|
||||
}
|
||||
btn.checked = chk;
|
||||
if(target === "printer_slider") {
|
||||
let containerstate = state.octoprint_containerstate;
|
||||
let container_name = document.getElementById("container_name");
|
||||
container_name.innerHTML = containerstate.name;
|
||||
let container_status = document.getElementById("container_status");
|
||||
container_status.innerHTML = containerstate.status;
|
||||
|
||||
let div_container = document.getElementById("containerdiv");
|
||||
if(containerstate.status === "off") {
|
||||
div_container.style.visibility = "hidden";
|
||||
} else {
|
||||
div_container.style.visibility = "visible";
|
||||
}
|
||||
}
|
||||
} else {
|
||||
console.log(`Error: ${xhr.status}`);
|
||||
}
|
||||
@@ -82,32 +96,52 @@
|
||||
</div> -->
|
||||
</div>
|
||||
<div id="content">
|
||||
<h1>3D Drucker</h1>
|
||||
<div>
|
||||
<h1>3D Drucker</h1>
|
||||
<label class="switch">
|
||||
<input id="printer_slider" type="checkbox" onchange="check(this, 'printer')">
|
||||
<span class="slider round"></span>
|
||||
</label>
|
||||
<h2>Schalter</h2>
|
||||
<table>
|
||||
<tr>
|
||||
<td>Strom:</td>
|
||||
<td>
|
||||
<label class="switch">
|
||||
<input id="power_slider" type="checkbox" onchange="check(this, 'power')">
|
||||
<span class="slider round"></span>
|
||||
</label>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Daten:</td>
|
||||
<td>
|
||||
<label class="switch">
|
||||
<input id="data_slider" type="checkbox" onchange="check(this, 'data')">
|
||||
<span class="slider round"></span>
|
||||
</label>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div>
|
||||
<h2>Schalter</h2>
|
||||
<table>
|
||||
<tr>
|
||||
<td>Strom:</td>
|
||||
<td>
|
||||
<label class="switch">
|
||||
<input id="power_slider" type="checkbox" onchange="check(this, 'power')">
|
||||
<span class="slider round"></span>
|
||||
</label>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Daten:</td>
|
||||
<td>
|
||||
<label class="switch">
|
||||
<input id="data_slider" type="checkbox" onchange="check(this, 'data')">
|
||||
<span class="slider round"></span>
|
||||
</label>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div id="containerdiv">
|
||||
<h2>Octoprint Docker Container</h2>
|
||||
<table>
|
||||
<tr>
|
||||
<td>Name:</td>
|
||||
<td id="container_name"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Status:</td>
|
||||
<td id="container_status"></td>
|
||||
</tr>
|
||||
</table>
|
||||
<a href="http://p4:80" target="_blank">Octoprint</a>
|
||||
<br>
|
||||
<a href="http://p4:8080" target="_blank">Camera</a>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
Reference in New Issue
Block a user