You are here

monitoring_demo.install in Monitoring 8

Install file of the monitoring_demo module.

File

modules/demo/monitoring_demo.install
View source
<?php

/**
 * @file
 *   Install file of the monitoring_demo module.
 */
use Drupal\Component\Render\FormattableMarkup;
use Drupal\Component\Utility\Random;
use Drupal\Core\Language\LanguageInterface;
use Drupal\comment\Entity\Comment;
use Drupal\monitoring\Entity\SensorConfig;
use Drupal\node\Entity\Node;
use Drupal\node\Entity\NodeType;
use Drupal\node\NodeInterface;
use Drupal\search_api\Entity\Index;

/**
 * Implements hook_install().
 *
 * Executes setup of monitoring sensors to provide the demo functionality.
 */
function monitoring_demo_install() {
  $random = new Random();

  // Set the front page to monitoring-demo.
  \Drupal::configFactory()
    ->getEditable('system.site')
    ->set('page.front', '/monitoring-demo')
    ->save();

  // Create a few nodes and comments as sample data for some sensors.
  $nodes = [];
  $nodes[] = _monitoring_setup_create_node(array(
    'type' => 'article',
  ));
  _monitoring_setup_create_comment(array(
    'entity_id' => $nodes[0]
      ->id(),
  ));
  _monitoring_setup_create_comment(array(
    'entity_id' => $nodes[0]
      ->id(),
  ));
  _monitoring_setup_create_node();
  $nodes[] = _monitoring_setup_create_node(array(
    'type' => 'article',
  ));
  _monitoring_setup_create_comment(array(
    'entity_id' => $nodes[1]
      ->id(),
  ));
  _monitoring_setup_create_comment(array(
    'entity_id' => $nodes[1]
      ->id(),
  ));
  _monitoring_setup_create_comment(array(
    'entity_id' => $nodes[1]
      ->id(),
  ));
  _monitoring_setup_create_node();
  $sensor_manager = monitoring_sensor_manager();

  // Setup search API.
  $sensor_manager
    ->resetCache();
  $indices = Index::loadMultiple();

  // Enable sensor for the index created above.
  if (!empty($indices)) {
    foreach ($indices as $index) {
      $sensor_manager
        ->enableSensor('search_api_' . $index
        ->id());
    }
  }

  // Create node type sensors.
  foreach ([
    'page',
    'article',
  ] as $node_type_id) {
    $node_type = NodeType::load($node_type_id);
    $sensor = SensorConfig::create(array(
      'id' => 'node_new_' . $node_type
        ->id(),
      'label' => new FormattableMarkup('New @type nodes', array(
        '@type' => $node_type
          ->label(),
      )),
      'description' => new FormattableMarkup('New nodes of type @type', array(
        '@type' => $node_type
          ->label(),
      )),
      'plugin_id' => 'entity_aggregator',
      'value_label' => new FormattableMarkup('@type nodes', array(
        '@type' => $node_type
          ->label(),
      )),
      'category' => 'Content',
      'status' => FALSE,
      'caching_time' => 600,
      'settings' => array(
        'entity_type' => 'node',
        'conditions' => array(
          array(
            'field' => 'type',
            'value' => $node_type
              ->id(),
          ),
        ),
        'time_interval_field' => 'created',
        'time_interval_value' => 60 * 60 * 24,
      ),
    ));
    $sensor
      ->save();
  }

  // Enable content sensors.
  $sensor_manager
    ->enableSensor('node_new_all');
  $sensor_manager
    ->enableSensor('node_new_page');
  $sensor_manager
    ->enableSensor('node_new_article');
  $sensor_manager
    ->enableSensor('comment_new');

  // Generate watchdog entries.
  // Watchdog sensors are enabled by default, no need to enable them here.
  for ($i = 0; $i < 20; $i++) {
    \Drupal::logger('sensor_demo')
      ->error($random
      ->name());
    \Drupal::logger('sensor_demo')
      ->notice($random
      ->name());
  }
  for ($i = 0; $i < 10; $i++) {
    \Drupal::logger('sensor_demo')
      ->info($random
      ->name());
    \Drupal::logger('sensor_demo')
      ->warning($random
      ->name());
  }
  for ($i = 0; $i < 50; $i++) {
    \Drupal::database()
      ->insert('watchdog')
      ->fields(array(
      'type' => 'page not found',
      'message' => '@uri',
      'variables' => serialize([
        '@uri' => 'not/found',
      ]),
      'location' => 'http://example.com/not/found',
      'timestamp' => \Drupal::time()
        ->getRequestTime(),
    ))
      ->execute();
  }

  // Enable Enabled modules and Disappeared sensors for the "interactive" demo.
  $sensor_manager
    ->enableSensor('monitoring_installed_modules');
  $sensor_manager
    ->enableSensor('monitoring_disappeared_sensors');

  // Generate some image style derivative errors.
  $file = file_save_data($random
    ->name());

  /** @var \Drupal\file\FileUsage\FileUsageInterface $usage */
  $usage = \Drupal::service('file.usage');
  foreach ($nodes as $node) {
    $usage
      ->add($file, 'monitoring_test', 'node', $node
      ->id());

    // We use the logger.dblog service to be able to set the referer.
    \Drupal::service('logger.dblog')
      ->log(LOG_NOTICE, 'Source image at %source_image_path not found while trying to generate derivative image at %derivative_path.', [
      '%source_image_path' => $file
        ->getFileUri(),
      '%derivative_path' => 'hash://styles/preview/1234.jpeg',
      'request_uri' => '',
      'uid' => 0,
      'channel' => 'image',
      'link' => '',
      'referer' => 'http://example.com/node/' . $node
        ->id(),
      'ip' => '127.0.0.1',
      'timestamp' => \Drupal::time()
        ->getRequestTime(),
    ]);
  }
  $file = file_save_data($random
    ->name());
  \Drupal::logger('image')
    ->notice('Source image at %source_image_path not found while trying to generate derivative image at %derivative_path.', [
    '%source_image_path' => $file
      ->getFileUri(),
    '%derivative_path' => 'hash://styles/preview/5678.jpeg',
  ]);
}

/**
 * Creates comments for testing purposes.
 *
 * @param array $settings
 *   Comment data.
 *
 * @return object
 *   Crated comment.
 */
function _monitoring_setup_create_comment($settings = array()) {
  $random = new Random();
  $settings += array(
    'subject' => $random
      ->name(),
    'entity_id' => $settings['entity_id'],
    'field_name' => 'comment',
    'entity_type' => 'node',
    'comment_type' => 'comment',
    'comment_body' => $random
      ->name(40),
  );
  $comment = Comment::create($settings);
  $comment
    ->save();
  return $comment;
}

/**
 * Creates nodes for testing purposes.
 *
 * @param array $settings
 *   Node data.
 *
 * @return \Drupal\node\Entity\Node
 *   Created node.
 */
function _monitoring_setup_create_node($settings = array()) {
  $random = new Random();

  // Populate defaults array.
  $settings += array(
    'body' => array(
      array(),
    ),
    'title' => $random
      ->name(8),
    'revision' => 1,
    'log' => '',
    'status' => NodeInterface::PUBLISHED,
    'type' => 'page',
    'langcode' => LanguageInterface::LANGCODE_NOT_SPECIFIED,
  );

  // If the node's user uid is not specified manually, use the currently
  // logged in user if available, or else the user running the test.
  if (!isset($settings['uid'])) {
    $user = \Drupal::currentUser();
    $settings['uid'] = $user
      ->id();
  }

  // Merge body field value and format separately.
  $settings['body'][0] += array(
    'value' => $random
      ->name(32),
    'format' => filter_default_format(),
  );
  $node = Node::create($settings);
  if (!empty($settings['revision'])) {
    $node
      ->setNewRevision();
  }
  $node
    ->save();
  return $node;
}

Functions

Namesort descending Description
monitoring_demo_install Implements hook_install().
_monitoring_setup_create_comment Creates comments for testing purposes.
_monitoring_setup_create_node Creates nodes for testing purposes.