def __init__(self, db_info): _db_client = mg.get_client(usr=db_info['user'], pwd=db_info['pwd'], db_name=db_info['db_name'], address=db_info['address'], port=SystemConstants.MONGODB_PORT) self.__db = mg.get_db(_db_client, SystemConstants.MONGODB_NAME) self.__workers_info = mg.get_col(self.__db, SystemConstants.WorkersInfo) self.__workers_resource_info = mg.get_col( self.__db, SystemConstants.WorkersResourceInfo) self.__messenger = Messenger(messenger_type='C/S', port=SystemConstants.DISCOVERY_PORT) self.__logger = utl.get_logger('DiscoveryLogger', 'DiscoveryLog.log')
def __init__(self, db_info, workers_details): self.__db_client = mg.get_client(usr=db_info['user'], pwd=db_info['pwd'], db_name=db_info['db_name'], address=db_info['address'], port=SystemConstants.MONGODB_PORT) self.__db = mg.get_db(self.__db_client, db_name=SystemConstants.MONGODB_NAME) self.__workers_info = workers_details
def main(): os.chdir('/home/%s/RESTfulSwarm/FrontEnd' % utl.get_username()) global db_address global messenger global db with open('../ActorsInfo.json') as f: data = json.load(f) with open('../DBInfo.json') as f: db_info = json.load(f) db_client = mg.get_client(usr=db_info['user'], pwd=db_info['pwd'], db_name=db_info['db_name'], address=db_info['address'], port=SystemConstants.MONGODB_PORT) db = mg.get_db(db_client, SystemConstants.MONGODB_NAME) jm_address = data['JM']['address'] messenger = Messenger(messenger_type='C/S', address=jm_address, port=SystemConstants.JM_PORT) fe_address = utl.get_local_address() template = { "swagger": "2.0", "info": { "title": "RESTfulSwarm", "description": "An RESTful application for Docker Swarm.", "contact": { "responsibleDeveloper": "Zhuangwei Kang", "email": "*****@*****.**" }, "version": "0.0.1" }, "host": '%s:%s' % (fe_address, SystemConstants.FE_PORT), "basePath": "", "schemes": [ "http", ] } swagger = Swagger(app, template=template) @app.route('/RESTfulSwarm/FE/request_new_job', methods=['POST']) @swag_from('./Flasgger/FrontEnd.yml', validation=True) def request_new_job(): global messenger # Write job data into MongoDB data = request.get_json() data.update({'submit_time': time.time()}) col_name = data['job_name'] m_col = mg.get_col(db, col_name) mg.insert_doc(m_col, data) # Notify job manager messenger.send(prompt='newJob', content=col_name) return 'OK', 200 @app.route('/RESTfulSwarm/FE/switch_scheduler/<new_scheduler>', methods=['GET']) @swag_from('./Flasgger/SwitchScheduler.yml') def switch_scheduler(new_scheduler): global messenger # Notify Job Manager to switch scheduler messenger.send(prompt='SwitchScheduler', content=new_scheduler) return 'OK', 200 os.chdir('/home/%s/RESTfulSwarm/ManagementEngine' % utl.get_username()) app.run(host=fe_address, port=SystemConstants.FE_PORT, debug=False)
def main(): # clear /etc/exports to avoid duplicated nfs client with open('/etc/exports', 'w') as f: f.write('') os.chdir('/home/%s/RESTfulSwarm/GlobalManager' % utl.get_username()) global db_address global db_client global db global worker_col global worker_resource_col global gm_address global dockerClient gm_address = utl.get_local_address() template = { "swagger": "2.0", "info": { "title": "RESTfulSwarm", "description": "An RESTful application for Docker Swarm.", "contact": { "responsibleDeveloper": "Zhuangwei Kang", "email": "*****@*****.**" }, "version": "0.0.1" }, "host": '%s:%s' % (gm_address, SystemConstants.GM_PORT), "basePath": "", "schemes": [ "http", ] } swagger = Swagger(app, template=template) dockerClient = docker.set_client() # mongodb with open('../DBInfo.json') as f: db_info = json.load(f) db_client = mg.get_client(usr=db_info['user'], pwd=db_info['pwd'], db_name=db_info['db_name'], address=db_info['address'], port=SystemConstants.MONGODB_PORT) db = mg.get_db(db_client, SystemConstants.MONGODB_NAME) worker_col = mg.get_col(db, SystemConstants.WorkersInfo) worker_resource_col = mg.get_col(db, SystemConstants.WorkersResourceInfo) # periodically prune unused network def prune_nw(): while True: networks = [] for job in job_buffer[:]: job_info = mg.filter_col(mg.get_col(db, job), 'job_name', job) if job_info is not None and job_info['status'] == 'Down': networks.append(job_info['job_info']['network']['name']) job_buffer.remove(job) docker.rm_networks(dockerClient, networks) print('Remove networks:', networks) time.sleep(60) prune_nw_thr = threading.Thread(target=prune_nw, args=()) prune_nw_thr.daemon = True prune_nw_thr.start() os.chdir('/home/%s/RESTfulSwarm/ManagementEngine' % utl.get_username()) app.run(host=gm_address, port=SystemConstants.GM_PORT, debug=False)