class SensorDrupalUpdate in Monitoring 7
Monitors for available updates of Drupal core and installed contrib modules.
Based on drupal core update module.
Hierarchy
- class \Drupal\monitoring\Sensor\Sensor implements SensorInterface
- class \Drupal\monitoring\Sensor\Sensors\SensorDrupalUpdate
Expanded class hierarchy of SensorDrupalUpdate
File
- lib/
Drupal/ monitoring/ Sensor/ Sensors/ SensorDrupalUpdate.php, line 17 - Contains \Drupal\monitoring\Sensor\Sensors\SensorDrupalUpdate.
Namespace
Drupal\monitoring\Sensor\SensorsView source
class SensorDrupalUpdate extends Sensor {
/**
* {@inheritdoc}
*/
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);
}
}
/**
* Checks core status and sets sensor status message.
*
* @param SensorResultInterface $result
* @param array $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');
// Do not escalate in case the status is 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,
));
}
}
/**
* Checks contrib status and sets sensor status message.
*
* @param SensorResultInterface $result
* @param array $project_data
*/
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,
));
}
}
}
}
/**
* Gets status text.
*
* @param int $status
* One of UPDATE_* constants.
*
* @return string
* Status text.
*/
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;
}
}
/**
* Executes the update requirements hook and calculates the status for it.
*
* @param string $type
* Which types of updates to check for, core or contrib.
*
* @return string
* One of the SensorResultInterface status constants.
*/
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;
}
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
Sensor:: |
protected | property | Current sensor info object. | |
Sensor:: |
public | function |
Gets sensor name (not the label). Overrides SensorInterface:: |
|
Sensor:: |
public | function |
Determines if sensor is enabled. Overrides SensorInterface:: |
|
Sensor:: |
function | Instantiates a sensor object. | 1 | |
SensorDrupalUpdate:: |
protected | function | Executes the update requirements hook and calculates the status for it. | |
SensorDrupalUpdate:: |
protected | function | Checks contrib status and sets sensor status message. | |
SensorDrupalUpdate:: |
protected | function | Checks core status and sets sensor status message. | |
SensorDrupalUpdate:: |
protected | function | Gets status text. | |
SensorDrupalUpdate:: |
public | function |
Runs the sensor, updating $sensor_result. Overrides SensorInterface:: |