summaryrefslogtreecommitdiff
path: root/vendor/open-telemetry/sdk/Trace/TracerProviderFactory.php
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/open-telemetry/sdk/Trace/TracerProviderFactory.php')
-rw-r--r--vendor/open-telemetry/sdk/Trace/TracerProviderFactory.php60
1 files changed, 60 insertions, 0 deletions
diff --git a/vendor/open-telemetry/sdk/Trace/TracerProviderFactory.php b/vendor/open-telemetry/sdk/Trace/TracerProviderFactory.php
new file mode 100644
index 000000000..a545319b6
--- /dev/null
+++ b/vendor/open-telemetry/sdk/Trace/TracerProviderFactory.php
@@ -0,0 +1,60 @@
+<?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,
+ );
+ }
+}