Exceptions
Exception
Symfony\Component\HttpClient\Exception\ ClientException
if (500 <= $code) {
throw new ServerException($this);
}
if (400 <= $code) {
throw new ClientException($this);
}
if (300 <= $code) {
throw new RedirectionException($this);
}
in
vendor/symfony/http-client/Response/TraceableResponse.php
->
checkStatusCode
(line 103)
} finally {
if ($this->event && $this->event->isStarted()) {
$this->event->stop();
}
if ($throw) {
$this->checkStatusCode($this->response->getStatusCode());
}
}
}
public function toArray(bool $throw = true): array
'hapikey' => $this->hubSpotKey,
'after' => $after,
],
]);
$result = json_decode($response->getContent(), true);
} catch (HttpExceptionInterface $e) {
$this->logger->error('Could not load blog posts from HubSpot', ['exception' => $e]);
throw $e;
}
if (!isset($this->authors)) {
$beta = $bustCache ? INF : null;
$this->authors = $this->cache->get('blog_authors', function (ItemInterface $item) {
$item->expiresAfter(86400); // cache for 1 day
return $this->loadBlogAuthors();
}, $beta);
}
return $this->authors;
}
in
vendor/symfony/cache/Adapter/TraceableAdapter.php
->
App\{closure}
(line 51)
$isHit = true;
$callback = function (CacheItem $item, bool &$save) use ($callback, &$isHit) {
$isHit = $item->isHit();
return $callback($item, $save);
};
$event = $this->start(__FUNCTION__);
try {
$value = $this->pool->get($key, $callback, $beta, $metadata);
in
vendor/symfony/cache/LockRegistry.php
->
Symfony\Component\Cache\Adapter\{closure}
(line 108)
if ($locked || !$wouldBlock) {
$logger && $logger->info(sprintf('Lock %s, now computing item "{key}"', $locked ? 'acquired' : 'not supported'), ['key' => $item->getKey()]);
self::$lockedFiles[$key] = true;
$value = $callback($item, $save);
if ($save) {
if ($setMetadata) {
$setMetadata($item);
}
in
vendor/symfony/cache/Traits/ContractsTrait.php
::
compute
(line 100)
}
try {
$value = ($this->callbackWrapper)($callback, $item, $save, $pool, function (CacheItem $item) use ($setMetadata, $startTime, &$metadata) {
$setMetadata($item, $startTime, $metadata);
}, $this->logger ?? null);
$setMetadata($item, $startTime, $metadata);
return $value;
} finally {
unset($this->computing[$key]);
in
vendor/symfony/cache-contracts/CacheTrait.php
->
Symfony\Component\Cache\Traits\{closure}
(line 72)
}
}
if ($recompute) {
$save = true;
$item->set($callback($item, $save));
if ($save) {
$pool->save($item);
}
}
in
vendor/symfony/cache/Traits/ContractsTrait.php
->
contractsGet
(line 107)
return $value;
} finally {
unset($this->computing[$key]);
}
}, $beta, $metadata, $this->logger ?? null);
}
}
in
vendor/symfony/cache-contracts/CacheTrait.php
->
doGet
(line 35)
*
* @return mixed
*/
public function get(string $key, callable $callback, float $beta = null, array &$metadata = null)
{
return $this->doGet($this, $key, $callback, $beta, $metadata);
}
/**
* {@inheritdoc}
*/
in
vendor/symfony/cache/Adapter/TraceableAdapter.php
->
get
(line 56)
return $callback($item, $save);
};
$event = $this->start(__FUNCTION__);
try {
$value = $this->pool->get($key, $callback, $beta, $metadata);
$event->result[$key] = get_debug_type($value);
} finally {
$event->end = microtime(true);
}
if ($isHit) {
public function getAuthors(bool $bustCache = false): array
{
if (!isset($this->authors)) {
$beta = $bustCache ? INF : null;
$this->authors = $this->cache->get('blog_authors', function (ItemInterface $item) {
$item->expiresAfter(86400); // cache for 1 day
return $this->loadBlogAuthors();
}, $beta);
}
* WARNING: This will be slow and should not be called
* unless intentional.
*/
public function bustCache(): void
{
$this->getAuthors(true);
$this->getTags(true);
$this->getAllPosts(true);
}
public function getAuthor(string $slug): ?array
// Update the last refresh time now to minimize cache stampede
$this->cache->get('lastContentRefresh', function () {
return time();
}, INF);
$this->blog->bustCache();
}
public static function getSubscribedEvents(): array
{
return [
$lastRefresh = $this->cache->get('lastContentRefresh', function () {
return 0;
});
if ($lastRefresh < strtotime('-5 minutes')) {
$this->refresh();
}
}
private function refresh(): void
{
in
vendor/symfony/event-dispatcher/EventDispatcher.php
->
onKernelTerminate
(line 270)
$closure = static function (...$args) use (&$listener, &$closure) {
if ($listener[0] instanceof \Closure) {
$listener[0] = $listener[0]();
$listener[1] = $listener[1] ?? '__invoke';
}
($closure = \Closure::fromCallable($listener))(...$args);
};
} else {
$closure = $listener instanceof \Closure || $listener instanceof WrappedListener ? $listener : \Closure::fromCallable($listener);
}
}
in
vendor/symfony/event-dispatcher/EventDispatcher.php
::
Symfony\Component\EventDispatcher\{closure}
(line 230)
foreach ($listeners as $listener) {
if ($stoppable && $event->isPropagationStopped()) {
break;
}
$listener($event, $eventName, $this);
}
}
/**
* Sorts the internal list of listeners for the given event by priority.
in
vendor/symfony/event-dispatcher/EventDispatcher.php
->
callListeners
(line 59)
} else {
$listeners = $this->getListeners($eventName);
}
if ($listeners) {
$this->callListeners($listeners, $eventName, $event);
}
return $event;
}
in
vendor/symfony/http-kernel/HttpKernel.php
->
dispatch
(line 94)
/**
* {@inheritdoc}
*/
public function terminate(Request $request, Response $response)
{
$this->dispatcher->dispatch(new TerminateEvent($this, $request, $response), KernelEvents::TERMINATE);
}
/**
* @internal
*/
in
vendor/symfony/http-kernel/Kernel.php
->
terminate
(line 159)
if (false === $this->booted) {
return;
}
if ($this->getHttpKernel() instanceof TerminableInterface) {
$this->getHttpKernel()->terminate($request, $response);
}
}
/**
* {@inheritdoc}
$kernel = new Kernel($_SERVER['APP_ENV'], (bool) $_SERVER['APP_DEBUG']);
$request = Request::createFromGlobals();
$response = $kernel->handle($request);
$response->send();
$kernel->terminate($request, $response);
Logs
Level | Channel | Message |
---|---|---|
INFO 05:38:52 | php |
User Deprecated: Since symfony/framework-bundle 5.3: The "session.storage.native" service is deprecated, use "session.storage.factory.native" instead. { "exception": {} } |
INFO 05:38:52 | php |
User Deprecated: Since symfony/framework-bundle 5.3: The "session.storage.metadata_bag" service is deprecated, create your own "session.storage.factory" instead. { "exception": {} } |
INFO 05:38:52 | request |
Matched route "_profiler". { "route": "_profiler", "route_parameters": { "_route": "_profiler", "_controller": "web_profiler.controller.profiler::panelAction", "token": "latest" }, "request_uri": "http://invoiced.project-release.info/_profiler/latest?ip=146.70.188.224", "method": "GET" } |
INFO 05:38:52 | php |
User Deprecated: Since symfony/framework-bundle 5.3: The "session.storage.factory.service" service is deprecated, use "session.storage.factory.native", "session.storage.factory.php_bridge" or "session.storage.factory.mock_file" instead. { "exception": {} } |
Stack Trace
ClientException
|
---|
Symfony\Component\HttpClient\Exception\ClientException: HTTP/2 401 returned for "https://api.hubapi.com/cms/v3/blogs/authors?hapikey=41d1972b-a2ce-454d-9e57-cd6355e00240". at vendor/symfony/http-client/Response/TraceableResponse.php:212 at Symfony\Component\HttpClient\Response\TraceableResponse->checkStatusCode(401) (vendor/symfony/http-client/Response/TraceableResponse.php:103) at Symfony\Component\HttpClient\Response\TraceableResponse->getContent() (src/Blog.php:181) at App\Blog->loadBlogAuthors() (src/Blog.php:152) at App\Blog->App\{closure}(object(CacheItem), true) (vendor/symfony/cache/Adapter/TraceableAdapter.php:51) at Symfony\Component\Cache\Adapter\TraceableAdapter->Symfony\Component\Cache\Adapter\{closure}(object(CacheItem), true) (vendor/symfony/cache/LockRegistry.php:108) at Symfony\Component\Cache\LockRegistry::compute(object(Closure), object(CacheItem), true, object(FilesystemAdapter), object(Closure), object(Logger)) (vendor/symfony/cache/Traits/ContractsTrait.php:100) at Symfony\Component\Cache\Adapter\AbstractAdapter->Symfony\Component\Cache\Traits\{closure}(object(CacheItem), true) (vendor/symfony/cache-contracts/CacheTrait.php:72) at Symfony\Component\Cache\Adapter\AbstractAdapter->contractsGet(object(FilesystemAdapter), 'blog_authors', object(Closure), INF, array(), object(Logger)) (vendor/symfony/cache/Traits/ContractsTrait.php:107) at Symfony\Component\Cache\Adapter\AbstractAdapter->doGet(object(FilesystemAdapter), 'blog_authors', object(Closure), INF, array()) (vendor/symfony/cache-contracts/CacheTrait.php:35) at Symfony\Component\Cache\Adapter\AbstractAdapter->get('blog_authors', object(Closure), INF, array()) (vendor/symfony/cache/Adapter/TraceableAdapter.php:56) at Symfony\Component\Cache\Adapter\TraceableAdapter->get('blog_authors', object(Closure), INF) (src/Blog.php:149) at App\Blog->getAuthors(true) (src/Blog.php:37) at App\Blog->bustCache() (src/EventSubscriber/ContentRefreshSubscriber.php:45) at App\EventSubscriber\ContentRefreshSubscriber->refresh() (src/EventSubscriber/ContentRefreshSubscriber.php:34) at App\EventSubscriber\ContentRefreshSubscriber->onKernelTerminate(object(TerminateEvent), 'kernel.terminate', object(EventDispatcher)) (vendor/symfony/event-dispatcher/EventDispatcher.php:270) at Symfony\Component\EventDispatcher\EventDispatcher::Symfony\Component\EventDispatcher\{closure}(object(TerminateEvent), 'kernel.terminate', object(EventDispatcher)) (vendor/symfony/event-dispatcher/EventDispatcher.php:230) at Symfony\Component\EventDispatcher\EventDispatcher->callListeners(array(object(Closure), object(Closure)), 'kernel.terminate', object(TerminateEvent)) (vendor/symfony/event-dispatcher/EventDispatcher.php:59) at Symfony\Component\EventDispatcher\EventDispatcher->dispatch(object(TerminateEvent), 'kernel.terminate') (vendor/symfony/http-kernel/HttpKernel.php:94) at Symfony\Component\HttpKernel\HttpKernel->terminate(object(Request), object(Response)) (vendor/symfony/http-kernel/Kernel.php:159) at Symfony\Component\HttpKernel\Kernel->terminate(object(Request), object(Response)) (public/index.php:36) |