You are here

rules_scheduler.drush.inc in Rules 7.2

Rules Scheduler Drush integration.

File

rules_scheduler/rules_scheduler.drush.inc
View source
<?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');
    }
  }
}

Functions

Namesort descending Description
drush_rules_scheduler_tasks Command callback for processing the rules_scheduler_tasks queue.
rules_scheduler_drush_command Implements hook_drush_command().
rules_scheduler_drush_help Implements hook_drush_help().