1313
1414namespace Symfony \Bundle \MercureBundle \DependencyInjection ;
1515
16+ use Symfony \Bundle \MercureBundle \DataCollector \MercureDataCollector ;
1617use Symfony \Component \Config \Definition \ConfigurationInterface ;
18+ use Symfony \Component \DependencyInjection \Argument \IteratorArgument ;
1719use Symfony \Component \DependencyInjection \ContainerBuilder ;
1820use Symfony \Component \DependencyInjection \ContainerInterface ;
1921use Symfony \Component \DependencyInjection \Reference ;
2022use Symfony \Component \HttpKernel \DependencyInjection \Extension ;
23+ use Symfony \Component \Mercure \Debug \TraceablePublisher ;
2124use Symfony \Component \Mercure \Jwt \StaticJwtProvider ;
2225use Symfony \Component \Mercure \Publisher ;
26+ use Symfony \Component \Mercure \PublisherInterface ;
27+ use Symfony \Component \Stopwatch \Stopwatch ;
2328
2429/**
2530 * @author Kévin Dunglas <dunglas@gmail.com>
@@ -43,7 +48,9 @@ public function load(array $configs, ContainerBuilder $container)
4348
4449 $ defaultHub = $ config ['default_hub ' ] ?? null ;
4550 $ hubUrls = [];
51+ $ publishers = [];
4652 $ defaultHubUrl = null ;
53+ $ enableProfiler = $ config ['enable_profiler ' ] && class_exists (Stopwatch::class);
4754 foreach ($ config ['hubs ' ] as $ name => $ hub ) {
4855 if (isset ($ hub ['jwt ' ])) {
4956 $ jwtProvider = sprintf ('mercure.hub.%s.jwt_provider ' , $ name );
@@ -67,9 +74,32 @@ public function load(array $configs, ContainerBuilder $container)
6774 $ bus = $ hub ['bus ' ] ?? null ;
6875 $ attributes = null === $ bus ? [] : ['bus ' => $ hub ['bus ' ]];
6976 $ publisherDefinition ->addTag ('messenger.message_handler ' , $ attributes );
77+
78+ if ($ enableProfiler ) {
79+ $ container ->register ("$ hubId.traceable " , TraceablePublisher::class)
80+ ->setDecoratedService ($ hubId )
81+ ->addArgument (new Reference ("$ hubId.traceable.inner " ))
82+ ->addArgument (new Reference ('debug.stopwatch ' ));
83+
84+ $ publishers [$ name ] = new Reference ("$ hubId.traceable " );
85+ }
86+ }
87+
88+ if ($ enableProfiler ) {
89+ $ container ->register ('data_collector.mercure ' , MercureDataCollector::class)
90+ ->addArgument (new IteratorArgument ($ publishers ))
91+ ->addTag ('data_collector ' , [
92+ 'template ' => '@Mercure/Collector/mercure.html.twig ' ,
93+ 'id ' => 'mercure ' ,
94+ ]);
95+ }
96+
97+ $ alias = $ container ->setAlias (Publisher::class, $ defaultHub );
98+ if (method_exists ($ alias , 'setDeprecated ' )) {
99+ $ alias ->setDeprecated (true , 'The "%alias_id%" service alias is deprecated. Use " ' .PublisherInterface::class.'" instead. ' );
70100 }
71101
72- $ container ->setAlias (Publisher ::class, $ defaultHub );
102+ $ container ->setAlias (PublisherInterface ::class, $ defaultHub );
73103 $ container ->setParameter ('mercure.hubs ' , $ hubUrls );
74104 $ container ->setParameter ('mercure.default_hub ' , $ defaultHubUrl );
75105 }
0 commit comments