def test_provisioner(self): print 'test_provisoner' result = False prov = Provisioner() prov.add_workflow(self.tutorial_dir_1, None, 10) prov.update_schedule() print_sched(prov.entries) prov.update_schedule() print_sched(prov.entries) result = True self.assertTrue(result)
def main(vm_limit, config_path, skip_setup, local): azure_config = None if config_path: azure_config = AzureConfig(config_path) provisioner = Provisioner(vm_limit+1, azure_config, skip_setup, local) #+manager monitor = None statistics = Statistics() # Socket setup server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server_socket.bind(('localhost', PORT)) server_socket.listen(1) server_socket.settimeout(TIMEOUT) # Wait for connections until receive a stop message done = False no_budget = False while(True): if done and ((monitor != None and monitor.logwatcher.watching_none()) \ or (monitor == None and provisioner.logwatcher.watching_none())) \ or no_budget: break try: client_socket, _addr = server_socket.accept() msg = receive(client_socket) msgs = msg.split(' ') # Stop server if '--stop' in msgs[0]: done = True elif len(msgs) == 1: if monitor != None: raise Exception("Only one workflow can be monitored at a time") # Parse workflow to monitor monitor = Monitor() wf_dir = msgs[0] monitor.add_workflow(wf_dir) else: if monitor != None: raise Exception("Only one workflow can be monitored at a time") provisioner.update_budget_timestamp() # Parse and schedule a new Workflow instance wf_dir = msgs[0] pred = msgs[1] budget = msgs[2] provisioner.add_workflow(wf_dir, prediction_file=pred, budget=budget) try: provisioner.update_schedule() except BudgetException: no_budget = True client_socket.close() except timeout: if monitor == None and provisioner.workflow.jobs: provisioner.update_budget_timestamp() # Update and sync vms provisioner.allocate_new_vms() provisioner.deallocate_vms() provisioner.sync_machines() # Update, sync jobs, may reschedule try: provisioner.update_jobs() except BudgetException: no_budget = True # Statistics provisioner.update_wf_pred() statistics.schedshot(provisioner) statistics.snapshot(provisioner.timestamp, provisioner.schedule.entries, provisioner.machines) elif monitor and monitor.workflow.jobs: monitor.update_timestamp() monitor.sync_machines() monitor.sync_jobs() statistics.snapshot(monitor.timestamp, monitor.entries, monitor.machines) sys.stdout.flush() if monitor == None: entries = provisioner.schedule.entries else: entries = monitor.entries statistics.jobs(entries) statistics.dump() if provisioner.exp: try: provisioner.exp.deprovision() except Exception: pass condor_rm_jobs()
def main(vm_limit, config_path, skip_setup, local): azure_config = None if config_path: azure_config = AzureConfig(config_path) provisioner = Provisioner(vm_limit + 1, azure_config, skip_setup, local) #+manager monitor = None statistics = Statistics() # Socket setup server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server_socket.bind(('localhost', PORT)) server_socket.listen(1) server_socket.settimeout(TIMEOUT) # Wait for connections until receive a stop message done = False no_budget = False while (True): if done and ((monitor != None and monitor.logwatcher.watching_none()) \ or (monitor == None and provisioner.logwatcher.watching_none())) \ or no_budget: break try: client_socket, _addr = server_socket.accept() msg = receive(client_socket) msgs = msg.split(' ') # Stop server if '--stop' in msgs[0]: done = True elif len(msgs) == 1: if monitor != None: raise Exception( "Only one workflow can be monitored at a time") # Parse workflow to monitor monitor = Monitor() wf_dir = msgs[0] monitor.add_workflow(wf_dir) else: if monitor != None: raise Exception( "Only one workflow can be monitored at a time") provisioner.update_budget_timestamp() # Parse and schedule a new Workflow instance wf_dir = msgs[0] pred = msgs[1] budget = msgs[2] provisioner.add_workflow(wf_dir, prediction_file=pred, budget=budget) try: provisioner.update_schedule() except BudgetException: no_budget = True client_socket.close() except timeout: if monitor == None and provisioner.workflow.jobs: provisioner.update_budget_timestamp() # Update and sync vms provisioner.allocate_new_vms() provisioner.deallocate_vms() provisioner.sync_machines() # Update, sync jobs, may reschedule try: provisioner.update_jobs() except BudgetException: no_budget = True # Statistics provisioner.update_wf_pred() statistics.schedshot(provisioner) statistics.snapshot(provisioner.timestamp, provisioner.schedule.entries, provisioner.machines) elif monitor and monitor.workflow.jobs: monitor.update_timestamp() monitor.sync_machines() monitor.sync_jobs() statistics.snapshot(monitor.timestamp, monitor.entries, monitor.machines) sys.stdout.flush() if monitor == None: entries = provisioner.schedule.entries else: entries = monitor.entries statistics.jobs(entries) statistics.dump() if provisioner.exp: try: provisioner.exp.deprovision() except Exception: pass condor_rm_jobs()