mirror of
https://github.com/blw1138/Zordon.git
synced 2025-12-17 16:58:12 +00:00
Remove Old Multi-Client Code / Refactoring (#13)
* Remove a lot of old code from render_queue regarding clients * More code cleanup * More code cleanup * Move everything around * Minor log change
This commit is contained in:
@@ -1,13 +1,10 @@
|
||||
import logging
|
||||
import platform
|
||||
from datetime import datetime
|
||||
|
||||
import psutil
|
||||
import requests
|
||||
from sqlalchemy import create_engine, Column, String, Integer
|
||||
from sqlalchemy import create_engine
|
||||
from sqlalchemy.orm import sessionmaker
|
||||
|
||||
from .render_workers.base_worker import RenderStatus, BaseRenderWorker, Base
|
||||
from .workers.base_worker import RenderStatus, BaseRenderWorker, Base
|
||||
|
||||
logger = logging.getLogger()
|
||||
|
||||
@@ -18,27 +15,6 @@ class JobNotFoundError(Exception):
|
||||
self.job_id = job_id
|
||||
|
||||
|
||||
class RenderClient(Base):
|
||||
__tablename__ = 'render_clients'
|
||||
id = Column(Integer, primary_key=True)
|
||||
hostname = Column(String)
|
||||
|
||||
def __init__(self, hostname):
|
||||
self.hostname = hostname
|
||||
|
||||
def is_available(self, timeout=3):
|
||||
try:
|
||||
response = requests.get(f"http://{self.hostname}:8080/api/status", timeout=timeout)
|
||||
if response.ok:
|
||||
return True
|
||||
except requests.ConnectionError as e:
|
||||
pass
|
||||
return False
|
||||
|
||||
def __repr__(self):
|
||||
return "client stuff"
|
||||
|
||||
|
||||
class RenderQueue:
|
||||
engine = create_engine('sqlite:///database.db')
|
||||
Base.metadata.create_all(engine)
|
||||
@@ -46,30 +22,19 @@ class RenderQueue:
|
||||
session = Session()
|
||||
job_queue = []
|
||||
maximum_renderer_instances = {'blender': 1, 'aerender': 1, 'ffmpeg': 4}
|
||||
hostname = None
|
||||
port = 8080
|
||||
client_mode = False
|
||||
server_hostname = None
|
||||
|
||||
last_saved_counts = {}
|
||||
|
||||
def __init__(self):
|
||||
pass
|
||||
|
||||
@classmethod
|
||||
def add_to_render_queue(cls, render_job, force_start=False, client=None):
|
||||
|
||||
if not client or render_job.client == cls.hostname:
|
||||
logger.debug('Adding priority {} job to render queue: {}'.format(render_job.priority, render_job))
|
||||
render_job.client = cls.hostname
|
||||
cls.job_queue.append(render_job)
|
||||
if force_start:
|
||||
cls.start_job(render_job)
|
||||
cls.session.add(render_job)
|
||||
cls.save_state()
|
||||
else:
|
||||
# todo: implement client rendering
|
||||
logger.warning('remote client rendering not implemented yet')
|
||||
def add_to_render_queue(cls, render_job, force_start=False):
|
||||
logger.debug('Adding priority {} job to render queue: {}'.format(render_job.priority, render_job))
|
||||
cls.job_queue.append(render_job)
|
||||
if force_start:
|
||||
cls.start_job(render_job)
|
||||
cls.session.add(render_job)
|
||||
cls.save_state()
|
||||
|
||||
@classmethod
|
||||
def all_jobs(cls):
|
||||
@@ -169,75 +134,3 @@ class RenderQueue:
|
||||
for job_status in RenderStatus:
|
||||
job_counts[job_status.value] = len(cls.jobs_with_status(job_status))
|
||||
return job_counts
|
||||
|
||||
@classmethod
|
||||
def status(cls):
|
||||
return {"timestamp": datetime.now().isoformat(),
|
||||
"platform": platform.platform(),
|
||||
"cpu_percent": psutil.cpu_percent(percpu=False),
|
||||
"cpu_percent_per_cpu": psutil.cpu_percent(percpu=True),
|
||||
"cpu_count": psutil.cpu_count(),
|
||||
"memory_total": psutil.virtual_memory().total,
|
||||
"memory_available": psutil.virtual_memory().available,
|
||||
"memory_percent": psutil.virtual_memory().percent,
|
||||
"job_counts": cls.job_counts(),
|
||||
"host_name": cls.hostname
|
||||
}
|
||||
|
||||
@classmethod
|
||||
def render_clients(cls):
|
||||
all_clients = cls.session.query(RenderClient).all()
|
||||
if not all_clients:
|
||||
cls.session.add(RenderClient(hostname=cls.hostname))
|
||||
cls.save_state()
|
||||
all_clients = cls.session.query(RenderClient).all()
|
||||
return all_clients
|
||||
|
||||
@classmethod
|
||||
def client_with_hostname(cls, hostname):
|
||||
return cls.session.query(RenderClient).filter(RenderClient.hostname == hostname).first()
|
||||
|
||||
@classmethod
|
||||
def register_client(cls, hostname):
|
||||
new_client = None
|
||||
err_msg = None
|
||||
|
||||
if hostname == cls.hostname:
|
||||
err_msg = "Cannot register same hostname as server"
|
||||
elif cls.client_with_hostname(hostname):
|
||||
err_msg = f"Client '{hostname}' already registered"
|
||||
else:
|
||||
new_client = RenderClient(hostname=hostname)
|
||||
if not new_client.is_available():
|
||||
cls.session.add(new_client)
|
||||
logger.info(f"Client '{hostname}' successfully registered")
|
||||
cls.save_state()
|
||||
else:
|
||||
err_msg = f"Cannot connect to client at hostname: {hostname}"
|
||||
|
||||
if err_msg:
|
||||
logger.warning(err_msg)
|
||||
return err_msg, 400
|
||||
else:
|
||||
return new_client.hostname
|
||||
|
||||
@classmethod
|
||||
def unregister_client(cls, hostname):
|
||||
success = False
|
||||
client = cls.client_with_hostname(hostname)
|
||||
if client and hostname != cls.hostname:
|
||||
cls.session.delete(client)
|
||||
cls.save_state()
|
||||
logger.info(f"Client '{hostname}' successfully unregistered")
|
||||
success = True
|
||||
return str(success)
|
||||
|
||||
@staticmethod
|
||||
def is_client_available(client_hostname, timeout=3):
|
||||
try:
|
||||
response = requests.get(f"http://{client_hostname}:8080/api/status", timeout=timeout)
|
||||
if response.ok:
|
||||
return True
|
||||
except requests.ConnectionError as e:
|
||||
pass
|
||||
return False
|
||||
|
||||
Reference in New Issue
Block a user