View source
<?php
namespace Drupal\drupalmonitor\Controller;
use Drupal\Core\Controller\ControllerBase;
use Drupal\drupalmonitor\MetricService;
use Drupal\drupalmonitor\Settings;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\JsonResponse;
use Drupal\Component\Utility\Timer;
use Symfony\Component\DependencyInjection\ContainerInterface;
class DrupalMonitorController extends ControllerBase {
protected $drupalMonitorSettings;
protected $metricService;
public function __construct(Settings $drupal_monitor_settings, MetricService $metric_service) {
$this->drupalMonitorSettings = $drupal_monitor_settings;
$this->metricService = $metric_service;
}
public static function create(ContainerInterface $container) {
return new static($container
->get('drupalmonitor.settings'), $container
->get('drupalmonitor.metric_service'));
}
public function drupalmonitor(Request $request) {
Timer::start('drupalmonitor');
if (!$request->query
->has('hash')) {
return new JsonResponse([
'note' => 'no hash set',
], 400);
}
$hash_request = $request->query
->get('hash');
if (!$hash_request) {
return new JsonResponse([
'note' => 'hash is empty',
], 400);
}
$hash_site = $this->drupalMonitorSettings
->getHash();
if (empty($hash_site)) {
return new JsonResponse([
'note' => 'You have not set a drupalmonitor hash yet on your Drupal site.',
], 400);
}
if ($hash_site != $hash_request) {
return new JsonResponse([
'note' => 'Wrong hash',
], 400);
}
$info['drupalmonitor_version'] = DRUPALMONITOR_VERSION;
$info['drupalversion'] = \Drupal::VERSION;
$check_allowed = [
'files' => $this->drupalMonitorSettings
->isFilesMonitoringEnabled(),
'server' => $this->drupalMonitorSettings
->isServerMonitoringEnabled(),
'user' => $this->drupalMonitorSettings
->isUserMonitoringEnabled(),
'node' => $this->drupalMonitorSettings
->isNodeMonitoringEnabled(),
'modules' => $this->drupalMonitorSettings
->isModulesMonitoringEnabled(),
'variables' => $this->drupalMonitorSettings
->isVariablesMonitoringEnabled(),
];
$filtered_allowed = array_filter($check_allowed, function ($value, $key) {
return $value;
}, ARRAY_FILTER_USE_BOTH);
$info['drupalmonitor_allowed'] = 'data=' . implode(',', array_keys($filtered_allowed));
if ($request->query
->has('data')) {
$requested_data = explode(',', $request->query
->get('data'));
if (in_array('server', $requested_data) && $this->drupalMonitorSettings
->isServerMonitoringEnabled()) {
$info['server'] = $this->metricService
->getServerData();
}
if (in_array('user', $requested_data) && $this->drupalMonitorSettings
->isUserMonitoringEnabled()) {
$info['user']['user_usercount'] = $this->metricService
->getUserCount();
$info['user']['user_activesessioncount_300s'] = $this->metricService
->getActiveSessionsCount();
$info['user']['user_loggedinsessioncount_300s'] = $this->metricService
->getLoggedInSessionsCount();
}
if (in_array('files', $requested_data) && $this->drupalMonitorSettings
->isFilesMonitoringEnabled()) {
$info['files']['files_filescount'] = $this->metricService
->getFilesCount();
$info['files']['files_filesfoldersize'] = $this->metricService
->getTotalFilesSize();
}
if (in_array('node', $requested_data) && $this->drupalMonitorSettings
->isNodeMonitoringEnabled()) {
$info['nodes']['drupalmonitor_node_contenttypes'] = $this->metricService
->getNodeContentTypes();
}
if (in_array('modules', $requested_data) && $this->drupalMonitorSettings
->isModulesMonitoringEnabled()) {
$info['tbl_system'] = $this->metricService
->getModuleList();
}
if (in_array('variables', $requested_data) && $this->drupalMonitorSettings
->isVariablesMonitoringEnabled()) {
$info['config'] = $this->metricService
->getConfigList();
}
}
$info['drupalmonitor_executiontime'] = Timer::read('drupalmonitor');
$info['drupalmonitor_status'] = "OK";
return new JsonResponse($info);
}
}