ttrss/vendor/open-telemetry/sdk/Trace/TracerProviderFactory.php

61 lines
1.7 KiB
PHP
Raw Normal View History

2023-10-20 14:12:29 +00:00
<?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,
);
}
}