def get_calcs(db, request_get_dict, allowed_users, user_acl_on=False, id=None): """ :param db: a :class:`openquake.server.dbapi.Db` instance :param request_get_dict: a dictionary :param allowed_users: a list of users :param user_acl_on: if True, returns only the calculations owned by the user or the group :param id: if given, extract only the specified calculation :returns: list of tuples (job_id, user_name, job_status, calculation_mode, job_is_running, job_description) """ # helper to get job+calculation data from the oq-engine database filterdict = {} if id is not None: filterdict['id'] = id if 'calculation_mode' in request_get_dict: filterdict['calculation_mode'] = request_get_dict.get( 'calculation_mode') if 'is_running' in request_get_dict: is_running = request_get_dict.get('is_running') filterdict['is_running'] = valid.boolean(is_running) if 'relevant' in request_get_dict: relevant = request_get_dict.get('relevant') filterdict['relevant'] = valid.boolean(relevant) if 'limit' in request_get_dict: limit = int(request_get_dict.get('limit')) else: limit = 100 if 'start_time' in request_get_dict: # assume an ISO date string time_filter = "start_time >= '%s'" % request_get_dict.get('start_time') else: time_filter = 1 if user_acl_on: users_filter = "user_name IN (?X)" else: users_filter = 1 jobs = db( 'SELECT * FROM job WHERE ?A AND %s AND %s' ' ORDER BY id DESC LIMIT %d' % (users_filter, time_filter, limit), filterdict, allowed_users) return [ (job.id, job.user_name, job.status, job.calculation_mode, job.is_running, job.description, job.pid, job.hazard_calculation_id) for job in jobs ]
def get_calcs(db, request_get_dict, user_name, user_acl_on=False, id=None): """ :param db: a :class:`openquake.server.dbapi.Db` instance :param request_get_dict: a dictionary :param user_name: user name :param user_acl_on: if True, returns only the calculations owned by the user :param id: if given, extract only the specified calculation :returns: list of tuples (job_id, user_name, job_status, calculation_mode, job_is_running, job_description) """ # helper to get job+calculation data from the oq-engine database filterdict = {} # user_acl_on is true if settings.ACL_ON = True or when the user is a # Django super user if user_acl_on: filterdict['user_name'] = user_name if id is not None: filterdict['id'] = id if 'calculation_mode' in request_get_dict: filterdict['calculation_mode'] = request_get_dict.get( 'calculation_mode') if 'is_running' in request_get_dict: is_running = request_get_dict.get('is_running') filterdict['is_running'] = valid.boolean(is_running) if 'relevant' in request_get_dict: relevant = request_get_dict.get('relevant') filterdict['relevant'] = valid.boolean(relevant) if 'limit' in request_get_dict: limit = int(request_get_dict.get('limit')) else: limit = 100 if 'start_time' in request_get_dict: # assume an ISO date string time_filter = "start_time >= '%s'" % request_get_dict.get('start_time') else: time_filter = 1 jobs = db('SELECT * FROM job WHERE ?A AND %s ORDER BY id DESC LIMIT %d' % (time_filter, limit), filterdict) return [(job.id, job.user_name, job.status, job.calculation_mode, job.is_running, job.description) for job in jobs]
def get_calcs(db, request_get_dict, user_name, user_acl_on=False, id=None): """ :param db: a :class:`openquake.server.dbapi.Db` instance :param request_get_dict: a dictionary :param user_name: user name :param user_acl_on: if True, returns only the calculations owned by the user :param id: if given, extract only the specified calculation :returns: list of tuples (job_id, user_name, job_status, job_type, job_is_running, job_description) """ # helper to get job+calculation data from the oq-engine database filterdict = {} # user_acl_on is true if settings.ACL_ON = True or when the user is a # Django super user if user_acl_on: filterdict['user_name'] = user_name if id is not None: filterdict['id'] = id if 'job_type' in request_get_dict: filterdict['job_type'] = request_get_dict.get('job_type') if 'is_running' in request_get_dict: is_running = request_get_dict.get('is_running') filterdict['is_running'] = valid.boolean(is_running) if 'relevant' in request_get_dict: relevant = request_get_dict.get('relevant') filterdict['relevant'] = valid.boolean(relevant) if 'limit' in request_get_dict: limit = int(request_get_dict.get('limit')) else: limit = 100 if 'start_time' in request_get_dict: start = request_get_dict.get('start_time') # assume an ISO string else: # consider only calculations younger than 1 month # ISO string with format YYYY-MM-DD start = (datetime.today() - timedelta(30)).isoformat()[:10] time_filter = "start_time >= '%s'" % start jobs = db('SELECT *, %s FROM job WHERE ?A AND %s ORDER BY id DESC LIMIT %d' % (JOB_TYPE, time_filter, limit), filterdict) return [(job.id, job.user_name, job.status, job.job_type, job.is_running, job.description) for job in jobs]
def dbserver(cmd, dbhostport=None, dbpath=None): """ start/stop/restart the database server, or return its status """ if valid.boolean(config.get('dbserver', 'multi_user')): sys.exit('oq dbserver only works in single user mode') status = dbs.get_status() if cmd == 'status': print('dbserver ' + status) elif cmd == 'stop': if status == 'running': logs.dbcmd('stop') print('dbserver stopped') else: print('dbserver already stopped') elif cmd == 'start': if status == 'not-running': dbs.run_server(dbhostport, dbpath) else: print('dbserver already running') elif cmd == 'restart': if status == 'running': logs.dbcmd('stop') print('dbserver stopped') dbs.run_server(dbhostport, dbpath)
def flag_set(section, setting): """True if the given boolean setting is enabled in openquake.cfg :param string section: name of the configuration file section :param string setting: name of the configuration file setting :returns: True if the setting is enabled in openquake.cfg, False otherwise """ return valid.boolean(get(section, setting) or '')
def ensure_on(): """ Start the DbServer if it is off """ if get_status() == 'not-running': if valid.boolean(config.get('dbserver', 'multi_user')): sys.exit('Please start the DbServer: ' 'see the documentation for details') # otherwise start the DbServer automatically subprocess.Popen( [sys.executable, '-m', 'openquake.server.dbserver', '-l', 'INFO']) # wait for the dbserver to start waiting_seconds = 10 while get_status() == 'not-running': if waiting_seconds == 0: sys.exit('The DbServer cannot be started after 10 seconds. ' 'Please check the configuration') time.sleep(1) waiting_seconds -= 1
calculations.""" import os import sys import signal import traceback from openquake.baselib.performance import Monitor from openquake.hazardlib import valid from openquake.baselib import parallel from openquake.commonlib.oqvalidation import OqParam from openquake.commonlib import datastore, config, readinput from openquake.calculators import base, views, export from openquake.commonlib import logs TERMINATE = valid.boolean( config.get('distribution', 'terminate_workers_on_revoke') or 'false') USE_CELERY = config.get('distribution', 'oq_distribute') == 'celery' if USE_CELERY: import celery.task.control def set_concurrent_tasks_default(): """ Set the default for concurrent_tasks. Returns the number of live celery nodes (i.e. the number of machines). """ stats = celery.task.control.inspect(timeout=1).stats() if not stats: sys.exit("No live compute nodes, aborting calculation") num_cores = sum(stats[k]['pool']['max-concurrency'] for k in stats)