File: //proc/self/cwd/nueva/vendor/csa/guzzle-bundle/src/DataCollector/GuzzleCollector.php
<?php
/*
* This file is part of the CsaGuzzleBundle package
*
* (c) Charles Sarrazin <charles@sarraz.in>
* (c) PrestaShop and Contributors
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code
*/
namespace Csa\Bundle\GuzzleBundle\DataCollector;
use Csa\Bundle\GuzzleBundle\GuzzleHttp\Subscriber\DebugSubscriber;
use GuzzleHttp\Stream\StreamInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\DataCollector\DataCollector;
/**
* Csa Guzzle Collector.
*
* @author Charles Sarrazin <charles@sarraz.in>
*/
class GuzzleCollector extends DataCollector
{
const MAX_BODY_SIZE = 0x10000;
private $history;
private $maxBodySize;
/**
* Constructor.
*
* @param DebugSubscriber $history the request history subscriber
*/
public function __construct(DebugSubscriber $history, $maxBodySize = self::MAX_BODY_SIZE)
{
$this->history = $history;
$this->maxBodySize = $maxBodySize;
$this->data = [];
}
/**
* {@inheritdoc}
*/
public function collect(Request $request, Response $response, \Exception $exception = null)
{
$data = [];
foreach ($this->history as $transaction) {
$request = $transaction['request'];
$response = $transaction['response'];
$error = $transaction['exception'];
$info = $transaction['info'];
$req = [
'request' => [
'method' => $request->getMethod(),
'version' => $request->getProtocolVersion(),
'headers' => $request->getHeaders(),
'body' => $this->cropContent($request->getBody()),
],
'info' => $info,
'uri' => $request->getUrl(),
];
if ($response) {
$req['response'] = [
'reasonPhrase' => $response->getReasonPhrase(),
'headers' => $response->getHeaders(),
'body' => $this->cropContent($response->getBody()),
];
}
$req['httpCode'] = $response ? $response->getStatusCode() : 0;
if ($error) {
$req['error'] = [
'message' => $error->getMessage(),
'line' => $error->getLine(),
'file' => $error->getFile(),
'code' => $error->getCode(),
'trace' => $error->getTraceAsString(),
];
}
if ($cache = $request->getConfig()->get('cache_lookup')) {
$req['cache'] = $cache;
}
$data[] = $req;
}
$this->data = $data;
}
private function cropContent(StreamInterface $stream = null)
{
if (null === $stream) {
return '';
}
if ($stream->getSize() <= $this->maxBodySize) {
return (string) $stream;
}
$stream->seek(0);
return '(partial content)'.$stream->read($this->maxBodySize).'(...)';
}
public function getErrors()
{
return array_filter($this->data, function ($call) {
return isset($call['httpCode']) && $call['httpCode'] >= 400;
});
}
public function getCalls()
{
return $this->data;
}
/**
* {@inheritdoc}
*/
public function getName()
{
return 'guzzle';
}
}