From e76a8504b1e800aa2d13fbdd2c925f5e61004bb7 Mon Sep 17 00:00:00 2001 From: Nathan Page Date: Fri, 9 Jul 2021 08:46:29 +1000 Subject: [PATCH] [EasyBugsnag] Count Symfony Messenger messages as sessions (#648) --- .../DependencyInjection/Configuration.php | 4 ++ .../EasyBugsnagExtension.php | 4 ++ .../Resources/config/sessions_messenger.php | 15 ++++++ .../SessionTrackingMessengerSubscriber.php | 47 +++++++++++++++++++ 4 files changed, 70 insertions(+) create mode 100644 packages/EasyBugsnag/src/Bridge/Symfony/Resources/config/sessions_messenger.php create mode 100644 packages/EasyBugsnag/src/Bridge/Symfony/Session/SessionTrackingMessengerSubscriber.php diff --git a/packages/EasyBugsnag/src/Bridge/Symfony/DependencyInjection/Configuration.php b/packages/EasyBugsnag/src/Bridge/Symfony/DependencyInjection/Configuration.php index 95b6b62c1..f82c6f485 100644 --- a/packages/EasyBugsnag/src/Bridge/Symfony/DependencyInjection/Configuration.php +++ b/packages/EasyBugsnag/src/Bridge/Symfony/DependencyInjection/Configuration.php @@ -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 diff --git a/packages/EasyBugsnag/src/Bridge/Symfony/DependencyInjection/EasyBugsnagExtension.php b/packages/EasyBugsnag/src/Bridge/Symfony/DependencyInjection/EasyBugsnagExtension.php index 2526c6588..8e0dcdb83 100644 --- a/packages/EasyBugsnag/src/Bridge/Symfony/DependencyInjection/EasyBugsnagExtension.php +++ b/packages/EasyBugsnag/src/Bridge/Symfony/DependencyInjection/EasyBugsnagExtension.php @@ -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) { diff --git a/packages/EasyBugsnag/src/Bridge/Symfony/Resources/config/sessions_messenger.php b/packages/EasyBugsnag/src/Bridge/Symfony/Resources/config/sessions_messenger.php new file mode 100644 index 000000000..745ea75c0 --- /dev/null +++ b/packages/EasyBugsnag/src/Bridge/Symfony/Resources/config/sessions_messenger.php @@ -0,0 +1,15 @@ +services(); + $services->defaults() + ->autoconfigure() + ->autowire(); + + $services->set(SessionTrackingMessengerSubscriber::class); +}; diff --git a/packages/EasyBugsnag/src/Bridge/Symfony/Session/SessionTrackingMessengerSubscriber.php b/packages/EasyBugsnag/src/Bridge/Symfony/Session/SessionTrackingMessengerSubscriber.php new file mode 100644 index 000000000..308be0cb3 --- /dev/null +++ b/packages/EasyBugsnag/src/Bridge/Symfony/Session/SessionTrackingMessengerSubscriber.php @@ -0,0 +1,47 @@ +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(); + }); + } +}