9 Commits

7 changed files with 175 additions and 104 deletions

View File

@@ -4,14 +4,17 @@ import logging as lg
if __name__ == "__main__":
from judas_server.web.web_server import JudasWebServer
from judas_server.backend import BackendServer
lg.basicConfig(
level=lg.DEBUG,
format="%(asctime)s - %(name)s - %(levelname)s - %(message)s",
)
server = JudasWebServer(secret_key="dildo")
server.run(
backend_server = BackendServer()
web_server = JudasWebServer(backend=backend_server, secret_key="dildo")
web_server.run(
host="0.0.0.0",
port=5000,
)

View File

@@ -0,0 +1,3 @@
from .server import BackendServer
__all__ = ["BackendServer"]

View File

@@ -0,0 +1,48 @@
# -*- coding: utf-8 -*-
from __future__ import annotations
from typing import Any
import logging as lg
import random as rn
import threading
import time
class BackendServer:
def __init__(self) -> None:
self.logger: lg.Logger = lg.getLogger(
f"{__name__}.{self.__class__.__name__}"
)
self.logger.debug("Initializing Server...")
# TODO: add socket logic here
self.clients: dict[str, dict[str, dict[str, Any]]] = {
"C_01": {
"one_time": {
"hostname": "mock-host",
"platform": "windows 11",
"cpu_info": "i7",
},
"polled": {"cpu_usage": 0, "mem_usage": 0},
"ondemand": {},
}
}
self.running: bool = False
def start_polling(self) -> None:
self.running = True
def _poll_loop(self) -> None:
while self.running:
for client in self.clients.values():
client["polled"]["cpu"] = round(rn.uniform(0, 100), 1)
client["polled"]["ram"] = round(rn.uniform(0, 100), 1)
time.sleep(1)
def get_client_data(
self, client_id: str
) -> dict[str, dict[str, Any]] | None:
return self.clients.get(client_id, None)

View File

@@ -1,10 +1,13 @@
<!DOCTYPE html>
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>judas panel - details</title>
<link rel="stylesheet" href="{{ url_for('static', filename='css/style.css') }}">
<link
rel="stylesheet"
href="{{ url_for('static', filename='css/style.css') }}"
/>
</head>
<body>
<div id="wrapper">
@@ -16,7 +19,11 @@
<div class="button-container">
<p><a href="{{ url_for('panel') }}" class="link">Back to Panel</a></p>
<h2>{{ pc.id }}</h2>
<p><a href="{{ url_for('stream', pc_id=pc.id) }}" class="link">View Stream</a></p>
<p>
<a href="{{ url_for('stream', pc_id=pc.id) }}" class="link"
>View Stream</a
>
</p>
</div>
<table class="center-table details-table">
<tbody>
@@ -34,3 +41,4 @@
</div>
</body>
</html>

View File

@@ -3,30 +3,39 @@
from __future__ import annotations
import logging as lg
from typing import TYPE_CHECKING
from flask import Flask
from flask_login import LoginManager
from judas_server.web.user import load_user
if TYPE_CHECKING:
from judas_server.backend import BackendServer
class JudasWebServer:
def __init__(self, secret_key: str) -> None:
def __init__(self, backend: BackendServer, secret_key: str) -> None:
self.logger: lg.Logger = lg.getLogger(
f"{__name__}.{self.__class__.__name__}"
)
self.logger.debug("Initializing JudasWebServer...")
self.backend: BackendServer = backend
self.app: Flask = Flask(
__name__, static_folder="static", template_folder="templates"
)
self.app.secret_key = secret_key
self.app.config["WEB_SERVER"] = self
self.app.config["BACKEND"] = self.backend
# hard-code password
self.app.config["PASSWORD"] = "123"
# extensions
self.login_manager: LoginManager = LoginManager()
self.app.config["LoginManager"] = self.login_manager
self.configure_extensions()
self.init_routes()