Skip to content

Commit

Permalink
Merge pull request #5 from micheh/sentry-3
Browse files Browse the repository at this point in the history
Add support for Sentry 3.x
  • Loading branch information
fmasa committed Oct 16, 2020
2 parents edccb5b + ac1b660 commit 557f8fb
Show file tree
Hide file tree
Showing 3 changed files with 55 additions and 13 deletions.
2 changes: 1 addition & 1 deletion composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
},
"require": {
"php": ">=7.1",
"sentry/sentry": "^2.1",
"sentry/sentry": "^2.1|^3.0",
"monolog/monolog": "^1.2|^2.0"
},
"require-dev": {
Expand Down
15 changes: 10 additions & 5 deletions src/SentryBreadcrumbsMonologHandler/BreadcrumbsHandler.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,18 +9,18 @@
use Sentry\Breadcrumb;
use Sentry\State\HubInterface;
use Sentry\State\Scope;
use function defined;

final class BreadcrumbsHandler extends AbstractProcessingHandler
{
private const LEVELS = [
/** @var array<string, string> */
private static $levels = [
Logger::DEBUG => Breadcrumb::LEVEL_DEBUG,
Logger::INFO => Breadcrumb::LEVEL_INFO,
Logger::NOTICE => Breadcrumb::LEVEL_INFO,
Logger::WARNING => Breadcrumb::LEVEL_WARNING,
Logger::ERROR => Breadcrumb::LEVEL_ERROR,
Logger::CRITICAL => Breadcrumb::LEVEL_CRITICAL,
Logger::ALERT => Breadcrumb::LEVEL_CRITICAL,
Logger::EMERGENCY => Breadcrumb::LEVEL_CRITICAL,
// Logger::CRITICAL, Logger::ALERT and Logger::EMERGENCY are set in the constructor
];

/** @var HubInterface */
Expand All @@ -30,6 +30,11 @@ public function __construct(HubInterface $hub)
{
parent::__construct();
$this->hub = $hub;

$criticalLevel = defined(Breadcrumb::class . '::LEVEL_FATAL') ? Breadcrumb::LEVEL_FATAL : Breadcrumb::LEVEL_CRITICAL;
self::$levels[Logger::CRITICAL] = $criticalLevel;
self::$levels[Logger::ALERT] = $criticalLevel;
self::$levels[Logger::EMERGENCY] = $criticalLevel;
}

/**
Expand Down Expand Up @@ -57,6 +62,6 @@ protected function write(array $record) : void
*/
private function convertMonologLevelToSentryLevel(int $level) : string
{
return self::LEVELS[$level] ?? Breadcrumb::LEVEL_INFO;
return self::$levels[$level] ?? Breadcrumb::LEVEL_INFO;
}
}
51 changes: 44 additions & 7 deletions tests/BreadcrumbsHandlerTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,12 @@
use Mockery;
use Monolog\Logger;
use PHPUnit\Framework\TestCase;
use Sentry\Breadcrumb;
use Sentry\Event;
use Sentry\State\HubInterface;
use Sentry\State\Scope;
use function defined;
use function method_exists;

final class BreadcrumbsHandlerTest extends TestCase
{
Expand Down Expand Up @@ -43,13 +46,7 @@ public function testWriteRecord() : void
'extra' => [],
];

$this->handler->handle($record);

$event = new Event();

$this->scope->applyToEvent($event, []);

$breadcrumbs = $event->getBreadcrumbs();
$breadcrumbs = $this->handleRecord($record);

$this->assertCount(1, $breadcrumbs);
$this->assertSame($record['message'], $breadcrumbs[0]->getMessage());
Expand All @@ -58,6 +55,46 @@ public function testWriteRecord() : void
$this->assertSame('app', $breadcrumbs[0]->getCategory());
}

public function testWriteRecordSetsCorrectLevel() : void
{
$record = [
'message' => 'Test message',
'channel' => 'app',
'level' => Logger::ALERT,
'context' => [],
'extra' => [],
];

$expectedLevel = defined(Breadcrumb::class . '::LEVEL_FATAL') ? 'fatal' : 'critical';

$breadcrumbs = $this->handleRecord($record);

$this->assertCount(1, $breadcrumbs);
$this->assertSame($expectedLevel, $breadcrumbs[0]->getLevel());
}

/**
* @param array<string, mixed> $record
*
* @return Breadcrumb[]
*/
private function handleRecord(array $record) : array
{
$this->handler->handle($record);

if (method_exists(Event::class, 'createEvent')) {
// Sentry 3
$event = Event::createEvent();
$this->scope->applyToEvent($event);
} else {
// Sentry 2
$event = new Event();
$this->scope->applyToEvent($event, []);
}

return $event->getBreadcrumbs();
}

protected function tearDown() : void
{
Mockery::close();
Expand Down

0 comments on commit 557f8fb

Please sign in to comment.