adding batch span processor builder (#1046)

This commit is contained in:
Brett McBride 2023-06-23 10:22:49 +10:00 committed by GitHub
parent 1caf77b436
commit 8fe898bdb4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 47 additions and 3 deletions

View File

@ -18,7 +18,7 @@ use OpenTelemetry\SDK\Sdk;
use OpenTelemetry\SDK\Trace\Sampler\AlwaysOnSampler; use OpenTelemetry\SDK\Trace\Sampler\AlwaysOnSampler;
use OpenTelemetry\SDK\Trace\Sampler\ParentBased; use OpenTelemetry\SDK\Trace\Sampler\ParentBased;
use OpenTelemetry\SDK\Trace\SpanExporter\InMemoryExporter; use OpenTelemetry\SDK\Trace\SpanExporter\InMemoryExporter;
use OpenTelemetry\SDK\Trace\SpanProcessor\BatchSpanProcessorBuilder; use OpenTelemetry\SDK\Trace\SpanProcessor\BatchSpanProcessor;
use OpenTelemetry\SDK\Trace\TracerProvider; use OpenTelemetry\SDK\Trace\TracerProvider;
require __DIR__ . '/../vendor/autoload.php'; require __DIR__ . '/../vendor/autoload.php';
@ -50,7 +50,7 @@ $loggerProvider = LoggerProvider::builder()
$tracerProvider = TracerProvider::builder() $tracerProvider = TracerProvider::builder()
->addSpanProcessor( ->addSpanProcessor(
(new BatchSpanProcessorBuilder($spanExporter)) BatchSpanProcessor::builder($spanExporter)
->setMeterProvider($meterProvider) ->setMeterProvider($meterProvider)
->build() ->build()
) )

View File

@ -18,7 +18,6 @@ class ExporterFactory
public function create(): ?SpanExporterInterface public function create(): ?SpanExporterInterface
{ {
$exporters = Configuration::getList(Variables::OTEL_TRACES_EXPORTER); $exporters = Configuration::getList(Variables::OTEL_TRACES_EXPORTER);
//TODO "The SDK MAY accept a comma-separated list to enable setting multiple exporters"
if (1 !== count($exporters)) { if (1 !== count($exporters)) {
throw new InvalidArgumentException(sprintf('Configuration %s requires exactly 1 exporter', Variables::OTEL_TRACES_EXPORTER)); throw new InvalidArgumentException(sprintf('Configuration %s requires exactly 1 exporter', Variables::OTEL_TRACES_EXPORTER));
} }

View File

@ -198,6 +198,11 @@ class BatchSpanProcessor implements SpanProcessorInterface
return $this->flush(__FUNCTION__, $cancellation); return $this->flush(__FUNCTION__, $cancellation);
} }
public static function builder(SpanExporterInterface $exporter): BatchSpanProcessorBuilder
{
return new BatchSpanProcessorBuilder($exporter);
}
private function flush(?string $flushMethod = null, ?CancellationInterface $cancellation = null): bool private function flush(?string $flushMethod = null, ?CancellationInterface $cancellation = null): bool
{ {
if ($flushMethod !== null) { if ($flushMethod !== null) {

View File

@ -0,0 +1,33 @@
<?php
declare(strict_types=1);
namespace OpenTelemetry\Tests\Unit\SDK\Trace\SpanProcessor;
use OpenTelemetry\API\Metrics\MeterInterface;
use OpenTelemetry\SDK\Metrics\MeterProviderInterface;
use OpenTelemetry\SDK\Trace\SpanExporterInterface;
use OpenTelemetry\SDK\Trace\SpanProcessor\BatchSpanProcessor;
use PHPUnit\Framework\TestCase;
/**
* @covers \OpenTelemetry\SDK\Trace\SpanProcessor\BatchSpanProcessorBuilder
*/
class BatchSpanProcessorBuilderTest extends TestCase
{
public function test_build(): void
{
$exporter = $this->createMock(SpanExporterInterface::class);
$meterProvider = $this->createMock(MeterProviderInterface::class);
$meter = $this->createMock(MeterInterface::class);
$meterProvider->expects($this->once())->method('getMeter')->willReturn($meter);
$processor = BatchSpanProcessor::builder($exporter)
->setMeterProvider($meterProvider)
->build();
$reflection = new \ReflectionClass($processor);
$property = $reflection->getProperty('exporter');
$property->setAccessible(true);
$this->assertSame($exporter, $property->getValue($processor));
}
}

View File

@ -27,6 +27,7 @@ use OpenTelemetry\SDK\Trace\ReadWriteSpanInterface;
use OpenTelemetry\SDK\Trace\SpanDataInterface; use OpenTelemetry\SDK\Trace\SpanDataInterface;
use OpenTelemetry\SDK\Trace\SpanExporterInterface; use OpenTelemetry\SDK\Trace\SpanExporterInterface;
use OpenTelemetry\SDK\Trace\SpanProcessor\BatchSpanProcessor; use OpenTelemetry\SDK\Trace\SpanProcessor\BatchSpanProcessor;
use OpenTelemetry\SDK\Trace\SpanProcessor\BatchSpanProcessorBuilder;
use OpenTelemetry\SDK\Trace\SpanProcessorInterface; use OpenTelemetry\SDK\Trace\SpanProcessorInterface;
use OpenTelemetry\Tests\Unit\SDK\Util\TestClock; use OpenTelemetry\Tests\Unit\SDK\Util\TestClock;
use Psr\Log\LoggerInterface; use Psr\Log\LoggerInterface;
@ -542,6 +543,12 @@ class BatchSpanProcessorTest extends MockeryTestCase
new BatchSpanProcessor($exporter, $this->testClock, 2, 5000, 30000, 3); new BatchSpanProcessor($exporter, $this->testClock, 2, 5000, 30000, 3);
} }
public function test_get_builder(): void
{
$exporter = $this->createMock(SpanExporterInterface::class);
$this->assertInstanceOf(BatchSpanProcessorBuilder::class, BatchSpanProcessor::builder($exporter));
}
private function createSampledSpanMock() private function createSampledSpanMock()
{ {
$spanContext = $this->createConfiguredMock(API\SpanContextInterface::class, ['isSampled' => true]); $spanContext = $this->createConfiguredMock(API\SpanContextInterface::class, ['isSampled' => true]);