diff --git a/scripts/ls.py b/scripts/ls.py index f3109b478a..c17f7da5d3 100644 --- a/scripts/ls.py +++ b/scripts/ls.py @@ -1,10 +1,9 @@ import argparse -from teuthology.suite import ls +import teuthology.ls def main(): - args = parse_args() - ls(args.archive_dir, args.verbose) + teuthology.ls.main(parse_args()) def parse_args(): diff --git a/teuthology/ls.py b/teuthology/ls.py new file mode 100644 index 0000000000..57c1ef5502 --- /dev/null +++ b/teuthology/ls.py @@ -0,0 +1,71 @@ +import os +import yaml +import errno +import re + + +def main(args): + return ls(args.archive_dir, args.verbose) + + +def ls(archive_dir, verbose): + for j in get_jobs(archive_dir): + job_dir = os.path.join(archive_dir, j) + summary = {} + try: + with file(os.path.join(job_dir, 'summary.yaml')) as f: + g = yaml.safe_load_all(f) + for new in g: + summary.update(new) + except IOError as e: + if e.errno == errno.ENOENT: + print '%s ' % j, + + # pid + try: + pidfile = os.path.join(job_dir, 'pid') + found = False + if os.path.isfile(pidfile): + pid = open(pidfile, 'r').read() + if os.path.isdir("/proc/%s" % pid): + cmdline = open('/proc/%s/cmdline' % pid, + 'r').read() + if cmdline.find(archive_dir) >= 0: + print '(pid %s)' % pid, + found = True + if not found: + print '(no process or summary.yaml)', + # tail + tail = os.popen( + 'tail -1 %s/%s/teuthology.log' % (archive_dir, j) + ).read().rstrip() + print tail, + except IOError as e: + continue + print '' + continue + else: + raise + + print "{job} {success} {owner} {desc} {duration}s".format( + job=j, + owner=summary.get('owner', '-'), + desc=summary.get('description', '-'), + success='pass' if summary.get('success', False) else 'FAIL', + duration=int(summary.get('duration', 0)), + ) + if verbose and 'failure_reason' in summary: + print ' {reason}'.format(reason=summary['failure_reason']) + + +def get_jobs(archive_dir): + dir_contents = os.listdir(archive_dir) + + def is_job_dir(parent, subdir): + if (os.path.isdir(os.path.join(parent, subdir)) and re.match('\d+$', + subdir)): + return True + return False + + jobs = [job for job in dir_contents if is_job_dir(archive_dir, job)] + return sorted(jobs) diff --git a/teuthology/suite.py b/teuthology/suite.py index e1fd4cb7e8..eb211b838b 100644 --- a/teuthology/suite.py +++ b/teuthology/suite.py @@ -3,11 +3,9 @@ # https://github.com/ceph/ceph-qa-suite.git import copy -import errno import itertools import logging import os -import re import subprocess import sys import yaml @@ -39,7 +37,7 @@ def main(args): (os.path.join(args.base, collection), collection) for collection in args.collections ] - + count = 1 num_jobs = 0 for collection, collection_name in sorted(collections): @@ -198,69 +196,6 @@ def build_matrix(path): return [] -def ls(archive_dir, verbose): - for j in get_jobs(archive_dir): - job_dir = os.path.join(archive_dir, j) - summary = {} - try: - with file(os.path.join(job_dir, 'summary.yaml')) as f: - g = yaml.safe_load_all(f) - for new in g: - summary.update(new) - except IOError as e: - if e.errno == errno.ENOENT: - print '%s ' % j, - - # pid - try: - pidfile = os.path.join(job_dir, 'pid') - found = False - if os.path.isfile(pidfile): - pid = open(pidfile, 'r').read() - if os.path.isdir("/proc/%s" % pid): - cmdline = open('/proc/%s/cmdline' % pid, - 'r').read() - if cmdline.find(archive_dir) >= 0: - print '(pid %s)' % pid, - found = True - if not found: - print '(no process or summary.yaml)', - # tail - tail = os.popen( - 'tail -1 %s/%s/teuthology.log' % (archive_dir, j) - ).read().rstrip() - print tail, - except IOError as e: - continue - print '' - continue - else: - raise - - print "{job} {success} {owner} {desc} {duration}s".format( - job=j, - owner=summary.get('owner', '-'), - desc=summary.get('description', '-'), - success='pass' if summary.get('success', False) else 'FAIL', - duration=int(summary.get('duration', 0)), - ) - if verbose and 'failure_reason' in summary: - print ' {reason}'.format(reason=summary['failure_reason']) - - -def get_jobs(archive_dir): - dir_contents = os.listdir(archive_dir) - - def is_job_dir(parent, subdir): - if (os.path.isdir(os.path.join(parent, subdir)) and re.match('\d+$', - subdir)): - return True - return False - - jobs = [job for job in dir_contents if is_job_dir(archive_dir, job)] - return sorted(jobs) - - def get_arch(config): for yamlfile in config: y = yaml.safe_load(file(yamlfile))