View source
<?php
namespace Drupal\monitoring\Controller;
use Drupal\Component\Utility\Unicode;
use Drupal\Core\Controller\ControllerBase;
use Drupal\monitoring\Result\SensorResultInterface;
use Drupal\monitoring\Sensor\SensorManager;
use Drupal\monitoring\SensorRunner;
use Symfony\Component\DependencyInjection\ContainerInterface;
class SensorList extends ControllerBase {
protected $sensorRunner;
protected $sensorManager;
public function __construct(SensorRunner $sensor_runner, SensorManager $sensor_manager) {
$this->sensorRunner = $sensor_runner;
$this->sensorManager = $sensor_manager;
}
public static function create(ContainerInterface $container) {
return new static($container
->get('monitoring.sensor_runner'), $container
->get('monitoring.sensor_manager'));
}
public function content() {
$rows = array();
$results = $this->sensorRunner
->runSensors();
$status_overview = array(
SensorResultInterface::STATUS_OK => 0,
SensorResultInterface::STATUS_INFO => 0,
SensorResultInterface::STATUS_WARNING => 0,
SensorResultInterface::STATUS_CRITICAL => 0,
SensorResultInterface::STATUS_UNKNOWN => 0,
);
$total_execution_time = 0;
$non_cached_execution_time = 0;
$oldest_sensor_age = 0;
$oldest_sensor_config = NULL;
foreach ($this->sensorManager
->getSensorConfigByCategories() as $category => $category_sensor_config) {
$rows[] = array(
'data' => array(
'label' => array(
'data' => array(
'#markup' => '<h3>' . $category . '</h3>',
),
'colspan' => 7,
),
),
);
$ok_row_count = 0;
foreach ($category_sensor_config as $sensor_name => $sensor_config) {
if (!isset($results[$sensor_name])) {
continue;
}
$sensor_result = $results[$sensor_name];
$called_before = \Drupal::time()
->getRequestTime() - $sensor_result
->getTimestamp();
if ($called_before > $oldest_sensor_age) {
$oldest_sensor_config = $sensor_config;
$oldest_sensor_age = $called_before;
}
$row['data']['label']['data'] = array(
'#markup' => '<span title="' . $sensor_config
->getDescription() . '">' . $sensor_config
->getLabel() . '</span>',
);
$row['data']['sensor_status'] = array(
'data' => $sensor_result
->getStatus(),
'class' => array(
'status',
),
);
$row['data']['timestamp'] = \Drupal::service('date.formatter')
->formatInterval(\Drupal::time()
->getRequestTime() - $sensor_result
->getTimestamp());
$row['data']['execution_time'] = array(
'data' => $sensor_result
->getExecutionTime() . 'ms',
'class' => array(
'execution-time',
),
);
$row['data']['sensor_status_message'] = Unicode::truncate(strip_tags($sensor_result
->getMessage()), 200, TRUE, TRUE);
$row['class'] = array(
'monitoring-' . strtolower($sensor_result
->getStatus()),
);
$links = array();
$links['details'] = array(
'title' => t('Details'),
'url' => $sensor_config
->toUrl('details-form'),
);
if ($sensor_config
->getCachingTime() && $this
->currentUser()
->hasPermission('monitoring force run')) {
$links['force_execution'] = array(
'title' => t('Force execution'),
'url' => $sensor_config
->toUrl('force-run-sensor'),
);
}
$links['edit'] = array(
'title' => t('Edit'),
'url' => $sensor_config
->toUrl('edit-form'),
'query' => array(
'destination' => 'admin/reports/monitoring',
),
);
\Drupal::moduleHandler()
->alter('monitoring_sensor_links', $links, $sensor_config);
$row['data']['actions'] = array();
if (!empty($links)) {
$row['data']['actions']['data'] = array(
'#type' => 'dropbutton',
'#links' => $links,
);
}
$rows[] = $row;
$status_overview[$sensor_result
->getStatus()]++;
$total_execution_time += $sensor_result
->getExecutionTime();
if (!$sensor_result
->isCached()) {
$non_cached_execution_time += $sensor_result
->getExecutionTime();
}
if ($sensor_result
->getStatus() == SensorResultInterface::STATUS_OK) {
$ok_row_count++;
}
else {
$ok_row_count = -1;
}
}
if ($ok_row_count >= 0) {
$index = count($rows) - $ok_row_count - 1;
$rows[$index]['class'][] = 'sensor-category-ok';
}
}
$output['summary'] = array(
'#theme' => 'monitoring_overview_summary',
'#status_overview' => $status_overview,
'#total_execution_time' => $total_execution_time,
'#non_cached_execution_time' => $non_cached_execution_time,
);
if (!empty($oldest_sensor_config)) {
$output['summary']['#oldest_sensor_label'] = $oldest_sensor_config
->getLabel();
$output['summary']['#oldest_sensor_category'] = $oldest_sensor_config
->getCategory();
$output['summary']['#oldest_sensor_called_before'] = \Drupal::service('date.formatter')
->formatInterval($oldest_sensor_age);
}
$header = array(
t('Sensor name'),
array(
'data' => t('Status'),
'class' => array(
'status',
),
),
t('Called before'),
t('Execution time'),
t('Status Message'),
array(
'data' => t('Actions'),
'class' => array(
'actions',
),
),
);
$monitoring_escalated_sensors = $status_overview[SensorResultInterface::STATUS_WARNING] + $status_overview[SensorResultInterface::STATUS_CRITICAL] + $status_overview[SensorResultInterface::STATUS_UNKNOWN];
$output['table'] = array(
'#type' => 'table',
'#header' => $header,
'#rows' => $rows,
'#sticky' => TRUE,
'#attributes' => array(
'class' => array(
'monitoring-severity-colors',
),
'id' => 'monitoring-sensors-overview',
),
'#attached' => [
'drupalSettings' => [
'monitoring_escalated_sensors' => $monitoring_escalated_sensors,
],
'library' => [
'monitoring/monitoring',
],
],
);
return $output;
}
}