* Use getopt to handle command-line option.
* Include a help command.
This commit is contained in:
@@ -27,6 +27,14 @@ import re
|
||||
import subprocess
|
||||
import sys
|
||||
|
||||
class ParseError(RuntimeError):
|
||||
pass
|
||||
|
||||
class ProgramError(RuntimeError):
|
||||
pass
|
||||
|
||||
MYSELF = 'show-cluster-usage.py'
|
||||
|
||||
|
||||
def analyze_cluster_usage_by_users(qstat_f):
|
||||
"""Provides a summary analysis of cluster usage by users.
|
||||
@@ -91,20 +99,60 @@ def print_cluster_usage_by_users(usage):
|
||||
len(urec['xjobids'])))
|
||||
|
||||
|
||||
def help():
|
||||
msg = """\
|
||||
%(CMD)s - Shows cluster usage from SGE information
|
||||
|
||||
def main_default(save_qstat=True):
|
||||
The information is mainly drawn from `qstat -f` output,
|
||||
and analyzes the usage of the cluster in various ways..
|
||||
|
||||
Usage:
|
||||
|
||||
%(CMD)s
|
||||
%(CMD)s [qstat_file] [--save]
|
||||
Shows the cluster usage aggregated per user.
|
||||
""" \
|
||||
% dict(CMD=MYSELF)
|
||||
print(msg)
|
||||
|
||||
|
||||
def main_default(argv):
|
||||
"""Main default function:
|
||||
- By default we invoke qstat -f and prints the analysis.
|
||||
- If argv[1] is given, then we read in the file and
|
||||
use that for the analysis.
|
||||
"""
|
||||
from time import localtime, strftime
|
||||
from getopt import getopt, GetoptError
|
||||
|
||||
dtime = localtime()
|
||||
dtimestr = strftime("%Y%m%d-%H%M", dtime)
|
||||
|
||||
if len(sys.argv) > 1:
|
||||
qstat_f_current = open(sys.argv[1], "r").read().splitlines()
|
||||
# Skip program name and first command:
|
||||
cmdargs_in = argv[1:]
|
||||
try:
|
||||
cmdopts, cmdargs = getopt(cmdargs_in,
|
||||
"hs",
|
||||
["save",
|
||||
"help"])
|
||||
except GetoptError as err:
|
||||
sys.stderr.writelines([str(err), "\n"])
|
||||
return 2
|
||||
|
||||
# Process flag arguments
|
||||
show_disabled_nodes = False
|
||||
save_qstat = False
|
||||
for o,a in cmdopts:
|
||||
if o in ('-h', '--help'):
|
||||
help()
|
||||
return 0
|
||||
elif o in ('-s', '--save'):
|
||||
save_qstat = True
|
||||
else:
|
||||
raise ProgramError, "Unhandled option in main program: %s %s" % (o,a)
|
||||
|
||||
if len(cmdargs) > 1:
|
||||
qstat_f_current = open(cmdargs[1], "r").read().splitlines()
|
||||
else:
|
||||
qstat_f_current = pipe_out(('qstat', '-f'), split=True)
|
||||
if save_qstat:
|
||||
@@ -114,7 +162,7 @@ def main_default(save_qstat=True):
|
||||
|
||||
summary = analyze_cluster_usage_by_users(qstat_f_current)
|
||||
print_cluster_usage_by_users(summary)
|
||||
|
||||
return 0
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
@@ -164,4 +212,4 @@ def str_fmt_heading(fmt):
|
||||
# stub main code
|
||||
|
||||
if __name__ == "__main__" and not "get_ipython" in globals():
|
||||
main_default()
|
||||
sys.exit(main_default(sys.argv))
|
||||
|
||||
Reference in New Issue
Block a user