monitoring-8.x-1.x-dev/src/Form/SensorDetailForm.php

src/Form/SensorDetailForm.php
<?php
/**
 * @file
 *   Contains \Drupal\monitoring\Form\SensorDetailForm.
 */

namespace Drupal\monitoring\Form;

use Drupal\Core\Entity\EntityForm;
use Drupal\monitoring\SensorConfigInterface;
use Drupal\monitoring\Sensor\DisabledSensorException;
use Drupal\monitoring\Sensor\NonExistingSensorException;
use Drupal\monitoring\Sensor\SensorManager;
use Drupal\monitoring\SensorRunner;
use Drupal\views\Views;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use Drupal\Core\Form\FormStateInterface;

/**
 * Sensor detail form controller.
 */
class SensorDetailForm extends EntityForm {

  /**
   * The sensor runner.
   *
   * @var \Drupal\monitoring\SensorRunner
   */
  protected $sensorRunner;

  /**
   * The sensor manager.
   *
   * @var \Drupal\monitoring\Sensor\SensorManager
   */
  protected $sensorManager;

  /**
   * Constructs a \Drupal\monitoring\Form\SensorDetailForm object.
   *
   * @param \Drupal\monitoring\SensorRunner $sensor_runner
   *   The factory for configuration objects.
   * @param \Drupal\monitoring\Sensor\SensorManager $sensor_manager
   *   The sensor manager service.
   */
  public function __construct(SensorRunner $sensor_runner, SensorManager $sensor_manager) {
    $this->sensorRunner = $sensor_runner;
    $this->sensorManager = $sensor_manager;
  }

  /**
   * {@inheritdoc}
   */
  public static function create(ContainerInterface $container) {
    return new static(
      $container->get('monitoring.sensor_runner'),
      $container->get('monitoring.sensor_manager')
    );
  }

  /**
   * {@inheritdoc}
   */
  public function actions(array $form, FormStateInterface $form_state) {
    // Remove save button on sensor detail page as it breaks settings.
    return array();
  }

  /**
   * {@inheritdoc}
   */
  public function form(array $form, FormStateInterface $form_state) {
    $form = parent::form($form, $form_state);
    /** @var \Drupal\monitoring\SensorConfigInterface $sensor_config */
    $sensor_config = $this->entity;
    try {
      $results = $this->sensorRunner->runSensors(array($sensor_config), FALSE, TRUE);
      $result = array_shift($results);
    }
    catch (DisabledSensorException $e) {
      throw new NotFoundHttpException();
    }
    catch (NonExistingSensorException $e) {
      throw new NotFoundHttpException();
    }

    if ($sensor_config->getDescription()) {
      $form['sensor_config']['description'] = array(
        '#type' => 'item',
        '#title' => $this->t('Description'),
        '#markup' => $sensor_config->getDescription(),
      );
    }

    if ($sensor_config->getCategory()) {
      $form['sensor_config']['category'] = array(
        '#type' => 'item',
        '#title' => $this->t('Category'),
        '#markup' => $sensor_config->getCategory(),
      );
    }

    $form['sensor_result'] = array(
      '#type' => 'fieldset',
      '#title' => $this->t('Result'),
    );

    $form['sensor_result']['status'] = array(
      '#type' => 'item',
      '#title' => $this->t('Status'),
      '#markup' => $result->getStatusLabel(),
    );

    $form['sensor_result']['message'] = array(
      '#type' => 'item',
      '#title' => $this->t('Message'),
      '#markup' => $result->getMessage(),
    );


    $form['sensor_result']['execution_time'] = array(
      '#type' => 'item',
      '#title' => $this->t('Execution time'),
      '#markup' => $result->getExecutionTime() . 'ms',
    );

    if ($result->isCached()) {
      $form['sensor_result']['cached'] = array(
        '#type' => 'item',
        '#title' => $this->t('Cache information'),
        '#markup' => $this->t('Executed @interval ago, valid for @valid', array('@interval' => \Drupal::service('date.formatter')->formatInterval(\Drupal::time()->getRequestTime() - $result->getTimestamp()), '@valid' => \Drupal::service('date.formatter')->formatInterval($sensor_config->getCachingTime()))),
      );

      $form['sensor_result']['force_run'] = array(
        '#type' => 'submit',
        '#value' => $this->t('Run now'),
        '#access' => \Drupal::currentUser()->hasPermission('administer monitoring') || \Drupal::currentUser()->hasPermission('monitoring force run'),
      );
    }
    elseif ($sensor_config->getCachingTime()) {
      $form['sensor_result']['cached'] = array(
        '#type' => 'item',
        '#title' => $this->t('Cache information'),
        '#markup' => $this->t('Executed now, valid for @valid', array('@valid' => \Drupal::service('date.formatter')->formatInterval($sensor_config->getCachingTime()))),
      );

      $form['sensor_result']['force_run'] = array(
        '#type' => 'submit',
        '#value' => $this->t('Run again'),
        '#access' => \Drupal::currentUser()->hasPermission('administer monitoring') || \Drupal::currentUser()->hasPermission('monitoring force run'),
      );
    }
    else {
      $form['sensor_result']['cached'] = array(
        '#type' => 'item',
        '#title' => $this->t('Cache information'),
        '#markup' => $this->t('Not cached'),
      );
    }

    if ($sensor_config->isExtendedInfo()) {
      $form['sensor_result']['verbose'] = array(
        '#type' => 'fieldset',
        '#title' => $this->t('Verbose'),
        '#access' => \Drupal::currentUser()->hasPermission('administer monitoring') || \Drupal::currentUser()->hasPermission('monitoring verbose'),
      );
      if ($result->isCached()) {
        $form['sensor_result']['verbose']['output'] = array(
          '#type' => 'markup',
          '#markup' => '<p>' . $this->t('Verbose output is not available for cached sensor results. Click force run to see verbose output.') . '</p>',
        );
      }
      elseif ($verbose_output = $result->getVerboseOutput()) {
        $form['sensor_result']['verbose']['output'] = $verbose_output;
      }
      else {
        $form['sensor_result']['verbose']['output'] = array(
          '#type' => 'markup',
          '#markup' => '<p>' . $this->t('No verbose output available for this sensor execution.') . '</p>',
        );
      }
    }

    $form['settings'] = array(
      '#type' => 'details',
      '#title' => $this->t('Settings'),
      '#description' => array('#markup' => '<pre>' . var_export($sensor_config->getSettings(), TRUE) . '</pre>'),
      '#open' => FALSE,
    );

    $view = Views::getView('monitoring_sensor_results');
    if (!empty($view)) {
      $view->initDisplay();
      $output = $view->preview('detail_page_log', array($sensor_config->id()));
      if (!empty($view->result)) {
        $form['sensor_log'] = array(
          '#type' => 'details',
          '#title' => $this->t('Log'),
          '#open' => FALSE,
        );
        $form['sensor_log']['view'] = $output;
      }
    }

    return $form;
  }

  /**
   * {@inheritdoc}
   */
  public function validate(array $form, FormStateInterface $form_state) {
  }

  /**
   * {@inheritdoc}
   */
  public function submitForm(array &$form, FormStateInterface $form_state) {
    $this->sensorRunner->resetCache(array($this->entity->id()));
    $this->messenger()->addMessage($this->t('Sensor force run executed.'));
  }

  /**
   * Detail page title callback.
   *
   * @param \Drupal\monitoring\Entity\SensorConfig $monitoring_sensor_config
   *   The Sensor config.
   *
   * @return string
   */
  public function formTitle(SensorConfigInterface $monitoring_sensor_config) {
    return $this->t('@label (@category)', array('@category' => $monitoring_sensor_config->getCategory(), '@label' => $monitoring_sensor_config->getLabel()));
  }
}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc