]> git.apps.os.sepia.ceph.com Git - teuthology.git/commitdiff
Add teuthology-queue command for beanstalk Managmeent.
authorSandon Van Ness <sandon@inktank.com>
Tue, 25 Feb 2014 19:13:31 +0000 (11:13 -0800)
committerSandon Van Ness <sandon@inktank.com>
Tue, 25 Feb 2014 19:13:31 +0000 (11:13 -0800)
Supports listing entire queue of machine type and deleting test
suite runs from the queue without wiping the entire queue.

Signed-off-by: Sandon Van Ness <sandon@inktank.com>
scripts/queue.py [new file with mode: 0644]
setup.py
teuthology/beanstalk.py [new file with mode: 0644]

diff --git a/scripts/queue.py b/scripts/queue.py
new file mode 100644 (file)
index 0000000..e89b19e
--- /dev/null
@@ -0,0 +1,27 @@
+import docopt
+
+import teuthology.config
+import teuthology.beanstalk
+
+doc = """
+usage: teuthology-queue [-h] -m MACHINE_TYPE
+       teuthology-queue [-h] -m MACHINE_TYPE -d JOB
+
+List Jobs in queue:
+  If -d then jobs with JOB in the job name are delete from the queue.
+
+Arguments:
+  -m, --machine_type MACHINE_TYPE
+                        Which machine type queue to work on.
+
+optional arguments:
+  -h, --help            show this help message and exit
+
+  -d, --delete JOB      Delete Jobs with JOB in jobname.
+
+""".format(archive_base=teuthology.config.config.archive_base)
+
+
+def main():
+    args = docopt.docopt(doc)
+    teuthology.beanstalk.main(args)
index df95fdb1fe2688526bfe0063ffe0d78ebad1dbdf..2354e68a0ddfc4c6665ee3ebe82bd56e12bb8372 100644 (file)
--- a/setup.py
+++ b/setup.py
@@ -28,6 +28,7 @@ setup(
             'teuthology-results = scripts.results:main',
             'teuthology-report = scripts.report:main',
             'teuthology-kill = scripts.kill:main',
+            'teuthology-queue = scripts.queue:main',
             ],
         },
 
diff --git a/teuthology/beanstalk.py b/teuthology/beanstalk.py
new file mode 100644 (file)
index 0000000..e8489c1
--- /dev/null
@@ -0,0 +1,61 @@
+import beanstalkc
+import yaml
+import logging
+
+from .config import config
+
+log = logging.getLogger(__name__)
+
+def beanstalk_connect(machine_type):
+    qhost = config.queue_host
+    qport = config.queue_port
+    if qhost is None or qport is None:
+        raise RuntimeError(
+            'Beanstalk queue information not found in {conf_path}'.format(
+                conf_path=config.teuthology_yaml))
+    log.info("Checking Beanstalk Queue...")
+    beanstalk = beanstalkc.Connection(host=qhost, port=qport)
+    beanstalk.watch(machine_type)
+    beanstalk.ignore('default')
+    return beanstalk
+
+def walk_jobs(beanstalk, machine_type, delete=False):
+    curjobs = beanstalk.stats_tube(machine_type)['current-jobs-ready']
+    if curjobs != 0:
+        x=1
+        while x != curjobs:
+            x += 1
+            job = beanstalk.reserve(timeout=20)
+            if job.body is not None:
+                job_config = yaml.safe_load(job.body)
+                job_name=job_config['name']
+                job_id = job.stats()['id']
+                job_description = job_config['description']
+                if delete:
+                    if delete in job_name:
+                        print 'Deleted Job: {job_id} from queue. Name: {job_name}'.format(
+                        job_id = job_id,
+                        job_name = job_name,
+                        )
+                        job.delete()
+                    else:
+                        print "Searching queue... Checked " + str(x) + "/" + str(curjobs)," Jobs\r",
+                else:
+                    print 'Job: {x}/{curjobs} ID: {job_id} Name: {job_name}'.format(
+                    x=x,
+                    curjobs=curjobs,
+                    job_id=job_id,
+                    job_name=job_name,
+                    )
+                    print '\t {desc}'.format(desc=job_description)
+
+        print "\nDone"
+    else:
+        log.info('No jobs in Beanstalk Queue')
+
+def main(args):
+    machine_type =  args['--machine_type']
+    delete = args['--delete']
+    beanstalk = beanstalk_connect(machine_type)
+    walk_jobs(beanstalk, machine_type, delete)
+    beanstalk.close()