Skip to content

Commit

Permalink
refactored Profiler and DataCollector classes (the WDT has been remov…
Browse files Browse the repository at this point in the history
…ed and will be re-added in the upcoming WebProfilerBundle)
  • Loading branch information
fabpot committed Aug 29, 2010
1 parent eb66e0d commit 72db4c7
Show file tree
Hide file tree
Showing 30 changed files with 1,029 additions and 556 deletions.
Expand Up @@ -2,8 +2,10 @@

namespace Symfony\Bundle\DoctrineBundle\DataCollector;

use Symfony\Component\HttpKernel\Profiler\DataCollector\DataCollector;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\HttpKernel\DataCollector\DataCollector;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Bundle\DoctrineBundle\Logger\DbalLogger;

/*
* This file is part of the Symfony framework.
Expand All @@ -21,21 +23,21 @@
*/
class DoctrineDataCollector extends DataCollector
{
protected $container;
protected $logger;

public function __construct(ContainerInterface $container)
public function __construct(DbalLogger $logger = null)
{
$this->container = $container;
$this->logger = $logger;
}

public function collect()
/**
* {@inheritdoc}
*/
public function collect(Request $request, Response $response, \Exception $exception = null)
{
$this->data = array();
if ($this->container->has('doctrine.dbal.logger')) {
$this->data = array(
'queries' => $this->container->getDoctrine_Dbal_LoggerService()->queries,
);
}
$this->data = array(
'queries' => null !== $this->logger ? $this->logger->queries : array(),
);
}

public function getQueryCount()
Expand All @@ -48,16 +50,9 @@ public function getQueries()
return $this->data['queries'];
}

public function getSummary()
{
$queries = count($this->data['queries']);
$queriesColor = $queries < 10 ? '#2d2' : '#d22';

return sprintf('<img style="margin-left: 10px; vertical-align: middle" alt="" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAKlJREFUeNrsk0EOgyAQRT9KiLog7D0Ql+B4HsULeAHXQFwaiCGBCm1Nmi4a69a/IDNk5g+8ZEhKCcMwYFfCORGlFOgrSVJKNE0DxhgofV6HELBtG5xz8N6XuK7rUjOOYx5I3gbQWoNzDiEEuq5DjLE0LcsCYwystVjXFW3bou/74xkVLuqywfGFaZp+T6uqwmGe52+DPyB+GtwQb4h5q3aI6SREko+HAAMADJ+V5b1xqucAAAAASUVORK5CYII=" />
<span style="color: %s">%d</span>
', $queriesColor, $queries);
}

/**
* {@inheritdoc}
*/
public function getName()
{
return 'db';
Expand Down
Expand Up @@ -21,7 +21,7 @@

<service id="doctrine.data_collector" class="%doctrine.data_collector.class%">
<tag name="data_collector" />
<argument type="service" id="service_container" />
<argument type="service" id="doctrine.dbal.logger" />
</service>
</services>
</container>
Expand Up @@ -2,8 +2,10 @@

namespace Symfony\Bundle\DoctrineMongoDBBundle\DataCollector;

use Symfony\Component\HttpKernel\Profiler\DataCollector\DataCollector;
use Symfony\Component\HttpKernel\DataCollector\DataCollector;
use Symfony\Bundle\DoctrineMongoDBBundle\Logger\DoctrineMongoDBLogger;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;

/**
* Data collector for the Doctrine MongoDB ODM.
Expand All @@ -19,20 +21,22 @@ public function __construct(DoctrineMongoDBLogger $logger)
$this->logger = $logger;
}

public function collect()
/**
* {@inheritdoc}
*/
public function collect(Request $request, Response $response, \Exception $exception = null)
{
$this->data['nb_queries'] = $this->logger->getNbQueries();
}

public function getSummary()
public function getQueryCount()
{
$color = $this->data['nb_queries'] < 10 ? '#2d2' : '#d22';

return sprintf('<img style="margin-left: 10px; vertical-align: middle" alt="" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAeJJREFUeNqM009r1EAUAPD3kkm22bapthSlq/EPUg9FUMSLoCAVvPUm4smr4Ico+BW89SCe6tVDj2oVLwVRS6HqTcUqwe7W7SbZbGbmzTiTvei2ML6QDAwzP968l0GtNfwdS/eu1KMSBHEytbhf9HbLdrGFiPX8i9VP/6z3YCTKvITidwETyeTN5NbZNTzFHhVZGWc/MsjTfHT5QUBKCcFMOD97be6JRhgLj0fXxy9PrXi+h6jRDfCcQ3xx+iE0/ZbgAogrCE5Gd8JzzftaKjfgHw0uBUm0JCoOpAmUUqBIgwEe4LgfO4HwdLSoQoykJJBEYGuspQaMgwU227jhBHQDFwjMZmW+Wg0BPVyJR9hVJwAT3rQkCVJbxpzZ1M0ew9ZPVWrG3YVMDKTZSDYDZY+gzYuWAs2VdHfhW3/bFq/OoEYMYB8zUkd8dgMf8zWxV+XkKRA1YNL3EGhf9uSX/ksnQCl/X7zqPCZmAVkDyDzgH3qrtCe2nACGCMV6Z7n3pv2chT6wgEG1nW1UG91lDP7jT0TfA3NxurtPv96dfOu/Pp/Oves++36buPxl2zoabHSiGlTDS9Uv24PNbOXMheRE61hrpxE14LA4APjMr8eoOQY/03RTaLVTDkrggh8K/BFgAGj/AWtED/mBAAAAAElFTkSuQmCC" />
<span style="color: %s">%d</span>
', $color, $this->data['nb_queries']);
return $this->data['nb_queries'];
}

/**
* {@inheritdoc}
*/
public function getName()
{
return 'mongodb';
Expand Down

This file was deleted.

141 changes: 121 additions & 20 deletions src/Symfony/Bundle/FrameworkBundle/DataCollector/ConfigDataCollector.php
Expand Up @@ -3,8 +3,10 @@
namespace Symfony\Bundle\FrameworkBundle\DataCollector;

use Symfony\Framework\Kernel;
use Symfony\Component\HttpKernel\Profiler\DataCollector\DataCollector;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\HttpKernel\DataCollector\DataCollector;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\RouterInterface;

/*
* This file is part of the Symfony framework.
Expand All @@ -22,23 +24,32 @@
*/
class ConfigDataCollector extends DataCollector
{
protected $container;
protected $kernel;
protected $router;

public function __construct(ContainerInterface $container)
/**
* Constructor.
*
* @param Kernel $kernel A Kernel instance
* @param RouterInterface $router A Router instance
*/
public function __construct(Kernel $kernel, RouterInterface $router = null)
{
$this->container = $container;
$this->kernel = $kernel;
$this->router = $router;
}

public function collect()
/**
* {@inheritdoc}
*/
public function collect(Request $request, Response $response, \Exception $exception = null)
{
$kernel = $this->container->getKernelService();

$this->data = array(
'token' => $this->profiler->getProfilerStorage()->getToken(),
'token' => $response->headers->get('X-Debug-Token'),
'symfony_version' => Kernel::VERSION,
'name' => $kernel->getName(),
'env' => $kernel->getEnvironment(),
'debug' => $kernel->isDebug(),
'name' => $this->kernel->getName(),
'env' => $this->kernel->getEnvironment(),
'debug' => $this->kernel->isDebug(),
'php_version' => PHP_VERSION,
'xdebug' => extension_loaded('xdebug'),
'accel' => (
Expand All @@ -51,17 +62,107 @@ public function collect()
);
}

public function getSummary()
/**
* Gets the URL.
*
* @return string The URL
*/
public function getUrl()
{
if (null !== $this->router) {
try {
return $this->router->generate('_profiler', array('token' => $this->data['token']));
} catch (\Exception $e) {
// the route is not registered
}
}

return false;
}

/**
* Gets the token.
*
* @return string The token
*/
public function getToken()
{
return $this->data['token'];
}

/**
* Gets the Symfony version.
*
* @return string The Symfony version
*/
public function getSymfonyVersion()
{
return $this->data['symfony_version'];
}

/**
* Gets the PHP version.
*
* @return string The PHP version
*/
public function getPhpVersion()
{
return $this->data['php_version'];
}

/**
* Gets the application name.
*
* @return string The application name
*/
public function getAppName()
{
return $this->data['name'];
}

/**
* Gets the environment.
*
* @return string The environment
*/
public function getEnv()
{
return $this->data['env'];
}

/**
* Returns true if the debug is enabled.
*
* @return Boolean true if debug is enabled, false otherwise
*/
public function isDebug()
{
return $this->data['debug'];
}

/**
* Returns true if the XDebug is enabled.
*
* @return Boolean true if XDebug is enabled, false otherwise
*/
public function hasXDebug()
{
return $this->data['xdebug'];
}

/**
* Returns true if an accelerator is enabled.
*
* @return Boolean true if an accelerator is enabled, false otherwise
*/
public function hasAccelerator()
{
return sprintf('<img style="vertical-align: middle" alt="Symfony" src="data:image/png;base64,R0lGODlhOwARAMQdAIZ1X9rVz0owD/Lx78K6r2JML3pnT+bj37asn6qej1Y+H+jk4JKDb0oxEJOEcId2YGJMMPTy8KufkLetoJ+RgNvW0M7Iv56Rf25aP8/JwG5aQP///z4jAP///wAAAAAAACH5BAEAAB0ALAAAAAA7ABEAAAX/YLc8WmmeaKqu7OosYsPNdG3fuCDgfM81C4dvyAsEiEgORZNMGjaI5rBEEzAugBmWBshiOICtAbu7QL+Ky8UwExQw6i8HTqPPqJzCYMMPCDYWNBYWBRsHfIaIgWYbWIiAHAF7iAkcZjSXd0wchwQYCBZ/gTODHAQbngEbARincBsYGAMDAK2NAKsGBodpG5i+mjMGewg7HJCki7AcT18YG1e+DBtZMweBjTO4r780eHmqAQXHoxylZs7Lz2q+6IIDxxczz6/GmRzfBQKnAxgWG+MiKUuXjh0zVDMKEYg3DxYueRwSAMO3SSKBfwMEPBtA4NDAOeoaZQp3alk2kBgEVJDk421TgX+AAu5SZClkwUwCEPA5wIYhSg4KYO5pieRZFClIrcELNkTAHgVJkUqEyOGBBCRdoiItUInGhAgQtIpNoqGD2Qxo06pdy7at27dvK5gNAQA7" />
%s
<img style="margin-left: 10px; vertical-align: middle" alt="PHP" src="data:image/png;base64,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" />
%s<span style="margin: 0; padding: 0; color: #aaa">/</span><span style="color: %s">xdebug</span><span style="margin: 0; padding: 0; color: #aaa">/</span><span style="color: %s">accel</span>
<img style="margin-left: 10px; vertical-align: middle" alt="" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAATtJREFUeNqcU0Gqg0AMjZ/eQbEH0IUewIV4BXEjeD9dCvYGUlB056IU3Rf0Ci6c/hc6g/rr7+cHwkySl8xLZkZL05QORKz22jtAkiR0OkigIAjofD7T4/GgsizFLlcV/JLJAKOi4zjsME1zs8KPOHDrw7RXCwLBv0qWZZyLHMmAuq4jIcRHBW4taga3241c1+U9+r5erwrk+76kzri1gIEAII5jdcorWZMKW8aAA17OgRkYhkHLsvza9zoO/OYWQHmeZwYdFZIxKPDrGWhVVTGdKIrY6Xke1XWtrgo26EPyPN+8BTVEy7LU6bquUxiGPxigCHB939P+IZFt2x+vUOL2t8DSNA2D7vc7FUWxSYQNP/bAvXsH2jiO4nK5qMC3za1M08T2MAys+79wOvpxbdt+/I0ckL39V54CDAChFuDJX64gowAAAABJRU5ErkJggg==" />
%s<span style="margin: 0; padding: 0; color: #aaa">/</span>%s<span style="margin: 0; padding: 0; color: #aaa">/</span>%s<span style="margin: 0; padding: 0; color: #aaa">/</span><a style="color: #000" href="#%s">%s</a>
', $this->data['symfony_version'], $this->data['php_version'], $this->data['xdebug'] ? '#3a3' : '#a33', $this->data['accel'] ? '#3a3' : '#a33', $this->data['name'], $this->data['env'], $this->data['debug'] ? 'debug' : 'no-debug', $this->data['token'], $this->data['token']);
return $this->data['accel'];
}

/**
* {@inheritdoc}
*/
public function getName()
{
return 'config';
Expand Down
@@ -0,0 +1,44 @@
<?php

namespace Symfony\Bundle\FrameworkBundle\DataCollector;

use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\DataCollector\RequestDataCollector as BaseRequestDataCollector;

/*
* This file is part of the Symfony framework.
*
* (c) Fabien Potencier <fabien.potencier@symfony-project.com>
*
* This source file is subject to the MIT license that is bundled
* with this source code in the file LICENSE.
*/

/**
* RequestDataCollector.
*
* @author Fabien Potencier <fabien.potencier@symfony-project.com>
*/
class RequestDataCollector extends BaseRequestDataCollector
{
/**
* {@inheritdoc}
*/
public function collect(Request $request, Response $response, \Exception $exception = null)
{
parent::collect($request, $response, $exception);

$this->data['route'] = $request->attributes->get('_route');
}

/**
* Gets the route.
*
* @return string The route
*/
public function getRoute()
{
return $this->data['route'];
}
}

0 comments on commit 72db4c7

Please sign in to comment.