You are here

public function DrupalMonitorController::drupalmonitor in Drupalmonitor 8

Callback for /drupalmonitor.

Parameters

\Symfony\Component\HttpFoundation\Request $request:

Return value

\Symfony\Component\HttpFoundation\JsonResponse

1 string reference to 'DrupalMonitorController::drupalmonitor'
drupalmonitor.routing.yml in ./drupalmonitor.routing.yml
drupalmonitor.routing.yml

File

src/Controller/DrupalMonitorController.php, line 68

Class

DrupalMonitorController
Class DrupalmonitorController.

Namespace

Drupal\drupalmonitor\Controller

Code

public function drupalmonitor(Request $request) {
  Timer::start('drupalmonitor');

  // Check whether Hash is set.
  if (!$request->query
    ->has('hash')) {
    return new JsonResponse([
      'note' => 'no hash set',
    ], 400);
  }

  // Check whether Hash is empty.
  $hash_request = $request->query
    ->get('hash');
  if (!$hash_request) {
    return new JsonResponse([
      'note' => 'hash is empty',
    ], 400);
  }

  // Get saved Hash.
  $hash_site = $this->drupalMonitorSettings
    ->getHash();

  // Check whether the saved Hash is exists and has a value.
  if (empty($hash_site)) {
    return new JsonResponse([
      'note' => 'You have not set a drupalmonitor hash yet on your Drupal site.',
    ], 400);
  }

  // Compare Hashes.
  if ($hash_site != $hash_request) {
    return new JsonResponse([
      'note' => 'Wrong hash',
    ], 400);
  }

  // Output versions.
  $info['drupalmonitor_version'] = DRUPALMONITOR_VERSION;
  $info['drupalversion'] = \Drupal::VERSION;

  // Add allowed Monitorings.
  $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 specific data is being requested.
  if ($request->query
    ->has('data')) {
    $requested_data = explode(',', $request->query
      ->get('data'));

    // Server metrics.
    if (in_array('server', $requested_data) && $this->drupalMonitorSettings
      ->isServerMonitoringEnabled()) {
      $info['server'] = $this->metricService
        ->getServerData();
    }

    // User user count data.
    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();
    }

    // Files files count data.
    if (in_array('files', $requested_data) && $this->drupalMonitorSettings
      ->isFilesMonitoringEnabled()) {
      $info['files']['files_filescount'] = $this->metricService
        ->getFilesCount();
      $info['files']['files_filesfoldersize'] = $this->metricService
        ->getTotalFilesSize();
    }

    // Node content types data.
    if (in_array('node', $requested_data) && $this->drupalMonitorSettings
      ->isNodeMonitoringEnabled()) {
      $info['nodes']['drupalmonitor_node_contenttypes'] = $this->metricService
        ->getNodeContentTypes();
    }

    // Module metrics.
    if (in_array('modules', $requested_data) && $this->drupalMonitorSettings
      ->isModulesMonitoringEnabled()) {
      $info['tbl_system'] = $this->metricService
        ->getModuleList();
    }

    // Variables metrics.
    if (in_array('variables', $requested_data) && $this->drupalMonitorSettings
      ->isVariablesMonitoringEnabled()) {
      $info['config'] = $this->metricService
        ->getConfigList();
    }
  }

  // Drupalmonitor infos.
  $info['drupalmonitor_executiontime'] = Timer::read('drupalmonitor');
  $info['drupalmonitor_status'] = "OK";
  return new JsonResponse($info);
}