new_relic_rpm.module in New Relic 8
Same filename and directory in other branches
Drupal module implementing New Relic.
File
new_relic_rpm.moduleView source
<?php
/**
* @file
* Drupal module implementing New Relic.
*/
use Drupal\Component\Utility\Timer;
use Drupal\views\ViewExecutable;
use Drupal\Core\Routing\RouteMatchInterface;
/**
* Implements hook_cron().
*
* This is used to set cron tasks to be not tracked by New Relic if so desired.
*/
function new_relic_rpm_cron() {
$cron_tracking = \Drupal::config('new_relic_rpm.settings')
->get('track_cron');
\Drupal::service('new_relic_rpm.adapter')
->setTransactionState($cron_tracking);
}
/**
* Implements hook_modules_installed().
*/
function new_relic_rpm_modules_installed($modules) {
new_relic_rpm_module_deploy($modules, 'install');
}
/**
* Implements hook_modules_uninstalled().
*/
function new_relic_rpm_modules_uninstalled($modules) {
new_relic_rpm_module_deploy($modules, 'uninstall');
}
/**
* Log module install/uninstall actions as a deploy call to New Relic.
*/
function new_relic_rpm_module_deploy($modules, $action) {
if (!\Drupal::config('new_relic_rpm.settings')
->get('module_deployment')) {
return;
}
$description = t(':action :modules', [
':action' => $action == 'install' ? t('Installed')
->render() : t('Uninstalled')
->render(),
':modules' => implode(', ', $modules),
]);
/** @var \Drupal\new_relic_rpm\Client\NewRelicApiClient $client */
$client = \Drupal::service('new_relic_rpm.client');
$client
->createDeployment('module_change', $description
->render());
}
/**
* The unique name for the timer based on view details.
*
* @param \Drupal\views\ViewExecutable $view
* The view to create the timer for.
*
* @return string
* The timer name.
*/
function _new_relic_rpm_views_timer_name(ViewExecutable $view) {
$timer_name = 'new_relic_rpm:' . $view
->id() . ':' . $view->current_display;
if (!empty($view->args)) {
$timer_name .= ':' . implode(':', $view->args);
}
return $timer_name;
}
/**
* Implements hook_views_pre_build().
*/
function new_relic_rpm_views_pre_build(ViewExecutable $view) {
if (\Drupal::config('new_relic_rpm.settings')
->get('views_log_slow')) {
Timer::start(_new_relic_rpm_views_timer_name($view));
}
}
/**
* Implements hook_views_post_render().
*/
function new_relic_rpm_views_post_render(ViewExecutable $view) {
if (!\Drupal::config('new_relic_rpm.settings')
->get('views_log_slow')) {
return;
}
$execution_timer = Timer::stop(_new_relic_rpm_views_timer_name($view));
if ($execution_timer['time'] > \Drupal::config('new_relic_rpm.settings')
->get('views_log_threshold')) {
\Drupal::service('new_relic_rpm.adapter')
->recordCustomEvent('SlowView', [
'views_id' => $view
->id(),
'display_id' => $view->current_display,
'execution_time' => $execution_timer['time'],
'arguments' => $view->args,
]);
}
}
/**
* Implements hook_help().
*/
function new_relic_rpm_help($route_name, RouteMatchInterface $route_match) {
switch ($route_name) {
case 'help.page.new_relic_rpm':
return t("<p>This module's purpose is to enhance New Relic integration with Drupal and bring visibility of your website's performance into Drupal. It also allows you to perform some tasks pertaining to New Relic's monitoring of your site from within the Drupal website.</p>\n <p>See the <a href=\":project_page\">project page on Drupal.org</a> for more details.</p>", [
':project_page' => 'https://www.drupal.org/project/new_relic_rpm',
]);
}
}
Functions
Name | Description |
---|---|
new_relic_rpm_cron | Implements hook_cron(). |
new_relic_rpm_help | Implements hook_help(). |
new_relic_rpm_modules_installed | Implements hook_modules_installed(). |
new_relic_rpm_modules_uninstalled | Implements hook_modules_uninstalled(). |
new_relic_rpm_module_deploy | Log module install/uninstall actions as a deploy call to New Relic. |
new_relic_rpm_views_post_render | Implements hook_views_post_render(). |
new_relic_rpm_views_pre_build | Implements hook_views_pre_build(). |
_new_relic_rpm_views_timer_name | The unique name for the timer based on view details. |