def __make_server(self): self.__serverinfo = self.pbsquery.get_serverinfo()[self.servername] if self.debug_p: print 'FOOBAR: self.serverinfo =', self.__serverinfo for k,v in self.__serverinfo.iteritems(): self.__dict__[k] = None if k == 'state_count': # Example of state_count: Transit:0 Queued:-6458 Held:6383 Waiting:0 Running:964 Exiting:0 self.__dict__[k] = {} vals = v[0].strip().split(' ') for state in vals: statename = state.split(':')[0] stateval = int(state.split(':')[1]) self.__dict__[k][statename] = stateval elif k == 'resources_default': v['mem'] = Memory(v['mem'][0]) v['pmem'] = Memory(v['pmem'][0]) v['cput'] = pbstimestr_to_timedelta(v['cput'][0]) v['walltime'] = pbstimestr_to_timedelta(v['walltime'][0]) self.__dict__[k] = v elif k == 'resources_assigned': if 'mem' in v: v['mem'] = Memory(v['mem'][0]) if 'vmem' in v: v['vmem'] = Memory(v['vmem'][0]) if 'ncpus' in v: v['ncpus'] = int(v['ncpus'][0]) if 'nodect' in v: v['nodect'] = int(v['nodect'][0]) self.__dict__[k] = v elif k == 'scheduling' or k == 'query_other_jobs': if v[0] == 'True': v[0] = True elif v[0] == 'False': v[0] = False self.__dict__[k] = v[0] elif k == 'scheduler_iteration': self.__dict__[k] = datetime.timedelta(seconds=int(v[0])) elif k == 'next_job_number' or k == 'node_check_rate' or k == 'tcp_timeout' or k == 'total_jobs': self.__dict__[k] = int(v[0]) elif len(v) == 1: self.__dict__[k] = v[0] else: self.__dict__[k] = v
def __init__(self, name=None, pbsserver_dict=None): if name: self.name = name elif pbsserver_dict: self.name = pbsserver_dict['server'] else: print('ERROR: cannot find server name') raise for k,v in sorted(pbsserver_dict[self.name].iteritems()): if len(v) == 1: self.__dict__[k] = v[0] else: self.__dict__[k] = v # fix up the values self.next_job_number = int(self.next_job_number) self.total_jobs = int(self.total_jobs) self.node_check_rate = int(self.node_check_rate) self.scheduler_iteration = int(self.scheduler_iteration) self.tcp_timeout = int(self.tcp_timeout) self.log_events = int(self.log_events) self.scheduling = (self.scheduling == 'True') self.query_other_jobs = (self.query_other_jobs == 'True') states = self.state_count.strip().split(' ') self.state_count = {} for s in states: (st, val) = s.split(':') self.state_count[st] = int(val) for res,val in self.resources_assigned.iteritems(): if res == 'mem' or res == 'vmem' or res == 'pmem': self.resources_assigned[res] = Memory(self.resources_assigned[res][0]) elif res == 'ncpus' or res == 'nodect': self.resources_assigned[res] = int(self.resources_assigned[res][0]) for res,val in self.resources_default.iteritems(): if res == 'mem' or res == 'vmem' or res == 'pmem': self.resources_default[res] = Memory(self.resources_default[res][0]) elif res == 'cput' or res == 'walltime': self.resources_default[res] = pbstimestr_to_timedelta(self.resources_default[res][0])
def __init__(self, id=None, pbsjobs_dict=None, debug_p=False): self.debug_p = debug_p if not id: raise #self.__dict__ = pbsjobs_dict self.__pbsjobs_dict = pbsjobs_dict self.id = id self.name = pbsjobs_dict['Job_Name'][0] self.owner = pbsjobs_dict['Job_Owner'][0].split('@')[0] self.owner_node = pbsjobs_dict['Job_Owner'][0].split('@')[1] self.job_state = pbsjobs_dict['job_state'][0] self.state = self.job_state self.queue = pbsjobs_dict['queue'][0] self.server = pbsjobs_dict['server'][0] self.checkpoint = pbsjobs_dict['Checkpoint'][0] # ctime = time job was created self.ctime = datetime.datetime.fromtimestamp(int(pbsjobs_dict['ctime'][0])) self.error_path = pbsjobs_dict['Error_Path'][0] if 'init_work_dir' in pbsjobs_dict: self.init_work_dir = pbsjobs_dict['init_work_dir'][0] else: self.init_work_dir = None if 'exec_host' in pbsjobs_dict: self.exec_host = pbsjobs_dict['exec_host'][0].split('+') self.hosts = self.__list_unique_hosts() else: self.exec_host = None self.is_array_job = ('job_array_request' in pbsjobs_dict) if self.is_array_job: self.job_array_request = pbsjobs_dict['job_array_request'] self.job_array_id = pbsjobs_dict['job_array_id'] else: if pbsjobs_dict['Hold_Types'][0] == 'n': self.hold_types = False elif pbsjobs_dict['Hold_Types'][0] == 'y': self.hold_types = True else: raise "Don't know what Hold_Types this is" self.group_list = pbsjobs_dict['group_list'] self.group = self.group_list[0] self.join_path = pbsjobs_dict['Join_Path'][0] if pbsjobs_dict['Keep_Files'][0] == 'y': self.keep_files = True elif pbsjobs_dict['Keep_Files'][0] == 'n': self.keep_files = False else: raise "Don't know what Keep_Files this is" self.mail_points = pbsjobs_dict['Mail_Points'][0] if 'Mail_Users' in pbsjobs_dict: self.mail_users = pbsjobs_dict['Mail_Users'][0] else: self.mail_users = None # mtime = ??? self.mtime = datetime.datetime.fromtimestamp(int(pbsjobs_dict['mtime'][0])) self.output_path = pbsjobs_dict['Output_Path'][0] self.priority = int(pbsjobs_dict['Priority'][0]) # qtime = time job became eligible to run self.qtime = datetime.datetime.fromtimestamp(int(pbsjobs_dict['qtime'][0])) # Yes, it's misspelled if pbsjobs_dict['Rerunable'][0] == 'True': self.rerunnable = True elif pbsjobs_dict['Rerunable'][0] == 'False': self.rerunnable = False else: raise "Don't know what Rerunable this is" # requested resources self.resource_list = pbsjobs_dict['Resource_List'] self.resource_list['nodect'] = int(self.resource_list['nodect'][0]) if 'ncpus' in self.resource_list: self.resource_list['ncpus'] = int(self.resource_list['ncpus'][0]) else: self.resource_list['ncpus'] = self.__count_ncpus() self.ncpus = self.resource_list['ncpus'] self.resource_list['walltime'] = pbstimestr_to_timedelta(self.resource_list['walltime'][0]) self.resource_list['cput'] = pbstimestr_to_timedelta(self.resource_list['cput'][0]) self.resource_list['mem'] = Memory(self.resource_list['mem'][0]) self.resource_list['vmem'] = Memory(self.resource_list['vmem'][0]) self.resource_list['pmem'] = Memory(self.resource_list['pmem'][0]) if 'arch' in self.resource_list: self.resource_list['arch'] = self.resource_list['arch'][0] self.resource_list['nodes'] = self.resource_list['nodes'][0] if 'file' in self.resource_list: self.resource_list['file'] = Memory(self.resource_list['file'][0]) # resource_list['neednodes'] seems to only be available to admin users if 'neednodes' in self.resource_list: self.resource_list['neednodes'] = self.resource_list['neednodes'][0] # resources used self.resources_used = {} if 'resources_used' in pbsjobs_dict: self.resources_used['mem'] = Memory(pbsjobs_dict['resources_used']['mem'][0]) self.resources_used['vmem'] = Memory(pbsjobs_dict['resources_used']['vmem'][0]) self.resources_used['cput'] = pbstimestr_to_timedelta(pbsjobs_dict['resources_used']['cput'][0]) self.resources_used['walltime'] = pbstimestr_to_timedelta(pbsjobs_dict['resources_used']['walltime'][0]) if 'session_id' in pbsjobs_dict: self.session_id = int(pbsjobs_dict['session_id'][0]) else: self.session_id = None # remaining walltime self.walltime_remaining = 0 if 'Walltime' in pbsjobs_dict: wt_remaining_seconds = int(pbsjobs_dict['Walltime']['Remaining'][0]) # sometimes, this field gets corrupted with an impossible value if wt_remaining_seconds < sys.maxint: self.walltime_remaining = datetime.timedelta(seconds=int(pbsjobs_dict['Walltime']['Remaining'][0])) ### ### These properties are available only to admin user: ### if 'substate' in pbsjobs_dict: self.substate = int(pbsjobs_dict['substate'][0]) if 'Variable_List' in pbsjobs_dict: self.variable_list = pbsjobs_dict['Variable_List'] else: self.variable_list = None if 'euser' in pbsjobs_dict: self.euser = pbsjobs_dict['euser'][0] else: self.euser = None if 'egroup' in pbsjobs_dict: self.egroup = pbsjobs_dict['egroup'][0] else: self.egroup = None if 'hashname' in pbsjobs_dict: self.hashname = pbsjobs_dict['hashname'][0] else: self.hashname = None if 'queue_rank' in pbsjobs_dict: self.queue_rank = int(pbsjobs_dict['queue_rank'][0]) else: self.queue_rank = None if 'queue_type' in pbsjobs_dict: self.queue_type = pbsjobs_dict['queue_type'][0] else: self.queue_type = None ### End admin properties # etime = time job was queued (entered the queue) if 'etime' in pbsjobs_dict: self.etime = datetime.datetime.fromtimestamp(int(pbsjobs_dict['etime'][0])) else: self.etime = None if 'exit_status' in pbsjobs_dict: self.exit_status = int(pbsjobs_dict['exit_status'][0]) else: self.exit_status = None self.submit_args = pbsjobs_dict['submit_args'][0] if 'start_time' in pbsjobs_dict: self.start_time = datetime.datetime.fromtimestamp(int(pbsjobs_dict['start_time'][0])) else: self.start_time = None if 'start_count' in pbsjobs_dict: self.start_count = int(pbsjobs_dict['start_count'][0]) else: self.start_count = None if 'fault_tolerant' in pbsjobs_dict: if pbsjobs_dict['fault_tolerant'][0] == 'True': self.fault_tolerant = True else: self.fault_tolerant = False else: self.fault_tolerant = None if 'submit_host' in pbsjobs_dict: self.submit_host = pbsjobs_dict['submit_host'][0] else: self.submit_host = None # 'x' is usually the nodeset spec if 'x' in pbsjobs_dict: self.extra = pbsjobs_dict['x'][0] else: self.extra = None