[HttpKernel] added LateDataCollectorInterface
This commit is contained in:
parent
9c4bc9a0ed
commit
5cedea2c07
@ -11,6 +11,7 @@
|
|||||||
|
|
||||||
namespace Symfony\Component\HttpKernel\DataCollector;
|
namespace Symfony\Component\HttpKernel\DataCollector;
|
||||||
|
|
||||||
|
use Symfony\Component\HttpKernel\DataCollector\LateDataCollectorInterface;
|
||||||
use Symfony\Component\HttpFoundation\Request;
|
use Symfony\Component\HttpFoundation\Request;
|
||||||
use Symfony\Component\HttpFoundation\Response;
|
use Symfony\Component\HttpFoundation\Response;
|
||||||
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
|
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
|
||||||
@ -21,7 +22,7 @@ use Symfony\Component\EventDispatcher\Debug\TraceableEventDispatcherInterface;
|
|||||||
*
|
*
|
||||||
* @author Fabien Potencier <fabien@symfony.com>
|
* @author Fabien Potencier <fabien@symfony.com>
|
||||||
*/
|
*/
|
||||||
class EventDataCollector extends DataCollector
|
class EventDataCollector extends DataCollector implements LateDataCollectorInterface
|
||||||
{
|
{
|
||||||
protected $dispatcher;
|
protected $dispatcher;
|
||||||
|
|
||||||
@ -41,6 +42,14 @@ class EventDataCollector extends DataCollector
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function lateCollect()
|
||||||
|
{
|
||||||
|
if ($this->dispatcher instanceof TraceableEventDispatcherInterface) {
|
||||||
|
$this->setCalledListeners($this->dispatcher->getCalledListeners());
|
||||||
|
$this->setNotCalledListeners($this->dispatcher->getNotCalledListeners());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the called listeners.
|
* Sets the called listeners.
|
||||||
*
|
*
|
||||||
@ -89,16 +98,6 @@ class EventDataCollector extends DataCollector
|
|||||||
return $this->data['not_called_listeners'];
|
return $this->data['not_called_listeners'];
|
||||||
}
|
}
|
||||||
|
|
||||||
public function serialize()
|
|
||||||
{
|
|
||||||
if ($this->dispatcher instanceof TraceableEventDispatcherInterface) {
|
|
||||||
$this->setCalledListeners($this->dispatcher->getCalledListeners());
|
|
||||||
$this->setNotCalledListeners($this->dispatcher->getNotCalledListeners());
|
|
||||||
}
|
|
||||||
|
|
||||||
return parent::serialize();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* {@inheritdoc}
|
* {@inheritdoc}
|
||||||
*/
|
*/
|
||||||
|
@ -0,0 +1,28 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of the Symfony package.
|
||||||
|
*
|
||||||
|
* (c) Fabien Potencier <fabien@symfony.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Symfony\Component\HttpKernel\DataCollector;
|
||||||
|
|
||||||
|
use Symfony\Component\HttpFoundation\Request;
|
||||||
|
use Symfony\Component\HttpFoundation\Response;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* LateDataCollectorInterface.
|
||||||
|
*
|
||||||
|
* @author Fabien Potencier <fabien@symfony.com>
|
||||||
|
*/
|
||||||
|
interface LateDataCollectorInterface
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Collects data as late as possible.
|
||||||
|
*/
|
||||||
|
public function lateCollect();
|
||||||
|
}
|
@ -32,6 +32,14 @@ class LoggerDataCollector extends DataCollector
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
public function collect(Request $request, Response $response, \Exception $exception = null)
|
||||||
|
{
|
||||||
|
// everything is done as late as possible
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* {@inheritdoc}
|
* {@inheritdoc}
|
||||||
*/
|
*/
|
||||||
|
@ -11,6 +11,7 @@
|
|||||||
|
|
||||||
namespace Symfony\Component\HttpKernel\DataCollector;
|
namespace Symfony\Component\HttpKernel\DataCollector;
|
||||||
|
|
||||||
|
use Symfony\Component\HttpKernel\DataCollector\LateDataCollectorInterface;
|
||||||
use Symfony\Component\HttpFoundation\Request;
|
use Symfony\Component\HttpFoundation\Request;
|
||||||
use Symfony\Component\HttpFoundation\Response;
|
use Symfony\Component\HttpFoundation\Response;
|
||||||
|
|
||||||
@ -19,7 +20,7 @@ use Symfony\Component\HttpFoundation\Response;
|
|||||||
*
|
*
|
||||||
* @author Fabien Potencier <fabien@symfony.com>
|
* @author Fabien Potencier <fabien@symfony.com>
|
||||||
*/
|
*/
|
||||||
class MemoryDataCollector extends DataCollector
|
class MemoryDataCollector extends DataCollector implements LateDataCollectorInterface
|
||||||
{
|
{
|
||||||
public function __construct()
|
public function __construct()
|
||||||
{
|
{
|
||||||
@ -37,6 +38,14 @@ class MemoryDataCollector extends DataCollector
|
|||||||
$this->updateMemoryUsage();
|
$this->updateMemoryUsage();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
public function lateCollect()
|
||||||
|
{
|
||||||
|
$this->updateMemoryUsage();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the memory.
|
* Gets the memory.
|
||||||
*
|
*
|
||||||
@ -65,13 +74,6 @@ class MemoryDataCollector extends DataCollector
|
|||||||
$this->data['memory'] = memory_get_peak_usage(true);
|
$this->data['memory'] = memory_get_peak_usage(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function serialize()
|
|
||||||
{
|
|
||||||
$this->updateMemoryUsage();
|
|
||||||
|
|
||||||
return parent::serialize();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* {@inheritdoc}
|
* {@inheritdoc}
|
||||||
*/
|
*/
|
||||||
|
@ -12,6 +12,7 @@
|
|||||||
namespace Symfony\Component\HttpKernel\DataCollector;
|
namespace Symfony\Component\HttpKernel\DataCollector;
|
||||||
|
|
||||||
use Symfony\Component\HttpKernel\DataCollector\DataCollector;
|
use Symfony\Component\HttpKernel\DataCollector\DataCollector;
|
||||||
|
use Symfony\Component\HttpKernel\DataCollector\LateDataCollectorInterface;
|
||||||
use Symfony\Component\HttpKernel\KernelInterface;
|
use Symfony\Component\HttpKernel\KernelInterface;
|
||||||
use Symfony\Component\HttpFoundation\Request;
|
use Symfony\Component\HttpFoundation\Request;
|
||||||
use Symfony\Component\HttpFoundation\Response;
|
use Symfony\Component\HttpFoundation\Response;
|
||||||
@ -22,7 +23,7 @@ use Symfony\Component\Stopwatch\Stopwatch;
|
|||||||
*
|
*
|
||||||
* @author Fabien Potencier <fabien@symfony.com>
|
* @author Fabien Potencier <fabien@symfony.com>
|
||||||
*/
|
*/
|
||||||
class TimeDataCollector extends DataCollector
|
class TimeDataCollector extends DataCollector implements LateDataCollectorInterface
|
||||||
{
|
{
|
||||||
protected $kernel;
|
protected $kernel;
|
||||||
protected $stopwatch;
|
protected $stopwatch;
|
||||||
@ -51,6 +52,17 @@ class TimeDataCollector extends DataCollector
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
public function lateCollect()
|
||||||
|
{
|
||||||
|
if (null !== $this->stopwatch && isset($this->data['token'])) {
|
||||||
|
$this->setEvents($this->stopwatch->getSectionEvents($this->data['token']));
|
||||||
|
}
|
||||||
|
unset($this->data['token']);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the request events.
|
* Sets the request events.
|
||||||
*
|
*
|
||||||
@ -117,16 +129,6 @@ class TimeDataCollector extends DataCollector
|
|||||||
return $this->data['start_time'];
|
return $this->data['start_time'];
|
||||||
}
|
}
|
||||||
|
|
||||||
public function serialize()
|
|
||||||
{
|
|
||||||
if (null !== $this->stopwatch && isset($this->data['token'])) {
|
|
||||||
$this->setEvents($this->stopwatch->getSectionEvents($this->data['token']));
|
|
||||||
}
|
|
||||||
unset($this->data['token']);
|
|
||||||
|
|
||||||
return parent::serialize();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* {@inheritdoc}
|
* {@inheritdoc}
|
||||||
*/
|
*/
|
||||||
|
@ -15,6 +15,7 @@ use Symfony\Component\HttpFoundation\Request;
|
|||||||
use Symfony\Component\HttpFoundation\Response;
|
use Symfony\Component\HttpFoundation\Response;
|
||||||
use Symfony\Component\HttpKernel\Profiler\ProfilerStorageInterface;
|
use Symfony\Component\HttpKernel\Profiler\ProfilerStorageInterface;
|
||||||
use Symfony\Component\HttpKernel\DataCollector\DataCollectorInterface;
|
use Symfony\Component\HttpKernel\DataCollector\DataCollectorInterface;
|
||||||
|
use Symfony\Component\HttpKernel\DataCollector\LateDataCollectorInterface;
|
||||||
use Psr\Log\LoggerInterface;
|
use Psr\Log\LoggerInterface;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -109,6 +110,13 @@ class Profiler
|
|||||||
*/
|
*/
|
||||||
public function saveProfile(Profile $profile)
|
public function saveProfile(Profile $profile)
|
||||||
{
|
{
|
||||||
|
// late collect
|
||||||
|
foreach ($profile->getCollectors() as $collector) {
|
||||||
|
if ($collector instanceof LateDataCollectorInterface) {
|
||||||
|
$collector->lateCollect();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (!($ret = $this->storage->write($profile)) && null !== $this->logger) {
|
if (!($ret = $this->storage->write($profile)) && null !== $this->logger) {
|
||||||
$this->logger->warning('Unable to store the profiler information.');
|
$this->logger->warning('Unable to store the profiler information.');
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user