DashboardController.php
Namespace
Drupal\webprofiler\ControllerFile
-
webprofiler/
src/ Controller/ DashboardController.php
View source
<?php
namespace Drupal\webprofiler\Controller;
use Drupal\Core\Controller\ControllerBase;
use Drupal\Core\Datetime\DateFormatter;
use Drupal\Core\Url;
use Drupal\webprofiler\DrupalDataCollectorInterface;
use Drupal\webprofiler\Profiler\ProfilerStorageManager;
use Drupal\webprofiler\Profiler\TemplateManager;
use Symfony\Component\HttpFoundation\JsonResponse;
use Drupal\webprofiler\Profiler\Profiler;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\HttpKernel\Profiler\Profile;
use Symfony\Component\Routing\RouterInterface;
/**
* Class DashboardController
*/
class DashboardController extends ControllerBase {
/**
* @var \Drupal\webprofiler\Profiler\Profiler
*/
private $profiler;
/**
* @var \Symfony\Cmf\Component\Routing\ChainRouter
*/
private $router;
/**
* @var \Drupal\webprofiler\Profiler\TemplateManager
*/
private $templateManager;
/**
* @var \Drupal\Core\Datetime\DateFormatter
*/
private $date;
/**
* @var \Drupal\webprofiler\Profiler\ProfilerStorageManager
*/
private $storageManager;
/**
* {@inheritdoc}
*/
public static function create(ContainerInterface $container) {
return new static($container->get('profiler'), $container->get('router'), $container->get('template_manager'), $container->get('date.formatter'), $container->get('profiler.storage_manager'));
}
/**
* Constructs a new WebprofilerController.
*
* @param \Drupal\webprofiler\Profiler\Profiler $profiler
* @param \Symfony\Component\Routing\RouterInterface $router
* @param \Drupal\webprofiler\Profiler\TemplateManager $templateManager
* @param \Drupal\Core\Datetime\DateFormatter $date
* @param \Drupal\webprofiler\Profiler\ProfilerStorageManager $storageManager
*/
public function __construct(Profiler $profiler, RouterInterface $router, TemplateManager $templateManager, DateFormatter $date, ProfilerStorageManager $storageManager) {
$this->profiler = $profiler;
$this->router = $router;
$this->templateManager = $templateManager;
$this->date = $date;
$this->storageManager = $storageManager;
}
/**
* Generates the dashboard page.
*
* @param Profile $profile
*
* @return array
*/
public function dashboardAction(Profile $profile) {
$this->profiler
->disable();
$templateManager = $this->templateManager;
$templates = $templateManager->getTemplates($profile);
$panels = [];
$libraries = [
'webprofiler/dashboard',
];
$drupalSettings = [
'webprofiler' => [
'token' => $profile->getToken(),
'ide_link' => $this->config('webprofiler.config')
->get('ide_link'),
'ide_link_remote' => $this->config('webprofiler.config')
->get('ide_link_remote'),
'ide_link_local' => $this->config('webprofiler.config')
->get('ide_link_local'),
'collectors' => [],
],
];
foreach ($templates as $name => $template) {
/** @var DrupalDataCollectorInterface $collector */
$collector = $profile->getCollector($name);
if ($collector->hasPanel()) {
$rendered = $template->renderBlock('panel', [
'token' => $profile->getToken(),
'name' => $name,
]);
$panels[] = [
'#theme' => 'webprofiler_panel',
'#panel' => $rendered,
];
$drupalSettings['webprofiler']['collectors'][] = [
'id' => $name,
'name' => $name,
'label' => $collector->getTitle(),
'summary' => $collector->getPanelSummary(),
'icon' => $collector->getIcon(),
];
$libraries = array_merge($libraries, $collector->getLibraries());
$drupalSettings['webprofiler'] += $collector->getDrupalSettings();
}
}
$build = [];
$build['panels'] = [
'#theme' => 'webprofiler_dashboard',
'#profile' => $profile,
'#panels' => $panels,
'#spinner_path' => '/' . $this->moduleHandler()
->getModule('webprofiler')
->getPath() . '/images/searching.gif',
'#attached' => [
'drupalSettings' => $drupalSettings,
'library' => $libraries,
],
];
return $build;
}
/**
* Generates the list page.
*
* @param \Symfony\Component\HttpFoundation\Request $request
*
* @return array
*/
public function listAction(Request $request) {
$limit = $request->get('limit', 10);
$this->profiler
->disable();
$ip = $request->query
->get('ip');
$method = $request->query
->get('method');
$url = $request->query
->get('url');
$profiles = $this->profiler
->find($ip, $url, $limit, $method, '', '');
$rows = [];
if (count($profiles)) {
foreach ($profiles as $profile) {
$row = [];
$row[] = $this->l($profile['token'], new Url('webprofiler.dashboard', [
'profile' => $profile['token'],
]));
$row[] = $profile['ip'];
$row[] = $profile['method'];
$row[] = $profile['url'];
$row[] = $this->date
->format($profile['time']);
$rows[] = $row;
}
}
else {
$rows[] = [
[
'data' => $this->t('No profiles found'),
'colspan' => 6,
],
];
}
$build = [];
$storage_id = $this->config('webprofiler.config')
->get('storage');
$storage = $this->storageManager
->getStorage($storage_id);
$build['resume'] = [
'#type' => 'inline_template',
'#template' => '<p>{{ message }}</p>',
'#context' => [
'message' => $this->t('Profiles stored with %storage service.', [
'%storage' => $storage['title'],
]),
],
];
$build['filters'] = $this->formBuilder()
->getForm('Drupal\\webprofiler\\Form\\ProfilesFilterForm');
$build['table'] = [
'#type' => 'table',
'#rows' => $rows,
'#header' => [
$this->t('Token'),
[
'data' => $this->t('Ip'),
'class' => [
RESPONSIVE_PRIORITY_LOW,
],
],
[
'data' => $this->t('Method'),
'class' => [
RESPONSIVE_PRIORITY_LOW,
],
],
$this->t('Url'),
[
'data' => $this->t('Time'),
'class' => [
RESPONSIVE_PRIORITY_MEDIUM,
],
],
],
'#sticky' => TRUE,
];
return $build;
}
/**
* Exposes collector's data as JSON.
*
* @param \Symfony\Component\HttpKernel\Profiler\Profile $profile
* @param $collector
*
* @return \Symfony\Component\HttpFoundation\JsonResponse
*/
public function restCollectorAction(Profile $profile, $collector) {
$this->profiler
->disable();
$data = $profile->getCollector($collector)
->getData();
return new JsonResponse([
'data' => $data,
]);
}
}
Classes
Title | Deprecated | Summary |
---|---|---|
DashboardController | Class DashboardController |