123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- <?php
- /**
- * @file
- * Rules Scheduler Drush integration.
- */
- /**
- * Implements hook_drush_command().
- */
- function rules_scheduler_drush_command() {
- $items = array();
- $items['rules-scheduler-tasks'] = array(
- 'description' => 'Check for scheduled tasks to be added to the queue.',
- 'options' => array(
- 'claim' => 'Optionally claim tasks from the queue to work on. Any value set will override the default time spent on this queue.',
- ),
- 'drupal dependencies' => array('rules', 'rules_scheduler'),
- 'aliases' => array('rusch'),
- 'examples' => array(
- 'drush rusch' => 'Add scheduled tasks to the queue.',
- 'drush rusch --claim' => 'Add scheduled tasks to the queue and claim items for the default amount of time.',
- 'drush rusch --claim=30' => 'Add scheduled tasks to the queue and claim items for 30 seconds.',
- ),
- );
- return $items;
- }
- /**
- * Implements hook_drush_help().
- */
- function rules_scheduler_drush_help($section) {
- switch ($section) {
- case 'drush:rules-scheduler-tasks':
- return dt('Checks for scheduled tasks to be added the queue. Can optionally claim tasks from the queue to work on.');
- }
- }
- /**
- * Command callback for processing the rules_scheduler_tasks queue.
- *
- * @see rules_scheduler_cron_queue_info()
- * @see rules_scheduler_cron()
- */
- function drush_rules_scheduler_tasks() {
- if (rules_scheduler_queue_tasks()) {
- // hook_exit() is not invoked for drush runs, so register it as shutdown
- // callback for logging the rules log to the watchdog.
- drupal_register_shutdown_function('rules_exit');
- // Clear the log before running tasks via the queue to avoid logging
- // unrelated logs from previous operations.
- RulesLog::logger()->clear();
- drush_log(dt('Added scheduled tasks to the queue.'), 'success');
- }
- $claim = drush_get_option('claim', FALSE);
- if ($claim) {
- // Fetch the queue information and let other modules alter it.
- $queue_name = 'rules_scheduler_tasks';
- $info = module_invoke('rules_scheduler', 'cron_queue_info');
- drupal_alter('cron_queue_info', $info);
- $function = $info[$queue_name]['worker callback'];
- // The drush option can override the default process time.
- $time = is_numeric($claim) ? (int) $claim : $info[$queue_name]['time'];
- $end = time() + $time;
- // Claim items and process the queue.
- $queue = DrupalQueue::get($queue_name);
- $claimed = 0;
- while (time() < $end && ($item = $queue->claimItem())) {
- $function($item->data);
- $queue->deleteItem($item);
- $claimed++;
- }
- if ($claimed) {
- drush_log(dt('Claimed and worked on !claimed scheduled tasks for up to !time seconds.', array('!claimed' => $claimed, '!time' => $time)), 'success');
- }
- }
- }
|