1111use OpenTelemetry \API \Instrumentation \AutoInstrumentation \ConfigurationRegistry ;
1212use OpenTelemetry \Config \SDK \ComponentProvider \InstrumentationConfigurationRegistry ;
1313use OpenTelemetry \Config \SDK \Configuration \ConfigurationFactory ;
14+ use OpenTelemetry \Config \SDK \Configuration \Environment \EnvReader ;
1415use OpenTelemetry \Config \SDK \Configuration \Environment \EnvSourceReader ;
1516use OpenTelemetry \Config \SDK \Configuration \Environment \PhpIniEnvSource ;
1617use OpenTelemetry \Config \SDK \Configuration \Environment \ServerEnvSource ;
18+ use WeakMap ;
1719
1820final class Instrumentation
1921{
@@ -39,24 +41,28 @@ public static function parseFile(
3941 string |array $ file ,
4042 ?string $ cacheFile = null ,
4143 bool $ debug = true ,
44+ ?EnvReader $ envReader = null ,
4245 ): Instrumentation {
43- return new self (self ::factory ()->parseFile ($ file , $ cacheFile , $ debug ));
46+ return new self (self ::factory ($ envReader )->parseFile ($ file , $ cacheFile , $ debug ));
4447 }
4548
4649 /**
4750 * @return ConfigurationFactory<ConfigurationRegistry>
4851 */
49- private static function factory (): ConfigurationFactory
52+ private static function factory (? EnvReader $ envReader ): ConfigurationFactory
5053 {
51- static $ factory ;
54+ static $ defaultEnvReader ;
55+ static $ factories = new WeakMap ();
5256
53- return $ factory ??= new ConfigurationFactory (
57+ $ envReader ??= $ defaultEnvReader ??= new EnvSourceReader ([
58+ new ServerEnvSource (),
59+ new PhpIniEnvSource (),
60+ ]);
61+
62+ return $ factories [$ envReader ] ??= new ConfigurationFactory (
5463 self ::loadComponentProviders (),
5564 new InstrumentationConfigurationRegistry (),
56- new EnvSourceReader ([
57- new ServerEnvSource (),
58- new PhpIniEnvSource (),
59- ]),
65+ $ envReader ,
6066 );
6167 }
6268
0 commit comments