Skip to content

Commit 38cecd1

Browse files
committed
fix(SentryTrap): enhance error logging during envelope parsing and improve JSON header parsing
1 parent 6c4c9f5 commit 38cecd1

File tree

3 files changed

+18
-4
lines changed

3 files changed

+18
-4
lines changed

src/Handler/Http/Middleware/SentryTrap.php

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
use Buggregator\Trap\Handler\Http\Middleware;
88
use Buggregator\Trap\Handler\Http\Middleware\SentryTrap\EnvelopeParser;
9+
use Buggregator\Trap\Logger;
910
use Buggregator\Trap\Proto\Frame;
1011
use Nyholm\Psr7\Response;
1112
use Psr\Http\Message\ResponseInterface;
@@ -21,6 +22,10 @@ final class SentryTrap implements Middleware
2122
{
2223
private const MAX_BODY_SIZE = 2 * 1024 * 1024;
2324

25+
public function __construct(
26+
private readonly ?Logger $logger = null,
27+
) {}
28+
2429
public function handle(ServerRequestInterface $request, callable $next): ResponseInterface
2530
{
2631
try {
@@ -69,8 +74,12 @@ private function processEnvelope(ServerRequestInterface $request): ResponseInter
6974
$time = $request->getAttribute('begin_at');
7075
$time = $time instanceof \DateTimeImmutable ? $time : new \DateTimeImmutable();
7176

72-
$frame = EnvelopeParser::parse($request->getBody(), $time);
73-
\Fiber::suspend($frame);
77+
try {
78+
$frame = EnvelopeParser::parse($request->getBody(), $time);
79+
\Fiber::suspend($frame);
80+
} catch (\Throwable $e) {
81+
$this->logger?->info('Sentry envelope parsing failed: %s', $e->getMessage());
82+
}
7483

7584
return new Response(200);
7685
}

src/Handler/Http/Middleware/SentryTrap/EnvelopeParser.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ public static function parse(
2323
\DateTimeImmutable $time = new \DateTimeImmutable(),
2424
): SentryEnvelope {
2525
// Parse headers
26-
$headers = \json_decode(self::readLine($stream), true, 4, JSON_THROW_ON_ERROR);
26+
$headers = \json_decode(self::readLine($stream), true, 32, JSON_THROW_ON_ERROR);
2727

2828
// Parse items
2929
$items = [];

src/Sender/Console/Renderer/Sentry/Header.php

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
namespace Buggregator\Trap\Sender\Console\Renderer\Sentry;
66

77
use Buggregator\Trap\Sender\Console\Support\Common;
8+
use Buggregator\Trap\Support\Json;
89
use Symfony\Component\Console\Output\OutputInterface;
910

1011
/**
@@ -34,7 +35,11 @@ public static function renderMessageHeader(OutputInterface $output, array $messa
3435
isset($context['runtime']) and $meta['Runtime'] = \implode(' ', (array) $context['runtime']);
3536
isset($context['os']) and $meta['OS'] = \implode(' ', (array) $context['os']);
3637
}
37-
isset($message['sdk']) and $meta['SDK'] = \implode(' ', (array) $message['sdk']);
38+
$headersList = \array_map(
39+
fn(mixed $value): string => \is_scalar($value) ? (string) $value : Json::encode($value),
40+
(array) $message['sdk'],
41+
);
42+
isset($message['sdk']) and $meta['SDK'] = \implode(' ', $headersList);
3843

3944
Common::renderMetadata($output, $meta);
4045

0 commit comments

Comments
 (0)