manager.py 1.38 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
#!/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()
Andreas Valder's avatar
Andreas Valder committed
20
		time.sleep(1)
Andreas Valder's avatar
Andreas Valder committed
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

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

Andreas Valder's avatar
Andreas Valder committed
46
@sched_func(5)
Andreas Valder's avatar
Andreas Valder committed
47
48
49
50
51
52
53
54
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']) ] )
Andreas Valder's avatar
Andreas Valder committed
55
	print("forked")
Andreas Valder's avatar
Andreas Valder committed
56
57

while True:
Andreas Valder's avatar
Andreas Valder committed
58
	time.sleep(10)