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)
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
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
'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():