Files
Key-service-Server/Website/server_steering.py
T

268 lines
6.8 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import os
import requests
_var = "/opt/legendary-octo-garbanzo"
_cmd = "run-tenant-cmd.sh"
def add_dns(name: str, port: int) -> bool:
"""
Adds the subdomain to the DNS Routes
Input:
- name (Name of the subdomain) -> String
- port (Port number for the subdomain) -> int
Output:
- bool (True if adding of the Subdomain is active)
"""
# This is a placeholder function, as the actual implementation would depend on the DNS provider and how the DNS records are managed.
return False
def clear_special(var_:str) -> str:
"""
Clears the variable of any special carakters
Input:
- var -> String
Output:
- str cleared of the speacial carakters
"""
# Refactor the name varible to match the subdomain requirements
try:
var_ = var_.lower()
special_caracters1 = '^°!"§$%&/()=?\ß{[]}´`*~#,;.:<>|@€µ'
special_caracters2 = 'äüö'
for char in special_caracters1:
var_ = var_.replace(char, "")
for i in special_caracters2:
match i:
case "ü":
var_ = var_.replace(i, "ue")
case "ä":
var_ = var_.replace(i, "ae")
case "ö":
var_ = var_.replace(i, "oe")
except:
return False
def execute_script(wd_: str, file_: str, com_: str, com2_: str="None", com3_: str="None"):
"""
executes a script with the option of to extra inputs
Input:
- wd_ = working directory of the Inventorysystem -> String
- file_ = working file that youre targeting -> String
- com_ = first option -> String
- com2_ = second option (Optional if needet)-> String
- com3_ = third option (Optional if needet)-> String
Output:
- ether False if failed -> bool
- or result.stdout output of the executed process -> str
"""
import subprocess
update_path = os.path.join(wd_, file_)
if not update_path:
return False
if com2_ != "None":
cmd = f'bash "{update_path}" {com_} {com2_}'
elif com3_ != "None":
cmd = f'bash "{update_path}" {com_} {com2_} {com3_}'
else:
cmd = f'bash "{update_path}" {com_}'
try:
result = subprocess.run(
["bash", "-lc", cmd],
capture_output=True,
text=True,
cwd=wd_,
)
except:
return False
return result.stdout
class instace:
"""
This will give access to anything like:
- Instances for Clients
- starting
- stopping
- restarting
- list all Clients
modules:
- new(name:str)
- remove(name:str)
- status(name:str)
- restart(name:str)
- list()
"""
def __init__():
return list()
def new(name: str):
"""
Generates a new instance with the subdomain [name].invario.eu
Input:
- name -> String
Output:
- int (Port number for the subdomain) or False if the creation of the instance didnt work
"""
port_starter = 10002
port = port_starter
for i in instace.list():
port =+ 1
if execute_script(_var, _cmd, "add", clear_special(name), port):
add_dns(name, port)
return int(port)
else:
return False
def remove(name: str) -> bool:
"""
Removes a instance with the subdomain [name].invario.eu
Input:
- name -> String
Output:
- bool if the removal works (True: removal worked; False: didnt work)
"""
if execute_script(_var, _cmd, "remove", clear_special(name)):
return True
else:
return False
def status(name: str) -> bool:
"""
Returns if a instance with the subdomain [name].invario.eu is up.
Input:
- name -> String
Output:
- bool if the page is online (True: Is working; False: Isnt online)
"""
name = clear_special(name)
request = str(requests.get(f"{name}.invario.eu/test_connection"))
if request == '{"message":"Connection successful","status":"success","status_code":200}':
return True
else:
return False
def restart(name: str) -> bool:
"""
Restart an instance with the subdomain [name].invario.eu
Input:
- name -> String
Output:
- bool if the restart works (True: restart worked; False: didnt work)
"""
if execute_script(_var, _cmd, "restart-tenant", clear_special(name)):
return True
else:
return False
def list() -> list:
"""
List off all tenants.
Output:
- list with all tenants ("tenant1", "tenant2")
"""
result = execute_script(_var, _cmd, "list")
result = result.splitlines()
result.pop(0)
counter = 0
for i in result:
i = i.replace("- ", "")
result[counter] = i
counter += 1
return result
def backup(name: str) -> bool:
"""
Creates a backup of an instance with the subdomain [name].invario.eu
Input:
- name -> String
Output:
- bool if the backup works (True: backup worked; False: didnt work)
"""
import subprocess
try:
subprocess.run(
[
"docker",
"compose",
"-f",
"docker-compose-multitenant.yml",
"exec",
"-T",
"mongodb",
"mongodump",
f"--archive=/data/backups/inventar_{name}-$(date +%Y%m%d%H%M%S).gz",
"--gzip",
"--db",
f"inventar_{name}"
],
check=True
)
return True
except subprocess.CalledProcessError:
return False
class ussage:
"""
This will give informations about anything like:
- RAM Ussage of the server
- CPU Ussage of the server
- Strorage that is in use
modules:
- ram()
- cpu()
- storage()
"""
def ram() -> int:
"""
RAM ussage of the complete system
Output:
- ram ussage -> interger in GB
"""
#print("RAM usage (%):", ram.percent)
import psutil
ram = psutil.virtual_memory()
return int(round(ram.used / 1e9, 2))
def cpu() -> int:
"""
System cpu ussage
Output:
- cpu ussage -> integer in Percent
"""
import psutil
return int(psutil.cpu_percent(interval=1))
def storage() -> int:
"""
System storage ussage
Output:
- storager ussage -> integer in Percent
"""
pass