def overview(): if request.method == 'GET': # reload, cleanup might delete jsons while webserver is running simulations = load_simulations(sims_path) deadline = to_esmf(datetime.now() - timedelta(seconds=5)) # only update stale & running simulations in overview kk = simulations.keys() for sim_id in kk: sim = simulations[sim_id] if sim['state']['wrf'] != 'complete': last_upd = sim.get('last_updated', '2000-01-01_00:00:00') if last_upd < deadline: sim['state'] = get_simulation_state(sim['log_file']) sim['last_updated'] = to_esmf(datetime.now()) f = sims_path + '/' + sim_id + '.json' if osp.isfile(f): json.dump(sim, open(f, 'w'), indent=4, separators=(',', ': ')) simulations[sim_id] = sim else: print('File %s no longer exists, deleting simulation' % f) del simulations[sim_id] return render_template('overview.html', simulations=simulations, urls=urls) elif request.method == 'POST': print 'Values returned by overview page:' sims_checked = request.form.getlist('sim_chk') print(sims_checked) for sim_id in sims_checked: # Only the simulation(s) checked in checkbox. if 'RemoveB' in request.form: print('Remove Sim: box checked= %s' % (sim_id)) cleanup_delete(sim_id) else: if 'CancelB' in request.form: print('Cancel Sim: box checked= %s' % (sim_id)) cleanup_cancel(sim_id) else: print('Error-No button push detected: box checked= %s' % (sim_id)) simulations = load_simulations(sims_path) return render_template('overview.html', simulations=simulations, urls=urls)
def cleanup_workspace(sim_id): simulations = load_simulations(sims_path) try: logging.info('Cleanup workspace for %s' % sim_id) sim_info = simulations[sim_id] cleanup_sim_workspace(sim_info, conf) except KeyError: logging.error('Simulation %s not found.' % sim_id)
def cleanup_cancel(sim_id): simulations = load_simulations(sims_path) try: logging.info('Canceling simulation %s' % sim_id) sim_info = simulations[sim_id] cancel_simulation(sim_info, conf) except KeyError: logging.error('Simulation %s not found.' % sim_id)
def cleanup_workspace(sim_id): simulations = load_simulations(sims_path) try: logging.info('Cleanup workspace for %s' % sim_id) sim_info = simulations[sim_id] cleanup_sim_workspace(sim_info,conf) except KeyError: logging.error('Simulation %s not found.' % sim_id)
def cleanup_cancel(sim_id): simulations = load_simulations(sims_path) try: logging.info('Canceling simulation %s' % sim_id) sim_info = simulations[sim_id] cancel_simulation(sim_info,conf) except KeyError: logging.error('Simulation %s not found.' % sim_id)
def cleanup_delete(sim_id): simulations = load_simulations(sims_path) try: logging.info('Deleting simulation %s' % sim_id) sim_info = simulations[sim_id] delete_simulation(sim_info, conf) except KeyError: logging.error('Simulation %s not found.' % sim_id) delete_simulation_files(sim_id, conf) # rm any stray files
def cleanup_delete(sim_id): simulations = load_simulations(sims_path) try: logging.info('Deleting simulation %s' % sim_id) sim_info = simulations[sim_id] delete_simulation(sim_info,conf) except KeyError: logging.error('Simulation %s not found.' % sim_id) delete_simulation_files(sim_id,conf) # rm any stray files
def overview(): if request.method == 'GET': # reload, cleanup might delete jsons while webserver is running simulations = load_simulations(sims_path) deadline = to_esmf(datetime.now() - timedelta(seconds=5)) # only update stale & running simulations in overview kk = simulations.keys() for sim_id in kk: sim = simulations[sim_id] if sim['state']['wrf'] != 'complete': last_upd = sim.get('last_updated', '2000-01-01_00:00:00') if last_upd < deadline: sim['state'] = get_simulation_state(sim['log_file']) sim['last_updated'] = to_esmf(datetime.now()) f = sims_path + '/' + sim_id + '.json' if osp.isfile(f): json.dump(sim, open(f,'w'), indent=4, separators=(',', ': ')) simulations[sim_id]=sim else: print('File %s no longer exists, deleting simulation' % f) del simulations[sim_id] return render_template('overview.html', simulations = simulations, urls=urls) elif request.method == 'POST': print 'Values returned by overview page:' sims_checked= request.form.getlist('sim_chk') print (sims_checked) for sim_id in sims_checked: # Only the simulation(s) checked in checkbox. if 'RemoveB' in request.form: print ('Remove Sim: box checked= %s' % (sim_id)) cleanup_delete(sim_id) else: if 'CancelB' in request.form: print ('Cancel Sim: box checked= %s' % (sim_id)) cleanup_cancel(sim_id) else: print ('Error-No button push detected: box checked= %s' % (sim_id)) simulations = load_simulations(sims_path) return render_template('overview.html', simulations = simulations, urls=urls)
def cleanup_list(): simulations = load_simulations(sims_path) print('%-30s desc' % 'id') print('-' * 40) for k in sorted(simulations): print('%-30s %s' % (k, simulations[k]['description']))
import stat import os.path as osp from subprocess import Popen from functools import wraps, update_wrapper import sys from cleanup import cleanup_delete, cleanup_cancel # global objects tracking state cluster = None simulations = {} profiles = None #conf params and state conf = load_sys_cfg() sims_path = conf['sims_path'] simulations = load_simulations(sims_path) root = conf['root'] host = conf['host'] debug = conf['debug'] in ['T' 'True' 't' 'true'] port=conf['port'] urls = {'submit': root+'/submit', 'welcome': root+'/start', 'overview': root+'/overview'} print ('Welcome page is http://%s:%s%s' % (host, port, urls['welcome']) ) app = Flask(__name__) # lifted from: http://arusahni.net/blog/2014/03/flask-nocache.html def nocache(view): @wraps(view) def no_cache(*args, **kwargs): response = make_response(view(*args, **kwargs))
import stat import os.path as osp from subprocess import Popen from functools import wraps, update_wrapper import sys from cleanup import cleanup_delete, cleanup_cancel # global objects tracking state cluster = None simulations = {} profiles = None #conf params and state conf = load_sys_cfg() sims_path = conf['sims_path'] simulations = load_simulations(sims_path) root = conf['root'] host = conf['host'] debug = conf['debug'] in ['T' 'True' 't' 'true'] port = conf['port'] urls = { 'submit': root + '/submit', 'welcome': root + '/start', 'overview': root + '/overview' } print('Welcome page is http://%s:%s%s' % (host, port, urls['welcome'])) app = Flask(__name__)