Chris@0
|
1 <?php
|
Chris@0
|
2
|
Chris@0
|
3 use Drush\Log\LogLevel;
|
Chris@0
|
4
|
Chris@0
|
5 /**
|
Chris@0
|
6 * Implements hook_drush_help().
|
Chris@0
|
7 */
|
Chris@0
|
8 function queue_drush_help($section) {
|
Chris@0
|
9 switch ($section) {
|
Chris@0
|
10 case 'drush:queue-run':
|
Chris@0
|
11 return dt('Run Drupal queue workers. As opposed to "drush cron" that can only be run one at a time on a single site, "drush queue-run" can be invoked as many times as the server load allows.');
|
Chris@0
|
12 }
|
Chris@0
|
13 }
|
Chris@0
|
14
|
Chris@0
|
15 /**
|
Chris@0
|
16 * Implements hook_drush_command().
|
Chris@0
|
17 */
|
Chris@0
|
18 function queue_drush_command() {
|
Chris@0
|
19 $items['queue-run'] = array(
|
Chris@0
|
20 'description' => 'Run a specific queue by name',
|
Chris@0
|
21 'arguments' => array(
|
Chris@0
|
22 'queue_name' => 'The name of the queue to run, as defined in either hook_queue_info or hook_cron_queue_info.',
|
Chris@0
|
23 ),
|
Chris@0
|
24 'required-arguments' => TRUE,
|
Chris@0
|
25 'options' => array(
|
Chris@0
|
26 'time-limit' => 'The maximum number of seconds allowed to run the queue',
|
Chris@0
|
27 ),
|
Chris@0
|
28 );
|
Chris@0
|
29 $items['queue-list'] = array(
|
Chris@0
|
30 'description' => 'Returns a list of all defined queues',
|
Chris@0
|
31 'outputformat' => array(
|
Chris@0
|
32 'default' => 'table',
|
Chris@0
|
33 'pipe-format' => 'csv',
|
Chris@0
|
34 'field-labels' => array(
|
Chris@0
|
35 'queue' => 'Queue',
|
Chris@0
|
36 'items' => 'Items',
|
Chris@0
|
37 'class' => 'Class',
|
Chris@0
|
38 ),
|
Chris@0
|
39 'ini-item' => 'items',
|
Chris@0
|
40 'table-metadata' => array(
|
Chris@0
|
41 'key-value-item' => 'items',
|
Chris@0
|
42 ),
|
Chris@0
|
43 'output-data-type' => 'format-table',
|
Chris@0
|
44 ),
|
Chris@0
|
45 );
|
Chris@0
|
46
|
Chris@0
|
47 return $items;
|
Chris@0
|
48 }
|
Chris@0
|
49
|
Chris@0
|
50 /**
|
Chris@0
|
51 * Validation callback for drush queue-run.
|
Chris@0
|
52 */
|
Chris@0
|
53 function drush_queue_run_validate($queue_name) {
|
Chris@0
|
54 try {
|
Chris@0
|
55 $queue = drush_queue_get_class();
|
Chris@0
|
56 $queue->getInfo($queue_name);
|
Chris@0
|
57 }
|
Chris@0
|
58 catch (\Drush\Queue\QueueException $exception) {
|
Chris@0
|
59 return drush_set_error('DRUSH_QUEUE_RUN_VALIDATION_ERROR', $exception->getMessage());
|
Chris@0
|
60 }
|
Chris@0
|
61 }
|
Chris@0
|
62
|
Chris@0
|
63 /**
|
Chris@0
|
64 * Return the appropriate queue class.
|
Chris@0
|
65 */
|
Chris@0
|
66 function drush_queue_get_class() {
|
Chris@0
|
67 return drush_get_class('Drush\Queue\Queue');
|
Chris@0
|
68 }
|
Chris@0
|
69
|
Chris@0
|
70 /**
|
Chris@0
|
71 * Command callback for drush queue-run.
|
Chris@0
|
72 *
|
Chris@0
|
73 * Queue runner that is compatible with queues declared using both
|
Chris@0
|
74 * hook_queue_info() and hook_cron_queue_info().
|
Chris@0
|
75 *
|
Chris@0
|
76 * @param $queue_name
|
Chris@0
|
77 * Arbitrary string. The name of the queue to work with.
|
Chris@0
|
78 */
|
Chris@0
|
79 function drush_queue_run($queue_name) {
|
Chris@0
|
80 $queue = drush_queue_get_class();
|
Chris@0
|
81 $time_limit = (int) drush_get_option('time-limit');
|
Chris@0
|
82 $start = microtime(TRUE);
|
Chris@0
|
83 $count = $queue->run($queue_name, $time_limit);
|
Chris@0
|
84 $elapsed = microtime(TRUE) - $start;
|
Chris@0
|
85 drush_log(dt('Processed @count items from the @name queue in @elapsed sec.', array('@count' => $count, '@name' => $queue_name, '@elapsed' => round($elapsed, 2))), drush_get_error() ? LogLevel::WARNING : LogLevel::OK);
|
Chris@0
|
86 }
|
Chris@0
|
87
|
Chris@0
|
88 /**
|
Chris@0
|
89 * Command callback for drush queue-list.
|
Chris@0
|
90 */
|
Chris@0
|
91 function drush_queue_list() {
|
Chris@0
|
92 $queue = drush_queue_get_class();
|
Chris@0
|
93 return $queue->listQueues();
|
Chris@0
|
94 }
|
Chris@0
|
95
|