Compare commits
	
		
			2 Commits
		
	
	
		
			50e7693e9a
			...
			614c16750d
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | 614c16750d | ||
|   | a7a52e7d4c | 
							
								
								
									
										2
									
								
								.vscode/settings.json
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.vscode/settings.json
									
									
									
									
										vendored
									
									
								
							| @ -1,2 +0,0 @@ | |||||||
| { |  | ||||||
| } |  | ||||||
							
								
								
									
										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