Пример #1
0
    def __init__(self, config, name):
        # Determine ROOT path from previous settings / environment / config file
        def _check_root_dn(loc, obj):
            if os.path.isdir(obj):
                return obj
            raise ConfigError(
                'Either set environment variable "ROOTSYS" or set option "root path"!'
            )

        self._root_dn = config.get_dn('root path',
                                      os.environ.get('ROOTSYS', ''),
                                      persistent=True,
                                      on_change=TriggerInit('sandbox'),
                                      on_valid=_check_root_dn)
        logging.getLogger('task').info('Using the following ROOT path: %s',
                                       self._root_dn)

        # Special handling for executables bundled with ROOT
        self._executable = config.get('executable',
                                      on_change=TriggerInit('sandbox'))
        exe_full = os.path.join(self._root_dn, 'bin',
                                self._executable.lstrip('/'))
        self._is_builtin = os.path.exists(exe_full)
        if self._is_builtin:
            config.set('send executable', 'False')
            # store resolved built-in executable path?

        # Apply default handling from UserTask
        UserTask.__init__(self, config, name)
        self._update_map_error_code2msg(get_path_share('gc-run.root.sh'))

        # TODO: Collect lib files needed by executable
        self._lib_fn_list = []
Пример #2
0
	def __init__(self, config, name):
		DataTask.__init__(self, config, name)
		config.set('area files matcher mode', 'ShellStyleMatcher')

		# SCRAM settings
		scram_arch_default = unspecified
		scram_project = config.get_list('scram project', [])
		if scram_project:  # manual scram setup
			if len(scram_project) != 2:
				raise ConfigError('%r needs exactly 2 arguments: <PROJECT> <VERSION>' % 'scram project')
			self._project_area = None
			self._project_area_selector_list = None
			self._scram_project = scram_project[0]
			self._scram_project_version = scram_project[1]
			# ensure project area is not used
			if 'project area' in config.get_option_list():
				raise ConfigError('Cannot specify both %r and %r' % ('scram project', 'project area'))

		else:  # scram setup used from project area
			self._project_area = config.get_dn('project area')
			self._always_matcher = Matcher.create_instance('AlwaysMatcher', config, [''])
			self._project_area_base_fn = config.get_bool('area files basename', True,
				on_change=TriggerInit('sandbox'))
			self._project_area_matcher = config.get_matcher('area files',
				'-.* -config bin lib python module data *.xml *.sql *.db *.cfi *.cff *.py -CVS -work.* *.pcm',
				default_matcher='BlackWhiteMatcher', on_change=TriggerInit('sandbox'))
			self._log.info('Project area found in: %s', self._project_area)

			# try to determine scram settings from environment settings
			scram_path = os.path.join(self._project_area, '.SCRAM')
			scram_env = self._parse_scram_file(os.path.join(scram_path, 'Environment'))
			try:
				self._scram_project = scram_env['SCRAM_PROJECTNAME']
				self._scram_project_version = scram_env['SCRAM_PROJECTVERSION']
			except:
				raise ConfigError('Installed program in project area not recognized.')

			def filter_arch_dir(dn):
				return os.path.isdir(os.path.join(scram_path, dn))
			for arch_dir in sorted(ifilter(filter_arch_dir, os.listdir(scram_path))):
				scram_arch_default = arch_dir

		self._scram_version = config.get('scram version', 'scramv1')
		self._scram_arch = config.get('scram arch', scram_arch_default)

		self._scram_req_list = []
		if config.get_bool('scram arch requirements', True, on_change=None):
			self._scram_req_list.append((WMS.SOFTWARE, 'VO-cms-%s' % self._scram_arch))
		if config.get_bool('scram project requirements', False, on_change=None):
			self._scram_req_list.append((WMS.SOFTWARE, 'VO-cms-%s' % self._scram_project))
		if config.get_bool('scram project version requirements', False, on_change=None):
			self._scram_req_list.append((WMS.SOFTWARE, 'VO-cms-%s' % self._scram_project_version))
Пример #3
0
	def __init__(self, config, prefix='', executable_default=unspecified):
		init_sandbox = TriggerInit('sandbox')
		self._executable_send = config.get_bool('%s send executable' % prefix, True,
			on_change=init_sandbox)
		if self._executable_send:
			self._executable = config.get_fn('%s executable' % prefix, executable_default,
				on_change=init_sandbox)
		else:
			self._executable = config.get('%s executable' % prefix, executable_default,
				on_change=init_sandbox)
		self._arguments = config.get('%s arguments' % prefix, '', on_change=init_sandbox)
Пример #4
0
	def __init__(self, config, name):
		name = (name or self.__class__.__name__).upper().replace('.', '_')
		NamedPlugin.__init__(self, config, name)
		self._wait_idle = config.get_int('wait idle', 60, on_change=None)
		self._wait_work = config.get_int('wait work', 10, on_change=None)
		self._job_parser = config.get_plugin('job parser', 'JobInfoProcessor',
			cls='JobInfoProcessor', on_change=None)
		self._remote_event_handler = config.get_composited_plugin(
			['remote monitor', 'remote event handler'], '', 'MultiRemoteEventHandler',
			cls=RemoteEventHandler, bind_kwargs={'tags': [self]},
			require_plugin=False, on_change=TriggerInit('sandbox')) or RemoteEventHandler(config, 'dummy')
Пример #5
0
    def __init__(self, config,
                 name):  # Read configuration options and init vars
        NamedPlugin.__init__(self, config, name)
        init_sandbox = TriggerInit('sandbox')
        self._var_checker = NoVarCheck(config)

        # Task requirements
        # Move this into parameter manager?
        jobs_config = config.change_view(view_class='TaggedConfigView',
                                         add_sections=['jobs'],
                                         add_tags=[self])
        self.wall_time = jobs_config.get_time('wall time', on_change=None)
        self._cpu_time = jobs_config.get_time('cpu time',
                                              self.wall_time,
                                              on_change=None)
        self._cores = jobs_config.get_int(['cores', 'cpus'], 1, on_change=None)
        self._memory = jobs_config.get_int('memory', -1, on_change=None)
        self._job_timeout = jobs_config.get_time('node timeout',
                                                 -1,
                                                 on_change=init_sandbox)

        # Compute / get task ID
        self._task_id = config.get('task id',
                                   'GC' + md5_hex(str(time.time()))[:12],
                                   persistent=True)
        self._task_date = config.get('task date',
                                     time.strftime('%Y-%m-%d'),
                                     persistent=True,
                                     on_change=init_sandbox)
        self._task_time = config.get('task time',
                                     time.strftime('%H%M%S'),
                                     persistent=True,
                                     on_change=init_sandbox)
        task_name_generator = config.get_plugin('task name generator',
                                                'DefaultTaskName',
                                                cls=TaskNamePlugin)
        self._task_name = task_name_generator.get_name(self)
        self._task_config_name = config.get_config_name()
        self._job_name_generator = config.get_plugin('job name generator',
                                                     'DefaultJobName',
                                                     cls=JobNamePlugin)

        # Storage setup
        storage_config = config.change_view(view_class='TaggedConfigView',
                                            set_classes=None,
                                            set_names=None,
                                            add_sections=['storage'],
                                            add_tags=[self])
        scratch_space_used = storage_config.get_int('scratch space used',
                                                    5000,
                                                    on_change=init_sandbox)
        lz_space_used = storage_config.get_int('landing zone space used',
                                               100,
                                               on_change=init_sandbox)
        self._task_var_dict = {
            # Space limits
            'SCRATCH_UL':
            scratch_space_used,
            'SCRATCH_LL':
            storage_config.get_int('scratch space left',
                                   1,
                                   on_change=init_sandbox),
            'LANDINGZONE_UL':
            lz_space_used,
            'LANDINGZONE_LL':
            storage_config.get_int('landing zone space left',
                                   1,
                                   on_change=init_sandbox),
        }
        storage_config.set('se output pattern', 'job_@GC_JOB_ID@_@X@')
        self._se_min_size = storage_config.get_int('se min size',
                                                   -1,
                                                   on_change=init_sandbox)
        self._disk_min = max(scratch_space_used, lz_space_used)

        self._sb_in_fn_list = config.get_path_list('input files', [],
                                                   on_change=init_sandbox)
        self._sb_out_fn_list = config.get_list('output files', [],
                                               on_change=init_sandbox)
        self._do_gzip_std_output = config.get_bool('gzip output',
                                                   True,
                                                   on_change=init_sandbox)

        self._subst_files = config.get_list('subst files', [],
                                            on_change=init_sandbox)
        self._dependencies = lmap(
            str.lower, config.get_list('depends', [], on_change=init_sandbox))

        # Get error messages from gc-run.lib comments
        self.map_error_code2msg = {}
        self._update_map_error_code2msg(get_path_share('gc-run.lib'))

        # Init parameter source manager
        psrc_repository = {}
        self._setup_repository(config, psrc_repository)
        pfactory = config.get_plugin('internal parameter factory',
                                     'BasicParameterFactory',
                                     cls=ParameterFactory,
                                     bind_kwargs={
                                         'tags': [self],
                                         'inherit': True
                                     })
        self._source = config.get_plugin(
            'parameter adapter',
            'TrackedParameterAdapter',
            cls=ParameterAdapter,
            pargs=(pfactory.get_psrc(psrc_repository), ))
        self._log.log(logging.DEBUG3, 'Using parameter adapter %s',
                      repr(self._source))

        self._log.info('Current task ID: %s', self._task_id)
        self._log.info('Task started on: %s', self._task_date)