#!/usr/bin/env python3 import time import threading import sched import random import traceback import configparser import psutil import subprocess from workerapi import WorkerApi import json config = configparser.ConfigParser() config.read('config.ini') scheduler = sched.scheduler() def run_scheduler(): time.sleep(1) # weird things on startup while True: scheduler.run() time.sleep(1) def sched_func(delay, priority=0, firstdelay=None, args=[], kargs={}): if firstdelay == None: firstdelay = random.randint(1, 10) def wrapper(func): def sched_wrapper(): try: func(*args, **kargs) except Exception: traceback.print_exc() scheduler.enter(delay, priority, sched_wrapper) scheduler.enter(firstdelay, priority, sched_wrapper) return func return wrapper api = WorkerApi(config['API']['BASE'],config['API']['KEY']) threading.Thread(target=run_scheduler, daemon=True).start() @sched_func(5) def ping_website_for_host(): # ping so the website knows our host is still alive if not api.worker_ping(): print("Error sending host ping") procs = [] while True: for p in procs: p.poll() if p.returncode == None: continue print('done', p.returncode) p.wait() procs.remove(p) if psutil.cpu_percent() > 85: print("SLEEP CPU") time.sleep(0.1) continue j = api.worker_schedule(config['JOBS']['TYPES']) if not j: print("SLEEP NOJOB") time.sleep(1) continue print("id: %i, data: %s, all: %s"%(j['id'],j['data'],j)) procs.append(subprocess.Popen(['./worker.py', str(j['id']), str(j['type']), str(j['priority']) , str(j['data']) ] ))