def reschedule(self, backend_task_id, status=None, sub_ids=None, backend_ids=None): cmd = [os.path.join(DIRAC_BACKEND_DIR, 'script', 'dirac-run.sh')] cmd += ['reschedule'] cmd += ['--backend-task-id', str(backend_task_id)] if status: status = ensure_list(status) cmd += ['--job-status', ','.join(status)] elif sub_ids: sub_ids = ensure_list(sub_ids) cmd += ['--sub-ids', ','.join([str(x) for x in sub_ids])] elif backend_ids: backend_ids = ensure_list(backend_ids) cmd += ['--backend-ids', ','.join([str(x) for x in backend_ids])] try: output = subprocess.check_output(cmd) except subprocess.CalledProcessError as e: self._logger.error( 'Failed to reschedule task on Dirac backend: %s' % e) return return json.loads(output)
def __init__(self, param): self._param = param self._logger = logging.getLogger('JSUB') self.__job_group = param.get('jobGroup') self.__job_name = param.get('jobName') self.__banned_site = ensure_list(param.get('bannedSite', [])) if not self.__banned_site: self.__banned_site = ensure_list(param.get('bannedSites', [])) self.__site = ensure_list(param.get('site', [])) if not self.__site: self.__site = ensure_list(param.get('sites', [])) self.initialize_common_param()
def load_pkg_manager(self): if self.__pkg_mgr is None: from jsub.manager.package import PackageManager packages = self.load_config_manager().config_jsubrc('package') packages = ensure_list(packages) self.__pkg_mgr = PackageManager(self.load_schema_manager(), packages) return self.__pkg_mgr
def __package_deps(self, packages): pkgs = [] for pkg in packages: pkgs.append(pkg) pkg_config = _package_config(pkg) pkg_config = self.__schema_mgr.validate_package_config(pkg_config) if 'package' in pkg_config: sub_pkgs = ensure_list(pkg_config['package']) pkgs.append(self.__package_deps(sub_pkgs)) self.packages_config[pkg] = pkg_config return unique_list(pkgs)
def delete_task(self, backend_task_id, job_status): cmd = [os.path.join(DIRAC_BACKEND_DIR, 'script', 'dirac-run.sh')] cmd += ['delete'] job_status = ensure_list(job_status) cmd += ['--backend-task-id', str(backend_task_id)] cmd += ['--job-status', ','.join(job_status)] try: output = subprocess.check_output(cmd) except subprocess.CalledProcessError as e: self._logger.error('Failed to delete task on Dirac backend: %s' % e) return return json.loads(output)
import pytz from schema import Schema, And, Or, Use, Optional, Regex from jsub.util import ensure_list _timezone_map = {tz.lower(): tz for tz in pytz.all_timezones} _config_schema = { Optional('log_level', default='INFO'): And(str, Use(str.upper), lambda s: s in ('DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL')), Optional('time_zone', default='UTC'): And(str, Use(str.lower), lambda s: s in _timezone_map, Use(lambda s: _timezone_map[s])), Optional('package'): And(Or(str, [str]), Use(lambda f: ['jsub.exts'] + ensure_list(f))), } _task_profile_schema = { } class SchemaManager(object): def __init__(self): pass def validate_jsubrc_config(self, config): return config def validate_package_config(self, config): return config def validate_final_config(self, config):