Skip to content

Commit

Permalink
Move teuthology-ls's implementation to ls.py
Browse files Browse the repository at this point in the history
Signed-off-by: Zack Cerza <zack.cerza@inktank.com>
  • Loading branch information
zmc committed Jun 6, 2014
1 parent 87e7ff0 commit 2a7de82
Show file tree
Hide file tree
Showing 3 changed files with 74 additions and 69 deletions.
5 changes: 2 additions & 3 deletions 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():
Expand Down
71 changes: 71 additions & 0 deletions 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)
67 changes: 1 addition & 66 deletions teuthology/suite.py
Expand Up @@ -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
Expand Down Expand Up @@ -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):
Expand Down Expand Up @@ -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))
Expand Down

0 comments on commit 2a7de82

Please sign in to comment.