You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
81 lines
2.7 KiB
81 lines
2.7 KiB
<?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'); |
|
} |
|
} |
|
}
|
|
|