monitoring_demo.install in Monitoring 8
Install file of the monitoring_demo module.
File
modules/demo/monitoring_demo.installView 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
Name | 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. |