SensorDrupalUpdate.php in Monitoring 7
File
lib/Drupal/monitoring/Sensor/Sensors/SensorDrupalUpdate.php
View source
<?php
namespace Drupal\monitoring\Sensor\Sensors;
use Drupal\monitoring\Result\SensorResultInterface;
use Drupal\monitoring\Sensor\Sensor;
class SensorDrupalUpdate extends Sensor {
public function runSensor(SensorResultInterface $result) {
$type = $this->info
->getSetting('type');
$status = $this
->calculateStatus($type);
$result
->setStatus($status);
$available = update_get_available();
$project_data = update_calculate_project_data($available);
if ($type == 'core') {
$this
->checkCore($result, $project_data);
}
else {
$this
->checkContrib($result, $project_data);
}
}
protected function checkCore(SensorResultInterface $result, $project_data) {
$info = $project_data['drupal'];
$status = $this
->getStatusText($info['status']);
if ($status == 'unknown') {
$result
->addStatusMessage('Core update status unknown');
$result
->setStatus(SensorResultInterface::STATUS_INFO);
}
elseif ($status == 'current') {
$result
->addStatusMessage('Core up to date');
}
else {
$result
->addStatusMessage('Core (@current) - @status - latest @latest', array(
'@status' => $status,
'@current' => isset($info['existing_version']) ? $info['existing_version'] : NULL,
'@latest' => isset($info['latest_version']) ? $info['latest_version'] : NULL,
));
}
}
protected function checkContrib(SensorResultInterface $result, $project_data) {
unset($project_data['drupal']);
$updates = array();
$important_updates = array();
foreach ($project_data as $info) {
$status_text = $this
->getStatusText($info['status']);
if (!isset($updates[$status_text])) {
$updates[$status_text] = 0;
}
$updates[$status_text]++;
if ($status_text == 'NOT SECURE' || $status_text == 'not supported') {
if (!isset($important_updates[$status_text])) {
$important_updates[$status_text] = array();
}
$important_updates[$status_text][] = $info;
}
}
foreach ($updates as $status_text => $count) {
$result
->addStatusMessage($count . ' ' . $status_text);
}
foreach ($important_updates as $status_text => $update_info) {
foreach ($update_info as $info) {
if ($status_text == 'NOT SECURE') {
$result
->addStatusMessage('@module (@status, @current => @recommended)', array(
'@module' => $info['info']['name'],
'@status' => $status_text,
'@current' => isset($info['existing_version']) ? $info['existing_version'] : NULL,
'@recommended' => isset($info['recommended']) ? $info['recommended'] : NULL,
));
}
else {
$result
->addStatusMessage('@module (@status, @current)', array(
'@module' => $info['info']['name'],
'@status' => $status_text,
'@current' => isset($info['existing_version']) ? $info['existing_version'] : NULL,
));
}
}
}
}
protected function getStatusText($status) {
switch ($status) {
case UPDATE_NOT_SECURE:
return 'NOT SECURE';
break;
case UPDATE_CURRENT:
return 'current';
break;
case UPDATE_REVOKED:
return 'version revoked';
break;
case UPDATE_NOT_SUPPORTED:
return 'not supported';
break;
case UPDATE_NOT_CURRENT:
return 'update available';
break;
case UPDATE_UNKNOWN:
case UPDATE_NOT_CHECKED:
case UPDATE_NOT_FETCHED:
case UPDATE_FETCH_PENDING:
return 'unknown';
break;
}
}
protected function calculateStatus($type) {
module_load_include('install', 'update');
$requirements = update_requirements('runtime');
$update_info = array();
if (isset($requirements['update_' . $type])) {
$update_info = $requirements['update_' . $type];
}
$update_info += array(
'severity' => REQUIREMENT_OK,
);
if ($update_info['severity'] == REQUIREMENT_OK) {
return SensorResultInterface::STATUS_OK;
}
elseif ($update_info['severity'] == REQUIREMENT_INFO) {
return SensorResultInterface::STATUS_INFO;
}
elseif ($update_info['severity'] == REQUIREMENT_WARNING) {
return SensorResultInterface::STATUS_INFO;
}
else {
return SensorResultInterface::STATUS_CRITICAL;
}
}
}
Classes
Name |
Description |
SensorDrupalUpdate |
Monitors for available updates of Drupal core and installed contrib modules. |