| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249 | 
							- <?php
 
- /**
 
-  * Implements hook_nagios_info().
 
-  */
 
- function ultimate_cron_nagios_info() {
 
-   return array(
 
-     'name'   => t('Ultimate Cron Monitoring'),
 
-     'id'     => 'ULTIMATE_CRON',
 
-   );
 
- }
 
- /**
 
-  * Implementation of hook_nagios().
 
-  */
 
- function ultimate_cron_nagios($check = 'nagios') {
 
-   $status = array();
 
-   foreach(ultimate_cron_nagios_functions() as $function => $description) {
 
-     if (variable_get('ultimate_cron_nagios_func_' . $function, TRUE) && ($check == 'nagios' || $check == $function)) {
 
-       $func = $function . '_check';
 
-       $result = $func();
 
-       $status[$result['key']] = $result['data'];
 
-     }
 
-   }
 
-   return $status;
 
- }
 
- /**
 
-  * Implementation of hook_nagios_settings().
 
-  */
 
- function ultimate_cron_nagios_settings() {
 
-   $form = array();
 
-   
 
-   foreach(ultimate_cron_nagios_functions() as $function => $description) {
 
-     $var = 'ultimate_cron_nagios_func_' . $function;
 
-     $form[$var] = array(
 
-       '#type'          => 'checkbox',
 
-       '#title'         => $function,
 
-       '#default_value' => variable_get($var, TRUE),
 
-       '#description' => $description,
 
-     );
 
-   }
 
-  
 
-   $group = 'thresholds';
 
-   $form[$group] = array(
 
-     '#type'        => 'fieldset',
 
-     '#collapsible' => TRUE,
 
-     '#collapsed'   => FALSE,
 
-     '#title'       => t('Thresholds'),
 
-     '#description' => t('Thresholds for reporting critical alerts to Nagios.'),
 
-   );
 
-   $form[$group]['ultimate_cron_nagios_running_threshold'] = array(
 
-     '#type'          => 'textfield',
 
-     '#title'         => t('Running jobs count'),
 
-     '#default_value' => variable_get('ultimate_cron_nagios_running_threshold', 50),
 
-     '#description'   => t('Issue a critical alert when more than this number of jobs are running. Default is 50.'),
 
-   );
 
-   
 
-   $form[$group]['ultimate_cron_nagios_failed_threshold'] = array(
 
-     '#type'          => 'textfield',
 
-     '#title'         => t('Failed jobs count'),
 
-     '#default_value' => variable_get('ultimate_cron_nagios_failed_threshold', 10),
 
-     '#description'   => t('Issue a critical alert when more than this number of jobs failed their last run. Default is 10.'),
 
-   );
 
-   
 
-   $form[$group]['ultimate_cron_nagios_longrunning_threshold'] = array(
 
-     '#type'          => 'textfield',
 
-     '#title'         => t('Long running jobs'),
 
-     '#default_value' => variable_get('ultimate_cron_nagios_longrunning_threshold', 0),
 
-     '#description'   => t('Issue a critical alert when more than this number of jobs are running longer than usual. Default is 0.')
 
-   );
 
-   
 
-   return $form;
 
- }
 
- /**
 
-  * Implementation of hook_nagios_checks().
 
-  */
 
- function ultimate_cron_nagios_checks() {
 
-   return ultimate_cron_nagios_functions();
 
- }
 
- /**
 
-  * Implementation of drush hook_nagios_check().
 
-  */
 
- function ultimate_cron_nagios_check($function) {
 
-   // We don't bother to check if the function has been enabled by the user.
 
-   // Since this runs via drush, web security is not an issue.
 
-   $func = $function . '_check';
 
-   $result = $func();
 
-   $status[$result['key']] = $result['data'];
 
-   return $status;
 
- }
 
- /************** HELPER FUNCTIONS ***********************************/
 
- /**
 
-  * Return a list of nagios check functions 
 
-  * @see ultimate_cron_nagios()
 
-  */
 
- function ultimate_cron_nagios_functions() {
 
-   return array(
 
-     'ultimate_cron_running' => t('Check number of currently running jobs'),
 
-     'ultimate_cron_failed' => t('Check the number of jobs that failed last run'),
 
-     'ultimate_cron_longrunning' => t('Check the number of jobs that are running longer than usual'),
 
-   );
 
- }
 
- /**
 
-  * Get information about running jobs - currently running or failed.
 
-  *
 
-  * @staticvar array $overview
 
-  * @param string $mode Which mode to get info about; 'running' or 'errors'
 
-  * @return int 
 
-  */
 
- function ultimate_cron_nagios_get_job_info($mode = 'running') {
 
-   // Ensure valid mode
 
-   if (!in_array($mode, array('running', 'errors'))) {
 
-     $mode = 'running';
 
-   }
 
-   static $overview = array();
 
-   if (!isset($overview[$mode])) {
 
-     $overview[$mode] = 0;
 
-     // Get hooks and their data
 
-     $data = _ultimate_cron_preload_cron_data();
 
-     $hooks = ultimate_cron_get_hooks();
 
-     $modules = array();
 
-     foreach ($hooks as $function => $hook) {
 
-       if (!$module || $module == $hook['module']) {
 
-         $hook['settings'] = $data[$function]['settings'] + $hook['settings'];
 
-         $hook['background_process'] = $data[$function]['background_process'];
 
-         $hook['log'] = ultimate_cron_get_log($function);
 
-         
 
-         // Setup process
 
-         if ($hook['background_process']) {
 
-           $overview['running']++;
 
-         }
 
-         $log = $hook['log'];
 
-         if (isset($log['status']) && !$log['status']) {
 
-           $overview['errors']++;
 
-         }
 
-       }
 
-     }
 
-   }
 
-   
 
-   return $overview[$mode];
 
- }
 
- /*************** NAGIOS CHECK FUNCTIONS ********************************/
 
- /**
 
-  * Check number of running jobs.
 
-  * 
 
-  * @return array
 
-  */
 
- function ultimate_cron_running_check() {
 
-   $running = ultimate_cron_nagios_get_job_info('running');
 
-   $threshold = variable_get('ultimate_cron_nagios_running_threshold', 50);
 
-   if (count($running) > $threshold) {
 
-     $data = array(
 
-       'status' => NAGIOS_STATUS_CRITICAL,
 
-       'type'   => 'state',
 
-       'text'   => t('@jobs currently running - it is more than @threshold', array('@jobs' => $running, '@threshold' => $threshold)),
 
-     );
 
-   }
 
-   else {
 
-     $data = array(
 
-       'status' => NAGIOS_STATUS_OK, 
 
-       'type'   => 'state',
 
-       'text'   => t('@jobs currently running', array('@jobs' => $running)),
 
-     );
 
-   }
 
-   return array(
 
-     'key' => 'ULTIMATE_CRON_RUNNING',
 
-     'data' => $data,
 
-   );
 
- }
 
- /**
 
-  * Check number of jobs that failed last run.
 
-  * 
 
-  * @return array
 
-  */
 
- function ultimate_cron_failed_check() {
 
-   $failed = ultimate_cron_nagios_get_job_info('errors');
 
-   $threshold = variable_get('ultimate_cron_nagios_failed_threshold', 10);
 
-   if (count($failed) > $threshold) {
 
-     $data = array(
 
-       'status' => NAGIOS_STATUS_CRITICAL,
 
-       'type'   => 'state',
 
-       'text'   => t('@jobs failed their last run - it is more than @threshold', array('@jobs' => $failed, '@threshold' => $threshold)),
 
-     );
 
-   }
 
-   else {
 
-     $data = array(
 
-       'status' => NAGIOS_STATUS_OK, 
 
-       'type'   => 'state',
 
-       'text'   => t('@jobs failed their last run', array('@jobs' => $failed)),
 
-     );
 
-   }
 
-   return array(
 
-     'key' => 'ULTIMATE_CRON_FAILED',
 
-     'data' => $data,
 
-   );
 
- }
 
- /**
 
-  * Check number of jobs running longer than usual.
 
-  * 
 
-  * @return array
 
-  * 
 
-  * @todo Implement the logic
 
-  */
 
- function ultimate_cron_longrunning_check() {
 
-   $longrunning = 0;
 
-   
 
-   // Get running jobs
 
-   
 
-   // Find out how long they have been running
 
-   
 
-   // Calculate average run time per job (over a threshold? E.g. queues run very fast if there is nothing to process)
 
-   
 
-   // If 
 
-   
 
-   $threshold = variable_get('ultimate_cron_nagios_longrunning_threshold', 0);
 
-   if ($longrunning > $threshold) {
 
-     $data = array(
 
-       'status' => NAGIOS_STATUS_CRITICAL,
 
-       'type'   => 'state',
 
-       'text'   => t('@jobs jobs are running longer than usual - it is more than @threshold', array('@jobs' => $longrunning, '@threshold' => $threshold)),
 
-     );
 
-   }
 
-   else {
 
-     $data = array(
 
-       'status' => NAGIOS_STATUS_OK, 
 
-       'type'   => 'state',
 
-       'text'   => t('@jobs jobs are running longer than usual', array('@jobs' => $longrunning)),
 
-     );
 
-   }
 
-   return array(
 
-     'key' => 'ULTIMATE_CRON_LONGRUNNING',
 
-     'data' => $data,
 
-   );
 
- }
 
 
  |