61 lines
1.7 KiB
PHP
61 lines
1.7 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace OpenTelemetry\SDK\Trace;
|
|
|
|
use OpenTelemetry\API\Behavior\LogsMessagesTrait;
|
|
use OpenTelemetry\SDK\Sdk;
|
|
|
|
final class TracerProviderFactory
|
|
{
|
|
use LogsMessagesTrait;
|
|
|
|
private ExporterFactory $exporterFactory;
|
|
private SamplerFactory $samplerFactory;
|
|
private SpanProcessorFactory $spanProcessorFactory;
|
|
|
|
public function __construct(
|
|
?ExporterFactory $exporterFactory = null,
|
|
?SamplerFactory $samplerFactory = null,
|
|
?SpanProcessorFactory $spanProcessorFactory = null
|
|
) {
|
|
$this->exporterFactory = $exporterFactory ?: new ExporterFactory();
|
|
$this->samplerFactory = $samplerFactory ?: new SamplerFactory();
|
|
$this->spanProcessorFactory = $spanProcessorFactory ?: new SpanProcessorFactory();
|
|
}
|
|
|
|
public function create(): TracerProviderInterface
|
|
{
|
|
if (Sdk::isDisabled()) {
|
|
return new NoopTracerProvider();
|
|
}
|
|
|
|
try {
|
|
$exporter = $this->exporterFactory->create();
|
|
} catch (\Throwable $t) {
|
|
self::logWarning('Unable to create exporter', ['exception' => $t]);
|
|
$exporter = null;
|
|
}
|
|
|
|
try {
|
|
$sampler = $this->samplerFactory->create();
|
|
} catch (\Throwable $t) {
|
|
self::logWarning('Unable to create sampler', ['exception' => $t]);
|
|
$sampler = null;
|
|
}
|
|
|
|
try {
|
|
$spanProcessor = $this->spanProcessorFactory->create($exporter);
|
|
} catch (\Throwable $t) {
|
|
self::logWarning('Unable to create span processor', ['exception' => $t]);
|
|
$spanProcessor = null;
|
|
}
|
|
|
|
return new TracerProvider(
|
|
$spanProcessor,
|
|
$sampler,
|
|
);
|
|
}
|
|
}
|