PyWebSockets/TimeWaster.py

69 lines
2.2 KiB
Python

import time, signal, random, os, json
from enum import Enum
from uuid import UUID, uuid4
class JobStatus(Enum):
QUEUED = 1
FINISHED = 2
ERRORED = 3
class TimeWaster:
def __init__(self):
self.running = True
self.jobs: list[JobResult] = []
if (os.path.exists("waster.log")): os.remove("waster.log")
self.logfd = os.open("waster.log", os.O_CREAT | os.O_WRONLY)
signal.signal(signal.SIGUSR1, self.handleCancelJob)
def handleNewJob(self):
msg = os.read(0, 1024)
msgs = msg.decode().split("<END>")
msgs.pop()
for message in msgs:
self.log(f"Got job: \"{message}\"")
data = json.loads(message)
self.jobs.append(JobResult(data["ID"], JobStatus.QUEUED, "exists i guess"))
# os.write(1, self.jobs[jobId])
def handleCancelJob(self, signum, stack):
while (len(self.jobs) > 0):
canceled: JobResult = self.jobs.pop(0)
self.log(f"Job Canceled: {canceled.id}")
self.back = True
def quit(self):
self.running = False
def main(self):
while self.running:
self.back = False
if (len(self.jobs) == 0):
self.handleNewJob()
else:
if (self.back): continue
job: JobResult = self.jobs[0]
if (self.back): continue
time.sleep(random.randrange(1, 10) / 10)
if (self.back): continue
job.status = JobStatus.FINISHED
job.result = f"done i guess"
os.write(1, f"{{\"ID\":{job.id},\"status\":{job.status.value},\"result\":\"{job.result}\"}}<END>".encode())
self.jobs.remove(job)
self.log(f"Finished Job: {job.id}")
def log(self, msg: str):
os.write(self.logfd, f"{msg}\n".encode())
class JobResult:
def __init__(self, id: int, status: JobStatus, result) -> None:
self.id = id
self.status = status
self.result = result
if __name__ == "__main__":
TimeWaster().main()
# while (True):
# data = os.read(0, 100).decode()
# print(data)
# if (data == "QUIT"): break