Skip to content

Commit

Permalink
wip
Browse files Browse the repository at this point in the history
  • Loading branch information
gaelreyrol committed Feb 1, 2024
1 parent 84cc807 commit e6fd751
Show file tree
Hide file tree
Showing 25 changed files with 473 additions and 101 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
use FriendsOfOpenTelemetry\OpenTelemetryBundle\OpenTelemetry\Metric\MetricExporterOptions;
use OpenTelemetry\SDK\Metrics\MetricExporter\ConsoleMetricExporter;

final class ConsoleMetricExporterFactory implements MetricExporterFactoryInterface
final class ConsoleMetricExporterFactory extends AbstractMetricExporterFactory
{
public function supports(#[\SensitiveParameter] ExporterDsn $dsn, ExporterOptionsInterface $options): bool
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
use FriendsOfOpenTelemetry\OpenTelemetryBundle\OpenTelemetry\Metric\MetricExporterOptions;
use OpenTelemetry\SDK\Metrics\MetricExporter\InMemoryExporter;

final class InMemoryMetricExporterFactory implements MetricExporterFactoryInterface
final class InMemoryMetricExporterFactory extends AbstractMetricExporterFactory
{
public function supports(#[\SensitiveParameter] ExporterDsn $dsn, ExporterOptionsInterface $options): bool
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
use FriendsOfOpenTelemetry\OpenTelemetryBundle\OpenTelemetry\Exporter\ExporterOptionsInterface;
use OpenTelemetry\SDK\Metrics\MetricExporter\NoopMetricExporter;

final class NoopMetricExporterFactory implements MetricExporterFactoryInterface
final class NoopMetricExporterFactory extends AbstractMetricExporterFactory
{
public function supports(#[\SensitiveParameter] ExporterDsn $dsn, ExporterOptionsInterface $options): bool
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@
use FriendsOfOpenTelemetry\OpenTelemetryBundle\OpenTelemetry\Metric\MetricExporterEndpoint;
use FriendsOfOpenTelemetry\OpenTelemetryBundle\OpenTelemetry\Metric\MetricExporterOptions;
use OpenTelemetry\Contrib\Otlp\MetricExporter;
use OpenTelemetry\SDK\Metrics\MetricExporterInterface;

final class OtlpMetricExporterFactory extends AbstractMetricExporterFactory
{
Expand All @@ -16,7 +15,7 @@ public function supports(#[\SensitiveParameter] ExporterDsn $dsn, ExporterOption
return MetricExporterEnum::Otlp === MetricExporterEnum::tryFrom($dsn->getExporter());
}

public function createExporter(#[\SensitiveParameter] ExporterDsn $dsn, ExporterOptionsInterface $options): MetricExporterInterface
public function createExporter(#[\SensitiveParameter] ExporterDsn $dsn, ExporterOptionsInterface $options): MetricExporter
{
assert($options instanceof MetricExporterOptions);

Expand Down
3 changes: 2 additions & 1 deletion src/OpenTelemetry/Transport/GrpcTransportFactory.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,8 @@
{
public function supports(#[\SensitiveParameter] ExporterEndpointInterface $endpoint, ExporterOptionsInterface $options): bool
{
return in_array(TransportEnum::tryFrom($endpoint->getTransport()), [TransportEnum::Grpc, TransportEnum::Grpcs], true);
return null !== $endpoint->getTransport()
&& in_array(TransportEnum::tryFrom($endpoint->getTransport()), [TransportEnum::Grpc, TransportEnum::Grpcs], true);
}

public function createTransport(#[\SensitiveParameter] ExporterEndpointInterface $endpoint, ExporterOptionsInterface $options): TransportInterface
Expand Down
4 changes: 2 additions & 2 deletions src/OpenTelemetry/Transport/OtlpHttpTransportFactory.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,15 +12,15 @@
{
public function supports(#[\SensitiveParameter] ExporterEndpointInterface $endpoint, ExporterOptionsInterface $options): bool
{
if (false === in_array(TransportEnum::tryFrom($endpoint->getTransport()), [TransportEnum::Http, TransportEnum::Https], true)) {
if (null === $endpoint->getTransport()) {
return false;
}

if ('otlp' !== $endpoint->getExporter()) {
return false;
}

return true;
return in_array(TransportEnum::tryFrom($endpoint->getTransport()), [TransportEnum::Http, TransportEnum::Https], true);
}

public function createTransport(#[\SensitiveParameter] ExporterEndpointInterface $endpoint, ExporterOptionsInterface $options): TransportInterface
Expand Down
3 changes: 2 additions & 1 deletion src/OpenTelemetry/Transport/PsrHttpTransportFactory.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,8 @@
{
public function supports(#[\SensitiveParameter] ExporterEndpointInterface $endpoint, ExporterOptionsInterface $options): bool
{
return in_array(TransportEnum::tryFrom($endpoint->getTransport()), [TransportEnum::Http, TransportEnum::Https], true);
return null !== $endpoint->getTransport()
&& in_array(TransportEnum::tryFrom($endpoint->getTransport()), [TransportEnum::Http, TransportEnum::Https], true);
}

public function createTransport(#[\SensitiveParameter] ExporterEndpointInterface $endpoint, ExporterOptionsInterface $options): TransportInterface
Expand Down
3 changes: 2 additions & 1 deletion src/OpenTelemetry/Transport/StreamTransportFactory.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,8 @@
{
public function supports(#[\SensitiveParameter] ExporterEndpointInterface $endpoint, ExporterOptionsInterface $options): bool
{
return TransportEnum::Stream === TransportEnum::tryFrom($endpoint->getTransport());
return null !== $endpoint->getTransport()
&& TransportEnum::Stream === TransportEnum::tryFrom($endpoint->getTransport());
}

public function createTransport(#[\SensitiveParameter] ExporterEndpointInterface $endpoint, ExporterOptionsInterface $options): TransportInterface
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,6 @@
use FriendsOfOpenTelemetry\OpenTelemetryBundle\OpenTelemetry\Exporter\ExporterDsn;
use FriendsOfOpenTelemetry\OpenTelemetryBundle\OpenTelemetry\Exporter\ExporterOptionsInterface;
use FriendsOfOpenTelemetry\OpenTelemetryBundle\OpenTelemetry\Log\LogExporter\ConsoleLogExporterFactory;
use FriendsOfOpenTelemetry\OpenTelemetryBundle\OpenTelemetry\Transport\GrpcTransportFactory;
use FriendsOfOpenTelemetry\OpenTelemetryBundle\OpenTelemetry\Transport\OtlpHttpTransportFactory;
use FriendsOfOpenTelemetry\OpenTelemetryBundle\OpenTelemetry\Transport\PsrHttpTransportFactory;
use FriendsOfOpenTelemetry\OpenTelemetryBundle\OpenTelemetry\Transport\StreamTransportFactory;
use FriendsOfOpenTelemetry\OpenTelemetryBundle\OpenTelemetry\Transport\TransportFactory;
use OpenTelemetry\SDK\Common\Export\Stream\StreamTransport;
Expand All @@ -29,9 +26,6 @@ public function testCreateExporter(string $dsn, ExporterOptionsInterface $option
}

$exporter = (new ConsoleLogExporterFactory(new TransportFactory([
new GrpcTransportFactory(),
new OtlpHttpTransportFactory(),
new PsrHttpTransportFactory(),
new StreamTransportFactory(),
])))->createExporter(ExporterDsn::fromString($dsn), $options);

Expand Down Expand Up @@ -74,13 +68,13 @@ public function exporterProvider(): \Generator
yield [
'http+otlp://default',
new EmptyExporterOptions(),
new \InvalidArgumentException('Unsupported exporter endpoint or options for this transport.'),
new \InvalidArgumentException('No transport supports the given endpoint.'),
];

yield [
'grpc+otlp://default',
new EmptyExporterOptions(),
new \InvalidArgumentException('Unsupported exporter endpoint or options for this transport.'),
new \InvalidArgumentException('No transport supports the given endpoint.'),
];

yield [
Expand Down
118 changes: 118 additions & 0 deletions tests/Unit/OpenTelemetry/Log/LogExporter/LogExporterFactoryTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@
<?php

namespace FriendsOfOpenTelemetry\OpenTelemetryBundle\Tests\Unit\OpenTelemetry\Log\LogExporter;

use FriendsOfOpenTelemetry\OpenTelemetryBundle\OpenTelemetry\Exporter\EmptyExporterOptions;
use FriendsOfOpenTelemetry\OpenTelemetryBundle\OpenTelemetry\Exporter\ExporterDsn;
use FriendsOfOpenTelemetry\OpenTelemetryBundle\OpenTelemetry\Exporter\ExporterOptionsInterface;
use FriendsOfOpenTelemetry\OpenTelemetryBundle\OpenTelemetry\Exporter\OtlpExporterOptions;
use FriendsOfOpenTelemetry\OpenTelemetryBundle\OpenTelemetry\Log\LogExporter\ConsoleLogExporterFactory;
use FriendsOfOpenTelemetry\OpenTelemetryBundle\OpenTelemetry\Log\LogExporter\InMemoryLogExporterFactory;
use FriendsOfOpenTelemetry\OpenTelemetryBundle\OpenTelemetry\Log\LogExporter\LogExporterFactory;
use FriendsOfOpenTelemetry\OpenTelemetryBundle\OpenTelemetry\Log\LogExporter\NoopLogExporterFactory;
use FriendsOfOpenTelemetry\OpenTelemetryBundle\OpenTelemetry\Log\LogExporter\OtlpLogExporterFactory;
use FriendsOfOpenTelemetry\OpenTelemetryBundle\OpenTelemetry\Transport\GrpcTransportFactory;
use FriendsOfOpenTelemetry\OpenTelemetryBundle\OpenTelemetry\Transport\OtlpHttpTransportFactory;
use FriendsOfOpenTelemetry\OpenTelemetryBundle\OpenTelemetry\Transport\PsrHttpTransportFactory;
use FriendsOfOpenTelemetry\OpenTelemetryBundle\OpenTelemetry\Transport\StreamTransportFactory;
use FriendsOfOpenTelemetry\OpenTelemetryBundle\OpenTelemetry\Transport\TransportFactory;
use OpenTelemetry\Contrib\Grpc\GrpcTransport;
use OpenTelemetry\Contrib\Otlp\LogsExporter;
use OpenTelemetry\SDK\Common\Export\Http\PsrTransport;
use OpenTelemetry\SDK\Common\Export\Stream\StreamTransport;
use OpenTelemetry\SDK\Common\Export\TransportInterface;
use OpenTelemetry\SDK\Logs\Exporter\ConsoleExporter;
use OpenTelemetry\SDK\Logs\Exporter\InMemoryExporter;
use OpenTelemetry\SDK\Logs\Exporter\NoopExporter;
use OpenTelemetry\SDK\Logs\LogRecordExporterInterface;
use PHPUnit\Framework\TestCase;

/**
* @coversDefaultClass \FriendsOfOpenTelemetry\OpenTelemetryBundle\OpenTelemetry\Log\LogExporter\LogExporterFactory
*/
class LogExporterFactoryTest extends TestCase
{
private function getTransportFactory(): TransportFactory
{
return new TransportFactory([
new GrpcTransportFactory(),
new OtlpHttpTransportFactory(),
new PsrHttpTransportFactory(),
new StreamTransportFactory(),
]);
}

/**
* @dataProvider exporterProvider
*/
public function testCreateExporter(
string $dsn,
ExporterOptionsInterface $options,
?string $exporterClass,
?string $transportClass,
): void {
$exporterFactory = (new LogExporterFactory([
new ConsoleLogExporterFactory($this->getTransportFactory()),
new InMemoryLogExporterFactory($this->getTransportFactory()),
new NoopLogExporterFactory($this->getTransportFactory()),
new OtlpLogExporterFactory($this->getTransportFactory()),
]));

$exporter = $exporterFactory->createExporter(ExporterDsn::fromString($dsn), $options);

self::assertInstanceOf($exporterClass, $exporter);

if (null !== $transportClass) {
$reflection = new \ReflectionObject($exporter);
$transport = $reflection->getProperty('transport');

self::assertInstanceOf($transportClass, $transport->getValue($exporter));
}
}

/**
* @return \Generator<array{
* 0: string,
* 1: ExporterOptionsInterface,
* 2: class-string<LogRecordExporterInterface>,
* 3: ?class-string<TransportInterface<string>>,
* }>
*/
public function exporterProvider(): \Generator
{
yield [
'stream+console://default',
new EmptyExporterOptions(),
ConsoleExporter::class,
StreamTransport::class,
];

yield [
'in-memory://default',
new EmptyExporterOptions(),
InMemoryExporter::class,
null,
];

yield [
'noop://default',
new EmptyExporterOptions(),
NoopExporter::class,
null,
];

yield [
'http+otlp://default',
new OtlpExporterOptions(),
LogsExporter::class,
PsrTransport::class,
];

yield [
'grpc+otlp://default',
new OtlpExporterOptions(),
LogsExporter::class,
GrpcTransport::class,
];
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@
use FriendsOfOpenTelemetry\OpenTelemetryBundle\OpenTelemetry\Exporter\ExporterOptionsInterface;
use FriendsOfOpenTelemetry\OpenTelemetryBundle\OpenTelemetry\Exporter\OtlpExporterOptions;
use FriendsOfOpenTelemetry\OpenTelemetryBundle\OpenTelemetry\Log\LogExporter\OtlpLogExporterFactory;
use FriendsOfOpenTelemetry\OpenTelemetryBundle\OpenTelemetry\Transport\GrpcTransportFactory;
use FriendsOfOpenTelemetry\OpenTelemetryBundle\OpenTelemetry\Transport\PsrHttpTransportFactory;
use FriendsOfOpenTelemetry\OpenTelemetryBundle\OpenTelemetry\Transport\TransportFactory;
use OpenTelemetry\Contrib\Grpc\GrpcTransport;
use OpenTelemetry\SDK\Common\Export\Http\PsrTransport;
Expand All @@ -32,7 +34,10 @@ public function testCreateExporter(
self::expectExceptionObject($exception);
}

$exporter = (new OtlpLogExporterFactory(new TransportFactory([])))
$exporter = (new OtlpLogExporterFactory(new TransportFactory([
new GrpcTransportFactory(),
new PsrHttpTransportFactory(),
])))
->createExporter(ExporterDsn::fromString($dsn), $options);

$reflection = new \ReflectionObject($exporter);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
use FriendsOfOpenTelemetry\OpenTelemetryBundle\OpenTelemetry\Exporter\ExporterDsn;
use FriendsOfOpenTelemetry\OpenTelemetryBundle\OpenTelemetry\Metric\MeterProvider\DefaultMeterProviderFactory;
use FriendsOfOpenTelemetry\OpenTelemetryBundle\OpenTelemetry\Metric\MetricExporter\NoopMetricExporterFactory;
use FriendsOfOpenTelemetry\OpenTelemetryBundle\OpenTelemetry\Transport\TransportFactory;
use OpenTelemetry\SDK\Metrics\Exemplar\ExemplarFilter\NoneExemplarFilter;
use PHPUnit\Framework\TestCase;

Expand All @@ -19,7 +20,7 @@ public function testCreateProvider(): void
self::expectNotToPerformAssertions();

DefaultMeterProviderFactory::createProvider(
(new NoopMetricExporterFactory())->createExporter(
(new NoopMetricExporterFactory(new TransportFactory([])))->createExporter(
ExporterDsn::fromString('null://default'),
EmptyExporterOptions::fromConfiguration([]),
),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
use FriendsOfOpenTelemetry\OpenTelemetryBundle\OpenTelemetry\Metric\MetricExporter\ConsoleMetricExporterFactory;
use FriendsOfOpenTelemetry\OpenTelemetryBundle\OpenTelemetry\Metric\MetricExporter\MetricTemporalityEnum;
use FriendsOfOpenTelemetry\OpenTelemetryBundle\OpenTelemetry\Metric\MetricExporterOptions;
use FriendsOfOpenTelemetry\OpenTelemetryBundle\OpenTelemetry\Transport\TransportFactory;
use OpenTelemetry\SDK\Metrics\Data\Temporality;
use PHPUnit\Framework\TestCase;

Expand All @@ -24,7 +25,7 @@ public function testCreateExporter(string $dsn, ExporterOptionsInterface $option
self::expectExceptionObject($exception);
}

$exporter = (new ConsoleMetricExporterFactory())->createExporter(ExporterDsn::fromString($dsn), $options);
$exporter = (new ConsoleMetricExporterFactory(new TransportFactory([])))->createExporter(ExporterDsn::fromString($dsn), $options);

$reflection = new \ReflectionObject($exporter);
$reflectedTemporality = $reflection->getProperty('temporality');
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
use FriendsOfOpenTelemetry\OpenTelemetryBundle\OpenTelemetry\Metric\MetricExporter\InMemoryMetricExporterFactory;
use FriendsOfOpenTelemetry\OpenTelemetryBundle\OpenTelemetry\Metric\MetricExporter\MetricTemporalityEnum;
use FriendsOfOpenTelemetry\OpenTelemetryBundle\OpenTelemetry\Metric\MetricExporterOptions;
use FriendsOfOpenTelemetry\OpenTelemetryBundle\OpenTelemetry\Transport\TransportFactory;
use OpenTelemetry\SDK\Metrics\Data\Temporality;
use PHPUnit\Framework\TestCase;

Expand All @@ -24,7 +25,7 @@ public function testCreateExporter(string $dsn, ExporterOptionsInterface $option
self::expectExceptionObject($exception);
}

$exporter = (new InMemoryMetricExporterFactory())->createExporter(ExporterDsn::fromString($dsn), $options);
$exporter = (new InMemoryMetricExporterFactory(new TransportFactory([])))->createExporter(ExporterDsn::fromString($dsn), $options);

$reflection = new \ReflectionObject($exporter);
$reflectedTemporality = $reflection->getProperty('temporality');
Expand Down
Loading

0 comments on commit e6fd751

Please sign in to comment.