From 21b3eaf6107ee56764cc12425d7ae3c3e9681139 Mon Sep 17 00:00:00 2001
From: Laurent Chardin <laurent@chardin.org>
Date: Mon, 24 Jun 2013 09:35:25 +0200
Subject: [PATCH] Adding new drush command: advancedqueue-list + adding debug
 info when drush debug is activated

---
 drush/advancedqueue.drush.inc | 68 +++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 68 insertions(+)

diff --git a/drush/advancedqueue.drush.inc b/drush/advancedqueue.drush.inc
index d7413ee..3b192b3 100644
--- a/drush/advancedqueue.drush.inc
+++ b/drush/advancedqueue.drush.inc
@@ -21,9 +21,21 @@ function advancedqueue_drush_command() {
     ),
     'aliases' => array('advancedqueue'),
   );
+  $items['advancedqueue-list'] = array(
+    'description' => 'Returns a list of all defined queues',
+    'options' => array(
+      'pipe' => 'Return a comma delimited list of queues.'
+    )
+  );
   return $items;
 }
 
+/**
+ * Command callback for drush advancedqueue-process-queue.
+ *
+ * @param $queue_name
+ *   Arbitrary string. The name of the queue to work with.
+ */
 function drush_advancedqueue_process_queue($queue = NULL) {
   // Load information about the registred queues, and sort them by weight.
   $all_queue_info = module_invoke_all('advanced_queue_info');
@@ -130,3 +142,59 @@ function drush_advancedqueue_process_item($queue, $queue_name, $queue_info, $ite
     $queue->deleteItem($item);
   }
 }
+
+/**
+ * Command callback for drush advancedqueue-list.
+ */
+function drush_advancedqueue_list() {
+  $queues = drush_advancedqueue_get_queues();
+  $default_class = variable_get('queue_default_class', 'SystemQueue');
+  $rows = array(array('Queue', 'Items', 'Class'));
+  foreach (array_keys($queues) as $name) {
+    $q = DrupalQueue::get($name);
+    $class = variable_get('queue_class_' . $name, $default_class);
+    $rows[] = array($name, $q->numberOfItems(), $class);
+  }
+
+  if (drush_get_option('pipe')) {
+    $pipe = array();
+    array_shift($rows);
+    foreach ($rows as $r) {
+      $pipe[] = implode(",", $r);
+    }
+    drush_print_pipe($pipe);
+  }
+  else {
+    drush_print_table($rows, TRUE);
+  }
+
+  // Return the result for backend invoke
+  return $rows;
+}
+
+/**
+ * Get queues defined with hook_advanced_queue_info().
+ *
+ * @return
+ *   Array of queues indexed by name and containing queue object and number
+ *   of items.
+ */
+function drush_advancedqueue_get_queues() {
+  static $queues;
+  if (!isset($queues)) {
+    $queues = array();
+
+    // Merge in queues from modules that implement hook_cron_queue_info().
+    $advanced_queues = module_invoke_all('advanced_queue_info');
+    drupal_alter('advanced_queue_info', $advanced_queues);
+    foreach($advanced_queues as $name => $queue) {
+      $queues[$name] = array(
+        'cron' => array(
+          'callback' => $queue['worker callback'],
+          'time' => $queue['time'],
+        )
+      );
+    }
+  }
+  return $queues;
+}
-- 
1.8.3.1

