Skip to content

Commit

Permalink
[EasyBugsnag] Count Symfony Messenger messages as sessions (#648)
Browse files Browse the repository at this point in the history
  • Loading branch information
natepage committed Jul 8, 2021
1 parent 1f7d3b9 commit e76a850
Show file tree
Hide file tree
Showing 4 changed files with 70 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,10 @@ public function getConfigTreeBuilder(): TreeBuilder
->defaultValue('#')
->info('Delimiter used in Regex to resolve excluded URLs')
->end()
->booleanNode('messenger_message_count_for_sessions')
->defaultFalse()
->info('Enable/Disable session tracking for messenger messages')
->end()
->end()
->end()
// Worker Info
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,10 @@ public function load(array $configs, ContainerBuilder $container): void
}

$loader->load('sessions.php');

if ($config['session_tracking']['messenger_message_count_for_sessions'] ?? false) {
$loader->load('sessions_messenger.php');
}
}

if ($config['worker_info']['enabled'] ?? false) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<?php

declare(strict_types=1);

use EonX\EasyBugsnag\Bridge\Symfony\Session\SessionTrackingMessengerSubscriber;
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;

return static function (ContainerConfigurator $container): void {
$services = $container->services();
$services->defaults()
->autoconfigure()
->autowire();

$services->set(SessionTrackingMessengerSubscriber::class);
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
<?php

declare(strict_types=1);

namespace EonX\EasyBugsnag\Bridge\Symfony\Session;

use Bugsnag\Client;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\Messenger\Event\WorkerMessageReceivedEvent;
use Symfony\Component\Messenger\Event\WorkerStartedEvent;

final class SessionTrackingMessengerSubscriber implements EventSubscriberInterface
{
/**
* @var \Bugsnag\Client
*/
private $client;

public function __construct(Client $client)
{
$this->client = $client;
}

/**
* @return string[]
*/
public static function getSubscribedEvents(): array
{
return [
WorkerMessageReceivedEvent::class => 'onMessageReceived',
WorkerStartedEvent::class => 'onWorkerStarted',
];
}

public function onMessageReceived(WorkerMessageReceivedEvent $event): void
{
$this->client->getSessionTracker()->startSession();
}

public function onWorkerStarted(WorkerStartedEvent $event): void
{
// Make sure sessions are sent when worker stops
\register_shutdown_function(function (): void {
$this->client->getSessionTracker()->sendSessions();
});
}
}

0 comments on commit e76a850

Please sign in to comment.