mirror of
https://github.com/ceph/ceph
synced 2024-12-26 13:33:57 +00:00
2a7de82498
Signed-off-by: Zack Cerza <zack.cerza@inktank.com>
72 lines
2.4 KiB
Python
72 lines
2.4 KiB
Python
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)
|