Example #1
0
def show_summary():
    """Show summary data"""
    for group in go.options.groups:
        # get the members
        found_group = grp.getgrnam(group)
        group_members_idx = 3
        if found_group:
            go.options.users += found_group[group_members_idx]

    try:
        ustats, faults, categories = get_userjob_stats()
        if faults and not go.options.nagios:
            go.log.warning("Faults %s" % ([x[0] for x in faults]))
            go.log.debug("Faults %s" % (faults))
        cat_map = dict([(x[0], idx) for idx, x in enumerate(categories)])
    except Exception, err:
        msg = "show_jobs %s" % err
        critical_exit(msg)
Example #2
0
def show_summary():
    """Show summary data"""
    for group in go.options.groups:
        # get the members
        found_group = grp.getgrnam(group)
        group_members_idx = 3
        if found_group:
            go.options.users += found_group[group_members_idx]

    ustats, faults, categories = get_userjob_stats()
    if faults:
        go.log.warning("Faults %s" % ([x[0] for x in faults]))
        go.log.debug("Faults %s" % (faults))

    cat_map = dict([(x[0], idx) for idx, x in enumerate(categories)])

    if go.options.users:
        # remove all non-listed users
        for user in ustats.keys():
            if user not in go.options.users:
                del ustats[user]

    agg_ans = [0] * (len(categories) - 1) + [[]]
    for user, tmp in ustats.items():
        for i in range(len(categories)):
            agg_ans[i] += tmp[i]

    def make_msg(ans, msgtxt, ustats=None):
        """Make a NagiosResult instance from agg_ans"""
        msg = NagiosResult(msgtxt)

        for i in ['R', 'Q', 'RN', 'RC', 'RP', 'QN', 'QC', 'QP']:
            setattr(msg, i, ans[cat_map[i]])
        msg.O = len(ans[cat_map['O']])
        msg.QP /= 3600
        msg.RP /= 3600
        if ustats is not None:
            msg.running = ans[0]
            msg.queued = ans[4]
            # users with Running jobs
            msg.RU = sum([x[cat_map['R']] > 0 for x in ustats.values()])
            # users with Queued jobs
            msg.QU = sum([x[cat_map['Q']] > 0 for x in ustats.values()])
            # unique users
            msg.UU = sum([x[cat_map['R']] + x[cat_map['Q']] > 0 for x in ustats.values()])
        return msg

    msg = make_msg(agg_ans, 'show_jobs', ustats=ustats)
    if go.options.check:
        return msg

    txt = []
    run_template = "%s%s running jobs on %s nodes (%s cores, %s prochours)"
    queued_template = "%s%s queued jobs for %s nodes (%s cores, %s prochours)"
    other_template = "%sOther jobs: %s (%s)"

    run_values = ('', msg.R, msg.RN, msg.RC, int(msg.RP),)
    txt.append(run_template % run_values)
    queued_values = ('', msg.Q, msg.QN, msg.QC, int(msg.QP),)
    txt.append(queued_template % queued_values)

    if msg.O:
        txt.append(other_template % ('', msg.O, ','.join(agg_ans[cat_map['O']])))

    if go.options.detailed:
        indent = " " * 2
        users = ustats.keys()
        for user in sorted(users):
            txt.append("%s%s" % (indent, user))
            ans = ustats[user]
            tmpmsg = make_msg(ans, 'tmp')
            run_values = (indent * 2, tmpmsg.R, tmpmsg.RN, tmpmsg.RC, int(tmpmsg.RP),)
            txt.append(run_template % run_values)
            queued_values = (indent * 2, tmpmsg.Q, tmpmsg.QN, tmpmsg.QC, int(tmpmsg.QP),)
            txt.append(queued_template % queued_values)
            if tmpmsg.O:
                txt.append(other_template % (indent * 2, tmpmsg.O, ','.join(ans[cat_map['O']])))

    print "\n".join(txt)
    return
Example #3
0
def show_summary():
    """Show summary data"""
    for group in go.options.groups:
        # get the members
        found_group = grp.getgrnam(group)
        group_members_idx = 3
        if found_group:
            go.options.users += found_group[group_members_idx]

    ustats, faults, categories = get_userjob_stats()
    if faults:
        go.log.warning("Faults %s" % ([x[0] for x in faults]))
        go.log.debug("Faults %s" % (faults))

    cat_map = dict([(x[0], idx) for idx, x in enumerate(categories)])

    if go.options.users:
        # remove all non-listed users
        for user in ustats.keys():
            if user not in go.options.users:
                del ustats[user]

    agg_ans = [0] * (len(categories) - 1) + [[]]
    for user, tmp in ustats.items():
        for i in range(len(categories)):
            agg_ans[i] += tmp[i]

    def make_msg(ans, msgtxt, ustats=None):
        """Make a NagiosResult instance from agg_ans"""
        msg = NagiosResult(msgtxt)

        for i in ['R', 'Q', 'RN', 'RC', 'RP', 'QN', 'QC', 'QP']:
            setattr(msg, i, ans[cat_map[i]])
        msg.O = len(ans[cat_map['O']])
        msg.QP /= 3600
        msg.RP /= 3600
        if ustats is not None:
            msg.running = ans[0]
            msg.queued = ans[4]
            # users with Running jobs
            msg.RU = sum([x[cat_map['R']] > 0 for x in ustats.values()])
            # users with Queued jobs
            msg.QU = sum([x[cat_map['Q']] > 0 for x in ustats.values()])
            # unique users
            msg.UU = sum([
                x[cat_map['R']] + x[cat_map['Q']] > 0 for x in ustats.values()
            ])
        return msg

    msg = make_msg(agg_ans, 'show_jobs', ustats=ustats)
    if go.options.check:
        return msg

    txt = []
    run_template = "%s%s running jobs on %s nodes (%s cores, %s prochours)"
    queued_template = "%s%s queued jobs for %s nodes (%s cores, %s prochours)"
    other_template = "%sOther jobs: %s (%s)"

    run_values = (
        '',
        msg.R,
        msg.RN,
        msg.RC,
        int(msg.RP),
    )
    txt.append(run_template % run_values)
    queued_values = (
        '',
        msg.Q,
        msg.QN,
        msg.QC,
        int(msg.QP),
    )
    txt.append(queued_template % queued_values)

    if msg.O:
        txt.append(other_template %
                   ('', msg.O, ','.join(agg_ans[cat_map['O']])))

    if go.options.detailed:
        indent = " " * 2
        users = ustats.keys()
        for user in sorted(users):
            txt.append("%s%s" % (indent, user))
            ans = ustats[user]
            tmpmsg = make_msg(ans, 'tmp')
            run_values = (
                indent * 2,
                tmpmsg.R,
                tmpmsg.RN,
                tmpmsg.RC,
                int(tmpmsg.RP),
            )
            txt.append(run_template % run_values)
            queued_values = (
                indent * 2,
                tmpmsg.Q,
                tmpmsg.QN,
                tmpmsg.QC,
                int(tmpmsg.QP),
            )
            txt.append(queued_template % queued_values)
            if tmpmsg.O:
                txt.append(other_template %
                           (indent * 2, tmpmsg.O, ','.join(ans[cat_map['O']])))

    print "\n".join(txt)
    return
Example #4
0
           'detailed':('Report detailed information', None, 'store_true', False, 'D'),
           'groups':('Report for groups', None, "extend", [], 'g'),
           'nagios':('Report in nagios format', None, 'store_true', False, 'n'),
           'users':('Report for users', None, "extend", [], 'u'),
           }

go = simple_option(options)

for gr in go.options.groups:
    # get the members
    g = grp.getgrnam(gr)
    if g:
        go.options.users += g[3]

try:
    ustats, faults, categories = get_userjob_stats()
    if len(faults) > 0 and not go.options.nagios:
        go.log.warning("Faults %s" % ([x[0] for x in faults]))
        go.log.debug("Faults %s" % (faults))
    cat_map = dict([(x[0], idx) for idx, x in enumerate(categories)])
except Exception, err:
    if go.options.nagios:
        msg = "show_jobs CRITICAL %s" % err
    else:
        msg = "show_jobs %s" % err
    print msg
    sys.exit(2)

if len(go.options.users):
    # remove all non-listed users
    for user in ustats.keys():