manager.py 1.37 KB
Newer Older
Andreas Valder's avatar
Andreas Valder committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
#!/usr/bin/env python3
import time
import threading
import sched
import random
import traceback
import configparser
import psutil
import subprocess
from workerapi import WorkerApi

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(10)

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")

@sched_func(10)
def get_job():
	if psutil.cpu_percent(interval=3) > 85:
		return
	j = api.worker_schedule(config['JOBS']['TYPES'])
	if not j:
		return
	print("id: %i, data: %s, all: %s"%(j['id'],j['data'],j))
	subprocess.Popen(['./worker.py', str(j['id']), str(j['type']), str(j['priority']) , str(j['data']) ] )

while True:
	time.sleep(10)