コード例 #1
0
    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
コード例 #2
0
ファイル: Server.py プロジェクト: prehensilecode/qstatviewer
    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])
コード例 #3
0
ファイル: Job.py プロジェクト: prehensilecode/qstatviewer
    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