20 define(
'NAGIOS_OK', 0);
26 define(
'NAGIOS_WARNING', 1);
32 define(
'NAGIOS_CRITICAL', 2);
54 drush_include_engine(
'update_info',
'drupal', NULL, DRUSH_BASE_PATH .
'/commands/pm/update_info');
55 include(DRUSH_BASE_PATH .
'/commands/pm/updatecode.pm.inc');
57 drush_bootstrap_max();
59 $extensions = drush_get_extensions();
60 $projects = drush_get_projects($extensions);
63 drush_set_option(
'quiet', 1,
'all');
64 drush_set_context(
'DRUSH_QUIET', 1);
67 $update_info = _pm_get_update_info($projects);
70 drush_set_option(
'quiet', 0,
'all');
71 drush_set_context(
'DRUSH_QUIET', 0);
165 $has_updates = FALSE;
166 $update_info = array();
167 drush_include_engine(
'drupal',
'update', drush_drupal_major_version());
168 if (drush_drupal_major_version() == 7) {
169 update_main_prepare();
170 $pending = update_get_update_list();
171 if (count($pending) != 0) {
175 else if(drush_drupal_major_version() == 6) {
176 update_main_prepare();
179 $modules = drupal_get_installed_schema_version(NULL, FALSE, TRUE);
180 foreach ($modules as $module => $schema_version) {
181 $updates = drupal_get_schema_versions($module);
183 if (!update_check_incompatibility($module) && $updates !== FALSE && $schema_version >= 0) {
186 $last_removed = module_invoke($module,
'update_last_removed');
187 if ($schema_version < $last_removed) {
188 drush_set_error(
'PROVISION_DRUPAL_UPDATE_FAILED', dt( $module .
' module can not be updated. Its schema version is ' . $schema_version .
'. Updates up to and including ' . $last_removed .
' have been removed in this release. In order to update ' . $module .
' module, you will first <a href="http://drupal.org/upgrade">need to upgrade</a> to the last version in which these updates were available.'));
192 $updates = drupal_map_assoc($updates);
193 foreach (array_keys($updates) as $update) {
194 if ($update > $schema_version) {
195 $start[$module] = $update;
201 foreach (array_keys($updates) as $update) {
202 if ($update > $schema_version) {
203 if (class_exists(
'ReflectionFunction')) {
205 $func =
new ReflectionFunction($module .
'_update_' . $update);
206 $description = str_replace(array(
"\n",
'*',
'/'),
'', $func->getDocComment());
208 if (empty($description)) {
209 $description = dt(
'description not available');
212 $pending[$module][] = array(
"$update - " . trim($description));
219 $update_info[
'has_updates'] = $has_updates;
220 $update_info[
'db_updates'] = $pending;
351 $updates[
'has_updates'] = FALSE;
354 $updates[
'updates'] = array();
355 $updates[
'security_updates'] = array();
356 $updates[
'not_supported'] = array();
357 $updates[
'ignored'] = array();
358 $updates[
'update_not_checked'] = array();
359 $updates[
'update_revoked'] = array();
360 $updates[
'up_to_date'] = array();
361 $updates[
'unknown'] = array();
364 $ignore = explode(
',', drush_get_option(
'ignore'));
366 foreach($update_info as $project) {
370 $update_type = pm_update_filter($project);
374 $project_name = $project[
'name'];
378 $update[
'project_type'] = $project[
'project_type'];
379 $update[
'existing_version'] = $project[
'existing_version'];
382 if ($update_type != dt(
'Unknown') || $update_type != dt(
'Unable to check status')) {
383 $update[
'latest_version'] = $project[
'latest_version'];
384 $update[
'release_link'] = $project[
'releases'][$project[
'latest_version']][
'release_link'];
385 $update[
'severity'] = dt($update_type);
389 if (drush_get_option(
'ignore-locked')) {
390 if (isset($project[
'path'])) {
391 $lockfile = $drupal_root .
'/' . $project[
'path'] .
'/.drush-lock-update';
392 if (file_exists(getcwd() . $lockfile)) {
393 $ignore[] = $project_name;
399 if (in_array($project_name, $ignore)) {
400 $updates[
'ignored'][$project_name] = $update;
405 switch ($update_type) {
406 case dt(
'Update available') :
407 $updates[
'updates'][$project_name] = $update;
408 $updates[
'has_updates'] = TRUE;
410 case dt(
'SECURITY UPDATE available'):
411 $updates[
'security_updates'][$project_name] = $update;
412 $updates[
'has_updates'] = TRUE;
414 case dt(
'Installed version not supported'):
415 $updates[
'not_supported'][$project_name] = $update;
416 $updates[
'has_updates'] = TRUE;
418 case dt(
'Unable to check status'):
419 $updates[
'update_not_checked'][$project_name] = $update;
421 case dt(
'Installed version REVOKED'):
422 $updates[
'update_revorked'][$project_name] = $update;
423 $updates[
'has_updates'] = TRUE;
425 case dt(
'Up to date'):
426 $updates[
'up_to_date'][$project_name] = $update;
429 $updates[
'unknown'][$project_name] = $update;
629 include_once
'./includes/install.inc';
630 drupal_load_updates();
633 $requirements = module_invoke_all(
'requirements',
'runtime');
635 return $requirements;
700 $parsed_requirements = array();
701 $ignore = drush_get_option(
'ignore', NULL);
702 $ignore = isset($ignore) ? explode(
',', $ignore) : array();
703 foreach ($requirements as $key => $requirement) {
704 if (array_key_exists(
'severity', $requirement) && !array_key_exists(
'reason', $requirement)) {
705 if (in_array($key, $ignore)) {
706 $parsed_requirements[
'ignored'][$key] = $requirement;
709 if ($requirement[
'severity'] != 0 || $requirement[
'severity'] != -1) {
710 if ($requirement[
'severity'] == 1) {
711 $parsed_requirements[
'requirement_violation'] = TRUE;
712 $parsed_requirements[
'requirement_warning'][$key] = $requirement;
714 if ($requirement[
'severity'] == 2) {
715 $parsed_requirements[
'requirement_violation'] = TRUE;
716 $parsed_requirements[
'requirement_error'][$key] = $requirement;
721 return $parsed_requirements;
734 $status_msg = dt(
'!site_root: ',
736 '!site_root'=> drush_get_context(
'DRUSH_DRUPAL_ROOT') .
'/' . drush_get_context(
'DRUSH_DRUPAL_SITE_ROOT'),
742 if ($parsed_update_info[
'has_updates'] || $parsed_update_info[
'requirement_violation']) {
743 $command = drush_get_command();
744 switch ($command[
'command']) {
746 case 'check-db-updates':
747 if (count($parsed_update_info[
'db_updates'])) {
748 $status_msg .= dt(
'has pending database updates, run \'drush updatedb\' or visit update.php in your browser for more details.');
752 case 'check-updates':
753 unset($parsed_update_info[
'has_updates']);
755 foreach ($parsed_update_info as $severity => $projects){
758 if (count($projects) == 0 || $erverity ==
'up_to_date' || $severity ==
'unknown') {
762 if ($severity ==
'ignored') {
763 foreach ($projects as $name => $project) {
764 $ignored[] = $name .
'(' . $project[
'severity'] .
')';
766 $status_msg .= dt(
' IGNORED BY SETTINGS: !modules',
768 '!modules' => implode(
',', $ignored),
773 $status_msg .= dt(
' !type: !modules',
775 '!type' => strtoupper(str_replace(
'_',
' ', $severity)),
776 '!modules' => implode(
',', array_keys($projects)),
782 case 'check-drupal-requirements':
783 unset($parsed_update_info[
'requirement_violation']);
786 foreach ($parsed_update_info as $severity => $requirements){
788 if ($severity ==
'ignored') {
789 foreach ($requirements as $name => $requirement) {
790 $ignored[] = $name .
'(' . $requirement[
'severity'] .
')';
792 $status_msg .= dt(
' IGNORED BY SETTINGS: !requirements',
794 '!requirements' => implode(
',', $ignored),
799 $status_msg .= dt(
' !type: !requirements',
801 '!type' => strtoupper(str_replace(
'_',
' ', $severity)),
802 '!requirements' => implode(
',', array_keys($requirements)),
812 if ($parsed_update_info[
'ignored']) {
813 foreach ($parsed_update_info as $severity => $requirements) {
815 if ($severity ==
'ignored') {
816 foreach ($requirements as $name => $requirement) {
817 $ignored[] = $name .
'(' . $requirement[
'severity'] .
')';
819 $status_msg .= dt(
'Everythings OK, IGNORED BY SETTINGS: !requirements',
821 '!requirements' => implode(
',', $ignored),
829 $status_msg = $status_msg . dt(
'Everythings OK...');
833 drush_print($status_msg);
848 if ($parsed_update_info[
'has_updates'] || $parsed_update_info[
'requirement_violation']) {
850 $critical = (count($parsed_update_info[
'security_updates']) != 0
851 || count($parsed_update_info[
'requirement_error']) != 0);
853 $updates = (count($parsed_update_info[
'updates']) != 0);
854 $not_supported = (count($parsed_update_info[
'not_supported']) != 0);
855 $db_updates = (count($parsed_update_info[
'db_updates']) != 0);
856 $requirements_warnings = (count($parsed_update_info[
'requirement_warning']) != 0);
861 elseif ($updates || $not_supported || $db_updates || $requirements_warnings) {
_nagios_exit_status($parsed_update_info)
_nagios_print_message($parsed_update_info)
_nagios_parse_drupal_status_info($requirements)
_nagios_get_update_info()
_nagios_get_db_update_info()
_nagios_get_drupal_status_info()
_nagios_parse_update_info($update_info)