def connect_mongodb(): mongo_url = get_attr('MONGO_URI') client = MongoClient(mongo_url) dbname = get_attr('MONGO_DATABASE') db = client[ dbname] # 'examples' here is the database name.it will be created if it does not exist. # 如果 examples不存在,那么就会新建它 return db
def init(): redis_host = get_attr('REDIS_HOST') sub = get_attr('SUBSCRIBE') localhost = get_attr('LOCAL_HOST') listener = Messager(redis_host) listener.subscribe(sub) db = connect_mongodb() taskdao = TaskDao(db) processdao = ProcessDao(db) process = ProcessController(localhost) return localhost, listener, taskdao, processdao, process
def scaner(): mongodb = connect_mongodb() taskdao = TaskDao(mongodb) processdao = ProcessDao(mongodb) localhost = get_attr('LOCAL_HOST') print(localhost) while (True): task_list = taskdao.find_by_localhost_and_status(localhost, 'running') for t in task_list: starttime = t['starttime'] endtime = t['endtime'] print(starttime + " " + endtime) if endtime != '': if compare_time(time.strftime("%Y/%m/%d %H:%M"), starttime, endtime) is False: taskid = str(t['_id']) print(taskid) process_list = processdao.find_by_localhost_and_taskid( localhost, taskid) for p in process_list: if p['taskid'] == taskid and p['status'] != 'stopping': print("杀死进程%s" % (p['pid'])) # p.terminate() try: os.kill(p['pid'], signal.SIGKILL) except: continue delete(taskid, False) t['status'] = 'stopping' taskdao.save(t) processdao.delete_by_localhost_and_taskid( localhost, taskid) time.sleep(30)
def wait(taskid): mongodb = connect_mongodb() taskdao = TaskDao(mongodb) task = taskdao.find_by_id(taskid) starttime = task['starttime'] endtime = task['endtime'] localhost = get_attr('LOCAL_HOST') flag = False while (flag is False): flag = compare_time(time.strftime("%Y/%m/%d %H:%M"), starttime, endtime) time.sleep(30) if flag is True: task['status'] = 'running' taskdao.save(task) processdao = ProcessDao(mongodb) processdao.update_status_by_localhost_and_taskid( localhost, taskid, 'running') run(taskid)
def execute(command, process, taskdao, processdao): print(command) params = Analyze(command) localhost = get_attr('LOCAL_HOST') op = params.get('op') if op == 'starttask' or op == 'suspendtask' or op == 'resumetask' or op == 'terminatetask': taskid = params.get('taskid') task = taskdao.find_by_id(taskid) slave = task['slave'] print(slave) if localhost in slave: print(op) if op == 'starttask': status = taskdao.find_by_id(taskid)['status'] # status = params.get('status') if status == 'running': process.start_task(taskid, False) elif status == 'waitting': process.wait_task(taskid, False) elif op == 'suspendtask': process.suspend_task(taskid) elif op == 'resumetask': process.resume_task(taskid) elif op == 'terminatetask': process.terminate_task(taskid) elif op == 'suspendprocess' or op == 'resumeprocess' or op == 'terminateprocess': processid = params.get('processid') pro = processdao.find_by_id(processid) ip = pro['localhost'] pid = int(pro['pid']) if ip == localhost: if op == 'suspendprocess': process.suspend_process(pid) elif op == 'resumeprocess': process.resume_process(pid) elif op == 'terminateprocess': process.terminate_process(pid)
def connect_redis(): host = get_attr('REDIS_HOST') port = get_attr('REDIS_PORT') r = redis.Redis(host=host, port=port, db=0) return r