-
Notifications
You must be signed in to change notification settings - Fork 223
Expand file tree
/
Copy pathConfiguration.php
More file actions
74 lines (63 loc) · 2.19 KB
/
Configuration.php
File metadata and controls
74 lines (63 loc) · 2.19 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
<?php
declare(strict_types=1);
namespace OpenTelemetry\Config\SDK;
use Nevay\SPI\ServiceLoader;
use OpenTelemetry\API\Configuration\Config\ComponentPlugin;
use OpenTelemetry\API\Configuration\Config\ComponentProvider;
use OpenTelemetry\API\Configuration\Context;
use OpenTelemetry\Config\SDK\ComponentProvider\OpenTelemetrySdk;
use OpenTelemetry\Config\SDK\Configuration\ConfigurationFactory;
use OpenTelemetry\Config\SDK\Configuration\Environment\EnvReader;
use OpenTelemetry\Config\SDK\Configuration\Environment\EnvSourceReader;
use OpenTelemetry\Config\SDK\Configuration\Environment\PhpIniEnvSource;
use OpenTelemetry\Config\SDK\Configuration\Environment\ServerEnvSource;
use OpenTelemetry\SDK\SdkBuilder;
use WeakMap;
final readonly class Configuration
{
/**
* @param ComponentPlugin<SdkBuilder> $sdkPlugin
*/
private function __construct(
private ComponentPlugin $sdkPlugin,
) {
}
public function create(Context $context = new Context()): SdkBuilder
{
return $this->sdkPlugin->create($context);
}
/**
* @param string|list<string> $file
*/
public static function parseFile(
string|array $file,
?string $cacheFile = null,
bool $debug = true,
?EnvReader $envReader = null,
): Configuration {
return new self(self::factory($envReader)->parseFile($file, $cacheFile, $debug));
}
/**
* @return ConfigurationFactory<SdkBuilder>
*/
private static function factory(?EnvReader $envReader): ConfigurationFactory
{
static $defaultEnvReader;
static $factories = new WeakMap();
$envReader ??= $defaultEnvReader ??= new EnvSourceReader([
new ServerEnvSource(),
new PhpIniEnvSource(),
]);
return $factories[$envReader] ??= new ConfigurationFactory(
self::loadComponentProviders(),
new OpenTelemetrySdk(),
$envReader,
);
}
private static function loadComponentProviders(): iterable
{
yield from ServiceLoader::load(ComponentProvider::class);
/** @phpstan-ignore-next-line */
yield from ServiceLoader::load(Configuration\ComponentProvider::class);
}
}