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("") 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}\"}}".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