Beispiel #1
0
 def parse_record(self, record):
     '''parse an individual job record'''
     job = None
     resource_specs = {}
     resources_used = {}
     state = None
     host_str = None
     for line in record.split('\n'):
         line = line.strip()
         if state == 'exec_host':
             if not line.startswith('exec_port'):
                 host_str += line
                 continue
             else:
                 hosts = {}
                 for host in host_str.split('+'):
                     node, core = host.split('/')
                     if node not in hosts:
                         hosts[node] = []
                     hosts[node].append(core)
                 job.exec_host = hosts
                 state = None
                 host_str = None
         if line.startswith('Job Id:'):
             _, job_id = line.split(':', 1)
             job = PbsJob(self._config, job_id.strip())
         elif line.startswith('Job_Name ='):
             job.name = self._get_value(line)
         elif line.startswith('euser ='******'job_state = '):
             job.state = self._get_value(line)
         elif line.startswith('queue ='):
             job.queue = self._get_value(line)
         elif line.startswith('Account_Name ='):
             job.project = self._get_value(line)
         elif line.startswith('resources_used.walltime ='):
             walltime = self._get_value(line)
             resources_used['walltime'] = walltime2seconds(walltime)
         elif line.startswith('Resource_List.walltime ='):
             walltime = self._get_value(line)
             resource_specs['walltime'] = walltime2seconds(walltime)
         elif line.startswith('Resource_List.nodect = '):
             nodect = int(self._get_value(line))
             resource_specs['nodect'] = nodect
         elif line.startswith('exec_host ='):
             host_strs = self._get_value(line).split('+')
             exec_host = dict()
             for host_str in host_strs:
                 if '/' in host_str:
                     host, cores = host_str.split('/')
                     exec_host[host] = cores
                 else:
                     exec_host[host_str] = None
             job.exec_host = exec_host
         elif line.startswith('Resource_List.partition ='):
             job.partition = self._get_value(line)
     job.add_resource_specs(resource_specs)
     job.add_resources_used(resources_used)
     return job
 def __init__(self, config, event_defs, pbs_directive='#PBS'):
     '''Constructor'''
     super(PbsScriptParser, self).__init__(event_defs)
     self._config = config
     self._job = PbsJob(self._config)
     self._pbs_directive = pbs_directive
     regex = r'\s*{0}\s+(.+)$'.format(pbs_directive)
     self._pbs_re = re.compile(regex)
     regex = r'\s+{0}\s+(.+)$'.format(pbs_directive)
     self._pbs_indented_re = re.compile(regex)
     regex = r'\s*{0}\s+(.+)$'.format(pbs_directive)
     self._pbs_extract_re = re.compile(regex)
     self._pbs_option_parser = PbsOptionParser(self._config, event_defs,
                                               self._job)
     self._state = None
     self._line_nr = 0
     self._pbs = []
Beispiel #3
0
 def parse_file(self, file_name):
     '''Parse the specified log'''
     with open(file_name, 'r') as pbs_file:
         line_nr = 0
         for line in pbs_file:
             line_nr += 1
             line = line.rstrip()
             if not line:
                 continue
             try:
                 time_stamp, event_type, job_id, info_str = line.split(';')
                 if job_id not in self._jobs:
                     self._jobs[job_id] = PbsJob(self._config, job_id)
                 event = PbsJobEvent(time_stamp, event_type, info_str)
                 self._jobs[job_id].add_event(event)
             except:
                 msg = 'problem on line {0} in {1}'.format(line, file_name)
                 raise PbsLogParserError(msg)