feat: status page + maintenance
This commit is contained in:
parent
a7a52e7d4c
commit
614c16750d
13
maintenance/reboot.py
Normal file
13
maintenance/reboot.py
Normal file
@ -0,0 +1,13 @@
|
||||
#!/usr/bin/python3
|
||||
import docker
|
||||
|
||||
client = docker.from_env()
|
||||
for container in client.containers.list():
|
||||
if container.name == "thsf":
|
||||
print("[+] Rebooting container<br>")
|
||||
print(" '-> Stopping container<br>")
|
||||
container.stop()
|
||||
print(" '-> Starting container<br>")
|
||||
container.start()
|
||||
print("[\o/] Container restarted<br>")
|
||||
|
13
maintenance/scripts/maintenance.js
Normal file
13
maintenance/scripts/maintenance.js
Normal file
@ -0,0 +1,13 @@
|
||||
function reboot() {
|
||||
var xhttp = new XMLHttpRequest();
|
||||
xhttp.onreadystatechange = function() {
|
||||
if (this.readyState == 4 && this.status == 200) {
|
||||
document.getElementById("logs").innerHTML = this.responseText;
|
||||
}
|
||||
};
|
||||
xhttp.open("GET", "https://www.thsf.net/maintenance/reboot.py", true);
|
||||
xhttp.send();
|
||||
setTimeout(function () {
|
||||
document.location="https://www.thsf.net/maintenance/status.py"}, 5000
|
||||
);
|
||||
}
|
19
maintenance/status.py
Normal file
19
maintenance/status.py
Normal file
@ -0,0 +1,19 @@
|
||||
#!/usr/bin/python3
|
||||
import docker
|
||||
import jinja2
|
||||
|
||||
base_path = "/var/www/www.thsf.net/thsf.net/maintenance/templates"
|
||||
status_template = "status.html"
|
||||
|
||||
env = jinja2.Environment(loader=jinja2.FileSystemLoader(base_path),
|
||||
autoescape=True)
|
||||
template = env.get_template(status_template)
|
||||
|
||||
client = docker.from_env()
|
||||
for container in client.containers.list():
|
||||
if container.name == "thsf":
|
||||
cont = dict()
|
||||
cont["name"] = container.name
|
||||
cont["status"] = container.status
|
||||
cont["log"] = container.logs().decode('utf-8').replace('\n', '<br>')
|
||||
print(template.render(containers=[container]))
|
59
maintenance/style/maintenance.css
Normal file
59
maintenance/style/maintenance.css
Normal file
@ -0,0 +1,59 @@
|
||||
.body {
|
||||
|
||||
}
|
||||
.page_wrapper {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
align-content: center;
|
||||
text-align: center;
|
||||
padding-bottom: 5em;
|
||||
background-color: red;
|
||||
}
|
||||
.center_wrapper {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
text-align: center;
|
||||
background-color: blue;
|
||||
}
|
||||
.container_list {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
text-align: center;
|
||||
background-color: yellow;
|
||||
}
|
||||
.table_headers, .line {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
background-color: green;
|
||||
}
|
||||
.header, .status {
|
||||
font-weight: bold;
|
||||
border-width: 1px;
|
||||
border-style: solid;
|
||||
background-color: violet;
|
||||
}
|
||||
.table_content {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
text-align: center;
|
||||
background-color: cyan;
|
||||
}
|
||||
.status {
|
||||
font-weight: normal;
|
||||
}
|
||||
.container_log {
|
||||
|
||||
}
|
||||
.button {
|
||||
font-weight: bold;
|
||||
}
|
40
maintenance/templates/status.html
Normal file
40
maintenance/templates/status.html
Normal file
@ -0,0 +1,40 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang='zxx'>
|
||||
<head>
|
||||
<title>THSF 2023: Status page</title>
|
||||
<meta name="viewport" content="initial-scale=1.0">
|
||||
<meta http-equiv="content-type" content="text/html; charset=utf-8">
|
||||
<script src="/maintenance/scripts/maintenance.js"></script>
|
||||
<link rel="stylesheet"
|
||||
href="/maintenance/style/maintenance.css">
|
||||
<link rel="stylesheet"
|
||||
href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
|
||||
</head>
|
||||
<body>
|
||||
<div class="page_wrapper">
|
||||
<div class="center_wrapper">
|
||||
<div class="container_list">
|
||||
<div class="table_headers">
|
||||
<div class="header">Name</div>
|
||||
<div class="header">Status</div>
|
||||
<div class="header">Action</div>
|
||||
</div>
|
||||
<div class="table_content">
|
||||
{% for container in containers %}
|
||||
<div class="line">
|
||||
<div class="status">{{ container.name }}</div>
|
||||
<div class="status">{{ container.status }}</div>
|
||||
<div class="status">
|
||||
<i class="button fa-regular fa-recycle" onclick=""></i>
|
||||
</div>
|
||||
</div>
|
||||
<div class="container_log" id="logs">
|
||||
{{ container.logs }}
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
BIN
resources/thsf_2023.png
Normal file
BIN
resources/thsf_2023.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 55 KiB |
Loading…
Reference in New Issue
Block a user