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

View File

@ -18,7 +18,6 @@ class ExporterFactory
public function create(): ?SpanExporterInterface
{
$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)) {
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);
}
public static function builder(SpanExporterInterface $exporter): BatchSpanProcessorBuilder
{
return new BatchSpanProcessorBuilder($exporter);
}
private function flush(?string $flushMethod = null, ?CancellationInterface $cancellation = null): bool
{
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\SpanExporterInterface;
use OpenTelemetry\SDK\Trace\SpanProcessor\BatchSpanProcessor;
use OpenTelemetry\SDK\Trace\SpanProcessor\BatchSpanProcessorBuilder;
use OpenTelemetry\SDK\Trace\SpanProcessorInterface;
use OpenTelemetry\Tests\Unit\SDK\Util\TestClock;
use Psr\Log\LoggerInterface;
@ -542,6 +543,12 @@ class BatchSpanProcessorTest extends MockeryTestCase
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()
{
$spanContext = $this->createConfiguredMock(API\SpanContextInterface::class, ['isSampled' => true]);