Exemplo n.º 1
0
def show_individual():
    """Show individual job details"""
    all_jobs = get_jobs_dict()
    jobid_ok = []
    # make valid job id list
    if go.options.jobs is not None:
        for jobdescr in go.options.jobs:
            reg = re.compile(r'' + jobdescr)
            for jobid in all_jobs.keys():
                if reg.search(jobid) and jobid not in jobid_ok:
                    jobid_ok.append(jobid)

    # filter out jobs
    for jobid in all_jobs.keys():
        if jobid not in jobid_ok:
            all_jobs.pop(jobid)

    # do something
    if go.options.show:
        if 'nodes' in go.options.show:
            # show the unqiue nodes, comma separated
            nodes = set()
            for job in all_jobs.values():
                if 'exec_hosts' in job['derived']:
                    nodes.update(job['derived']['exec_hosts'].keys())

            print "Nodes: %s" % ' '.join(nodes)
Exemplo n.º 2
0
def show_individual():
    """Show individual job details"""
    all_jobs = get_jobs_dict()
    jobid_ok = []
    # make valid job id list
    if go.options.jobs is not None:
        for jobdescr in go.options.jobs:
            reg = re.compile(r'' + jobdescr)
            for jobid in all_jobs.keys():
                if reg.search(jobid) and jobid not in jobid_ok:
                    jobid_ok.append(jobid)

    # filter out jobs
    for jobid in all_jobs.keys():
        if jobid not in jobid_ok:
            all_jobs.pop(jobid)

    # do something
    if go.options.show:
        if 'nodes' in go.options.show:
            # show the unqiue nodes, comma separated
            nodes = set()
            for job in all_jobs.values():
                if 'exec_hosts' in job['derived']:
                    nodes.update(job['derived']['exec_hosts'].keys())

            print "Nodes: %s" % ' '.join(nodes)
Exemplo n.º 3
0
    def test_get_jobs_dict(self):
        """Test get_jobs_dict"""

        # output from
        #     python -c 'import pprint;from vsc.jobs.pbs.jobs import get_jobs;a={};eval("a.update(%s)" % get_jobs());pprint.pprint(a)'
        # The jobdata however should be PBS Query instances, and get_jobs_dict uses get_nodes() method call

        testdata = os.path.join(os.path.dirname(__file__), 'testpbs', 'pbs_get_jobs_data_master21_t51')
        jobs = {}
        eval("jobs.update(%s)" % open(testdata).read().replace("\n",''))

        with patch('vsc.jobs.pbs.jobs.get_jobs', return_value=wrap_jobdata(jobs)):
            res = get_jobs_dict()
            print res
            sids = sorted(res.keys())

            self.assertEqual(len(res), 6, msg='6 jobs found')
            self.assertEqual([res[x]['job_state'][0] for x in sids], ['R', 'R', 'Q', 'Q', 'Q', 'Q'], msg='jobs in expected states')

            self.assertEqual(res[sids[0]]['derived'], {
                'cores': 20,
                'exec_hosts': {'node2617.swalot.gent.vsc': 1},
                'nodes': 1,
                'state': 'R',
                'totalwalltimesec': 14400,
                'used_cput': 6751,
                'used_mem': 24045981696,
                'used_vmem': 25629622272,
                'used_walltime': 344,
                'user': '******',
            }, msg='first job has expected derived data')
Exemplo n.º 4
0
    def test_get_jobs_dict(self):
        """Test get_jobs_dict"""

        # output from
        #     python -c 'import pprint;from vsc.jobs.pbs.jobs import get_jobs;a={};eval("a.update(%s)" % get_jobs());pprint.pprint(a)'
        # The jobdata however should be PBS Query instances, and get_jobs_dict uses get_nodes() method call

        testdata = os.path.join(os.path.dirname(__file__), 'testpbs',
                                'pbs_get_jobs_data_master21_t51')
        jobs = {}
        eval("jobs.update(%s)" % open(testdata).read().replace("\n", ''))

        with patch('vsc.jobs.pbs.jobs.get_jobs',
                   return_value=wrap_jobdata(jobs)):
            res = get_jobs_dict()
            print res
            sids = sorted(res.keys())

            self.assertEqual(len(res), 6, msg='6 jobs found')
            self.assertEqual([res[x]['job_state'][0] for x in sids],
                             ['R', 'R', 'Q', 'Q', 'Q', 'Q'],
                             msg='jobs in expected states')

            self.assertEqual(res[sids[0]]['derived'], {
                'cores': 20,
                'exec_hosts': {
                    'node2617.swalot.gent.vsc': 1
                },
                'nodes': 1,
                'state': 'R',
                'totalwalltimesec': 14400,
                'used_cput': 6751,
                'used_mem': 24045981696,
                'used_vmem': 25629622272,
                'used_walltime': 344,
                'user': '******',
            },
                             msg='first job has expected derived data')
Exemplo n.º 5
0
def main():
    """Main method"""

    ns = {}
    for node, details in get_nodes_dict().items():
        derived = details['derived']

        if not 'np' in derived:
            _log.warning('np not in derived from node %s' % node)
            continue
        np = derived['np']

        if not 'physmem' in derived:
            _log.warning('physmem not in derived from node %s' % node)
            continue
        mem = derived['physmem']

        ns[node] = {
                    'np': np,
                    'mem': mem,
                    'avg': int(mem / np),
                    }

    toomuch = {}

    MB = 1024 ** 2

    for name, details in get_jobs_dict().items():
        derived = details['derived']
        if not derived['state'] in ('R',):
            continue

        if not 'user' in derived:
            _log.warning("no user in derived job name %s" % name)
            continue
        user = derived['user']

        if not 'used_mem' in derived:
            _log.warning("no used_mem in derived job name %s" % name)
            continue
        used_mem = derived['used_mem']

        if not 'exec_hosts' in derived:
            _log.warning("no exec_hosts in derived job name %s" % name)
            continue
        exec_hosts = derived['exec_hosts']

        cores = sum(exec_hosts.values())

        used_avg_mem = int(used_mem / cores)

        for host in exec_hosts.keys():
            # more then avg on node?
            if used_avg_mem > ns[host]['avg']:
                if not user in toomuch:
                    toomuch[user] = {}
                if not host in toomuch[user]:
                    toomuch[user][host] = []

                toomuch[user][host].append([name, used_avg_mem / MB, ns[host]['avg'] / MB])

    users = toomuch.keys()
    users.sort()

    txt = []
    for user in users:
        txt.append("%s:" % user)
        for host, jobs in toomuch[user].items():
            txt.append("\t%s:\t%s\n" % (host, ' '.join([str(x) for x in jobs])))

    if len(txt) > 0:
        print "\n".join(txt)
    else:
        print "All ok"
Exemplo n.º 6
0
    if not 'physmem' in derived:
        _log.warning('physmem not in derived from node %s' % node)
        continue
    mem = derived['physmem']

    ns[node] = {
                'np': np,
                'mem': mem,
                'avg': int(mem / np),
                }

toomuch = {}

MB = 1024 ** 2

for name, details in get_jobs_dict().items():
    derived = details['derived']
    if not derived['state'] in ('R',):
        continue

    if not 'user' in derived:
        _log.warning("no user in derived job name %s" % name)
        continue
    user = derived['user']

    if not 'used_mem' in derived:
        _log.warning("no used_mem in derived job name %s" % name)
        continue
    used_mem = derived['used_mem']

    if not 'exec_hosts' in derived:
Exemplo n.º 7
0
def main():
    """Main method"""

    ns = {}
    for node, details in get_nodes_dict().items():
        derived = details['derived']

        if not 'np' in derived:
            _log.warning('np not in derived from node %s' % node)
            continue
        np = derived['np']

        if not 'physmem' in derived:
            _log.warning('physmem not in derived from node %s' % node)
            continue
        mem = derived['physmem']

        ns[node] = {
            'np': np,
            'mem': mem,
            'avg': int(mem / np),
        }

    toomuch = {}

    MB = 1024**2

    for name, details in get_jobs_dict().items():
        derived = details['derived']
        if not derived['state'] in ('R', ):
            continue

        if not 'user' in derived:
            _log.warning("no user in derived job name %s" % name)
            continue
        user = derived['user']

        if not 'used_mem' in derived:
            _log.warning("no used_mem in derived job name %s" % name)
            continue
        used_mem = derived['used_mem']

        if not 'exec_hosts' in derived:
            _log.warning("no exec_hosts in derived job name %s" % name)
            continue
        exec_hosts = derived['exec_hosts']

        cores = sum(exec_hosts.values())

        used_avg_mem = int(used_mem / cores)

        for host in exec_hosts.keys():
            # more then avg on node?
            if used_avg_mem > ns[host]['avg']:
                if not user in toomuch:
                    toomuch[user] = {}
                if not host in toomuch[user]:
                    toomuch[user][host] = []

                toomuch[user][host].append(
                    [name, used_avg_mem / MB, ns[host]['avg'] / MB])

    users = toomuch.keys()
    users.sort()

    txt = []
    for user in users:
        txt.append("%s:" % user)
        for host, jobs in toomuch[user].items():
            txt.append("\t%s:\t%s\n" % (host, ' '.join([str(x)
                                                        for x in jobs])))

    if len(txt) > 0:
        print "\n".join(txt)
    else:
        print "All ok"