migrate Clock classes to API (#1281)
* migrate Clock classes to API - move Clock* + Util into API - add a deprecated wrapper for ClockFactory and Util - remove unused StopWatch* classes * review feedback * replace ClockFactory with Clock It's not really a factory, and really only provides access to a system clock. Create a Clock class which is more clear in its purpose. * remove time Util class per review feedback, it's only used in Zipkin. Removed some unused consts from ClockInterface * Apply suggestions from code review Co-authored-by: Tobias Bachert <git@b-privat.de> --------- Co-authored-by: Tobias Bachert <git@b-privat.de>
This commit is contained in:
		
							parent
							
								
									9fe6aa0cd7
								
							
						
					
					
						commit
						fc161a8548
					
				| 
						 | 
				
			
			@ -4,11 +4,11 @@ declare(strict_types=1);
 | 
			
		|||
 | 
			
		||||
namespace OpenTelemetry\Example;
 | 
			
		||||
 | 
			
		||||
use OpenTelemetry\API\Common\Time\Clock;
 | 
			
		||||
use OpenTelemetry\Contrib\Otlp\MetricExporter;
 | 
			
		||||
use OpenTelemetry\SDK\Common\Attribute\Attributes;
 | 
			
		||||
use OpenTelemetry\SDK\Common\Export\Stream\StreamTransportFactory;
 | 
			
		||||
use OpenTelemetry\SDK\Common\Instrumentation\InstrumentationScopeFactory;
 | 
			
		||||
use OpenTelemetry\SDK\Common\Time\ClockFactory;
 | 
			
		||||
use OpenTelemetry\SDK\Metrics\Exemplar\ExemplarFilter\WithSampledTraceExemplarFilter;
 | 
			
		||||
use OpenTelemetry\SDK\Metrics\MeterProvider;
 | 
			
		||||
use OpenTelemetry\SDK\Metrics\MetricReader\ExportingReader;
 | 
			
		||||
| 
						 | 
				
			
			@ -29,7 +29,7 @@ $tracer = (new TracerProvider())->getTracer('io.opentelemetry.contrib.php');
 | 
			
		|||
echo get_class($tracer) . PHP_EOL;
 | 
			
		||||
 | 
			
		||||
//metrics
 | 
			
		||||
$clock = ClockFactory::getDefault();
 | 
			
		||||
$clock = Clock::getDefault();
 | 
			
		||||
$reader = new ExportingReader(new MetricExporter((new StreamTransportFactory())->create(STDOUT, 'application/x-ndjson')));
 | 
			
		||||
$views = new CriteriaViewRegistry();
 | 
			
		||||
$meterProvider = new MeterProvider(
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4,6 +4,7 @@ declare(strict_types=1);
 | 
			
		|||
 | 
			
		||||
namespace OpenTelemetry\Example;
 | 
			
		||||
 | 
			
		||||
use OpenTelemetry\API\Common\Time\Clock;
 | 
			
		||||
use OpenTelemetry\API\Logs\EventLogger;
 | 
			
		||||
use OpenTelemetry\API\Logs\LogRecord;
 | 
			
		||||
use OpenTelemetry\API\Signals;
 | 
			
		||||
| 
						 | 
				
			
			@ -12,7 +13,6 @@ use OpenTelemetry\Contrib\Otlp\LogsExporter;
 | 
			
		|||
use OpenTelemetry\Contrib\Otlp\OtlpUtil;
 | 
			
		||||
use Opentelemetry\Proto\Logs\V1\SeverityNumber;
 | 
			
		||||
use OpenTelemetry\SDK\Common\Instrumentation\InstrumentationScopeFactory;
 | 
			
		||||
use OpenTelemetry\SDK\Common\Time\ClockFactory;
 | 
			
		||||
use OpenTelemetry\SDK\Logs\LoggerProvider;
 | 
			
		||||
use OpenTelemetry\SDK\Logs\LogRecordLimitsBuilder;
 | 
			
		||||
use OpenTelemetry\SDK\Logs\Processor\BatchLogRecordProcessor;
 | 
			
		||||
| 
						 | 
				
			
			@ -24,7 +24,7 @@ $exporter = new LogsExporter($transport);
 | 
			
		|||
$loggerProvider = new LoggerProvider(
 | 
			
		||||
    new BatchLogRecordProcessor(
 | 
			
		||||
        $exporter,
 | 
			
		||||
        ClockFactory::getDefault()
 | 
			
		||||
        Clock::getDefault()
 | 
			
		||||
    ),
 | 
			
		||||
    new InstrumentationScopeFactory(
 | 
			
		||||
        (new LogRecordLimitsBuilder())->build()->getAttributeFactory()
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4,11 +4,11 @@ declare(strict_types=1);
 | 
			
		|||
 | 
			
		||||
namespace OpenTelemetry\Example;
 | 
			
		||||
 | 
			
		||||
use OpenTelemetry\API\Common\Time\Clock;
 | 
			
		||||
use OpenTelemetry\API\Logs\EventLogger;
 | 
			
		||||
use OpenTelemetry\API\Logs\LogRecord;
 | 
			
		||||
use OpenTelemetry\SDK\Common\Attribute\Attributes;
 | 
			
		||||
use OpenTelemetry\SDK\Common\Instrumentation\InstrumentationScopeFactory;
 | 
			
		||||
use OpenTelemetry\SDK\Common\Time\ClockFactory;
 | 
			
		||||
use OpenTelemetry\SDK\Logs\Exporter\ConsoleExporterFactory;
 | 
			
		||||
use OpenTelemetry\SDK\Logs\LoggerProvider;
 | 
			
		||||
use OpenTelemetry\SDK\Logs\Processor\BatchLogRecordProcessor;
 | 
			
		||||
| 
						 | 
				
			
			@ -18,7 +18,7 @@ require __DIR__ . '/../../../vendor/autoload.php';
 | 
			
		|||
$loggerProvider = new LoggerProvider(
 | 
			
		||||
    new BatchLogRecordProcessor(
 | 
			
		||||
        (new ConsoleExporterFactory())->create(),
 | 
			
		||||
        ClockFactory::getDefault()
 | 
			
		||||
        Clock::getDefault()
 | 
			
		||||
    ),
 | 
			
		||||
    new InstrumentationScopeFactory(Attributes::factory())
 | 
			
		||||
);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -7,11 +7,11 @@ namespace OpenTelemetry\Example;
 | 
			
		|||
 | 
			
		||||
require_once __DIR__ . '/../../vendor/autoload.php';
 | 
			
		||||
 | 
			
		||||
use OpenTelemetry\API\Common\Time\Clock;
 | 
			
		||||
use OpenTelemetry\Contrib\Otlp\MetricExporter;
 | 
			
		||||
use OpenTelemetry\SDK\Common\Attribute\Attributes;
 | 
			
		||||
use OpenTelemetry\SDK\Common\Export\Stream\StreamTransportFactory;
 | 
			
		||||
use OpenTelemetry\SDK\Common\Instrumentation\InstrumentationScopeFactory;
 | 
			
		||||
use OpenTelemetry\SDK\Common\Time\ClockFactory;
 | 
			
		||||
use OpenTelemetry\SDK\Metrics\Aggregation\ExplicitBucketHistogramAggregation;
 | 
			
		||||
use OpenTelemetry\SDK\Metrics\Exemplar\ExemplarFilter\WithSampledTraceExemplarFilter;
 | 
			
		||||
use OpenTelemetry\SDK\Metrics\MeterProvider;
 | 
			
		||||
| 
						 | 
				
			
			@ -22,7 +22,7 @@ use OpenTelemetry\SDK\Metrics\View\SelectionCriteria\InstrumentNameCriteria;
 | 
			
		|||
use OpenTelemetry\SDK\Metrics\View\ViewTemplate;
 | 
			
		||||
use OpenTelemetry\SDK\Resource\ResourceInfoFactory;
 | 
			
		||||
 | 
			
		||||
$clock = ClockFactory::getDefault();
 | 
			
		||||
$clock = Clock::getDefault();
 | 
			
		||||
$reader = new ExportingReader(new MetricExporter((new StreamTransportFactory())->create(STDOUT, 'application/x-ndjson'), /*Temporality::CUMULATIVE*/));
 | 
			
		||||
 | 
			
		||||
// Let's imagine we export the metrics as Histogram, and to simplify the story we will only have one histogram bucket (-Inf, +Inf):
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -6,14 +6,14 @@ namespace OpenTelemetry\Example;
 | 
			
		|||
 | 
			
		||||
require __DIR__ . '/../../../vendor/autoload.php';
 | 
			
		||||
 | 
			
		||||
use OpenTelemetry\API\Common\Time\Clock;
 | 
			
		||||
use OpenTelemetry\API\Signals;
 | 
			
		||||
use OpenTelemetry\Contrib\Grpc\GrpcTransportFactory;
 | 
			
		||||
use OpenTelemetry\Contrib\Otlp\MetricExporter;
 | 
			
		||||
use OpenTelemetry\Contrib\Otlp\OtlpUtil;
 | 
			
		||||
use OpenTelemetry\SDK\Common\Time\ClockFactory;
 | 
			
		||||
use OpenTelemetry\SDK\Metrics\MetricReader\ExportingReader;
 | 
			
		||||
 | 
			
		||||
$clock = ClockFactory::getDefault();
 | 
			
		||||
$clock = Clock::getDefault();
 | 
			
		||||
 | 
			
		||||
$reader = new ExportingReader(
 | 
			
		||||
    new MetricExporter(
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -6,12 +6,12 @@ namespace OpenTelemetry\Example;
 | 
			
		|||
 | 
			
		||||
require __DIR__ . '/../../../vendor/autoload.php';
 | 
			
		||||
 | 
			
		||||
use OpenTelemetry\API\Common\Time\Clock;
 | 
			
		||||
use OpenTelemetry\Contrib\Otlp\MetricExporter;
 | 
			
		||||
use OpenTelemetry\SDK\Common\Export\Http\PsrTransportFactory;
 | 
			
		||||
use OpenTelemetry\SDK\Common\Time\ClockFactory;
 | 
			
		||||
use OpenTelemetry\SDK\Metrics\MetricReader\ExportingReader;
 | 
			
		||||
 | 
			
		||||
$clock = ClockFactory::getDefault();
 | 
			
		||||
$clock = Clock::getDefault();
 | 
			
		||||
$reader = new ExportingReader(
 | 
			
		||||
    new MetricExporter(
 | 
			
		||||
        (new PsrTransportFactory())->create('http://collector:4318/v1/metrics', \OpenTelemetry\Contrib\Otlp\ContentTypes::JSON)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -6,12 +6,12 @@ namespace OpenTelemetry\Example;
 | 
			
		|||
 | 
			
		||||
require __DIR__ . '/../../../vendor/autoload.php';
 | 
			
		||||
 | 
			
		||||
use OpenTelemetry\API\Common\Time\Clock;
 | 
			
		||||
use OpenTelemetry\Contrib\Otlp\MetricExporter;
 | 
			
		||||
use OpenTelemetry\SDK\Common\Export\Stream\StreamTransportFactory;
 | 
			
		||||
use OpenTelemetry\SDK\Common\Time\ClockFactory;
 | 
			
		||||
use OpenTelemetry\SDK\Metrics\MetricReader\ExportingReader;
 | 
			
		||||
 | 
			
		||||
$clock = ClockFactory::getDefault();
 | 
			
		||||
$clock = Clock::getDefault();
 | 
			
		||||
// @psalm-suppress InternalMethod
 | 
			
		||||
$reader = new ExportingReader(
 | 
			
		||||
    new MetricExporter(
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4,10 +4,10 @@ declare(strict_types=1);
 | 
			
		|||
 | 
			
		||||
namespace OpenTelemetry\Example;
 | 
			
		||||
 | 
			
		||||
use OpenTelemetry\API\Common\Time\ClockInterface;
 | 
			
		||||
use OpenTelemetry\API\Metrics\ObserverInterface;
 | 
			
		||||
use OpenTelemetry\SDK\Common\Attribute\Attributes;
 | 
			
		||||
use OpenTelemetry\SDK\Common\Instrumentation\InstrumentationScopeFactory;
 | 
			
		||||
use OpenTelemetry\SDK\Common\Time\ClockInterface;
 | 
			
		||||
use OpenTelemetry\SDK\Metrics\Exemplar\ExemplarFilter\WithSampledTraceExemplarFilter;
 | 
			
		||||
use OpenTelemetry\SDK\Metrics\MeterProvider;
 | 
			
		||||
use OpenTelemetry\SDK\Metrics\MetricReader\ExportingReader;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -6,10 +6,10 @@ namespace OpenTelemetry\Example;
 | 
			
		|||
 | 
			
		||||
require __DIR__ . '/../../../vendor/autoload.php';
 | 
			
		||||
 | 
			
		||||
use OpenTelemetry\API\Common\Time\Clock;
 | 
			
		||||
use OpenTelemetry\Contrib\Otlp\ContentTypes;
 | 
			
		||||
use OpenTelemetry\Contrib\Otlp\SpanExporter;
 | 
			
		||||
use OpenTelemetry\SDK\Common\Export\Stream\StreamTransportFactory;
 | 
			
		||||
use OpenTelemetry\SDK\Common\Time\ClockFactory;
 | 
			
		||||
use OpenTelemetry\SDK\Trace\SpanProcessor\BatchSpanProcessor;
 | 
			
		||||
use OpenTelemetry\SDK\Trace\TracerProvider;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -23,7 +23,7 @@ echo 'Starting OTLP example';
 | 
			
		|||
$tracerProvider =  new TracerProvider(
 | 
			
		||||
    new BatchSpanProcessor(
 | 
			
		||||
        $exporter,
 | 
			
		||||
        ClockFactory::getDefault()
 | 
			
		||||
        Clock::getDefault()
 | 
			
		||||
    )
 | 
			
		||||
);
 | 
			
		||||
$tracer = $tracerProvider->getTracer('io.opentelemetry.contrib.php');
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -6,7 +6,7 @@ namespace OpenTelemetry\Example;
 | 
			
		|||
 | 
			
		||||
require __DIR__ . '/../../../vendor/autoload.php';
 | 
			
		||||
 | 
			
		||||
use OpenTelemetry\SDK\Common\Time\ClockFactory;
 | 
			
		||||
use OpenTelemetry\API\Common\Time\Clock;
 | 
			
		||||
use OpenTelemetry\SDK\Trace\SpanExporter\ConsoleSpanExporterFactory;
 | 
			
		||||
use OpenTelemetry\SDK\Trace\SpanProcessor\BatchSpanProcessor;
 | 
			
		||||
use OpenTelemetry\SDK\Trace\TracerProvider;
 | 
			
		||||
| 
						 | 
				
			
			@ -19,7 +19,7 @@ echo sprintf('Sending batches every %dms and on shutdown', $delayMillis) . PHP_E
 | 
			
		|||
$tracerProvider = new TracerProvider(
 | 
			
		||||
    new BatchSpanProcessor(
 | 
			
		||||
        (new ConsoleSpanExporterFactory())->create(),
 | 
			
		||||
        ClockFactory::getDefault(),
 | 
			
		||||
        Clock::getDefault(),
 | 
			
		||||
        2048, //max spans to queue before sending to exporter
 | 
			
		||||
        $delayMillis, //batch delay milliseconds
 | 
			
		||||
    )
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -17,9 +17,9 @@ require __DIR__ . '/../../vendor/autoload.php';
 | 
			
		|||
 * will be the last log entry
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
use OpenTelemetry\API\Common\Time\Clock;
 | 
			
		||||
use OpenTelemetry\Contrib\Zipkin\Exporter as ZipkinExporter;
 | 
			
		||||
use OpenTelemetry\SDK\Common\Export\Http\PsrTransportFactory;
 | 
			
		||||
use OpenTelemetry\SDK\Common\Time\ClockFactory;
 | 
			
		||||
use OpenTelemetry\SDK\Logs\SimplePsrFileLogger;
 | 
			
		||||
use OpenTelemetry\SDK\Trace\Sampler\AlwaysOnSampler;
 | 
			
		||||
use OpenTelemetry\SDK\Trace\SpanExporter\LoggerDecorator;
 | 
			
		||||
| 
						 | 
				
			
			@ -57,7 +57,7 @@ $decorator = new LoggerDecorator(
 | 
			
		|||
 * Create the Tracer
 | 
			
		||||
 */
 | 
			
		||||
$tracerProvider = new TracerProvider(
 | 
			
		||||
    new BatchSpanProcessor($decorator, ClockFactory::getDefault()),
 | 
			
		||||
    new BatchSpanProcessor($decorator, Clock::getDefault()),
 | 
			
		||||
    new AlwaysOnSampler()
 | 
			
		||||
);
 | 
			
		||||
$tracer = $tracerProvider->getTracer('io.opentelemetry.contrib.php');
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,25 @@
 | 
			
		|||
<?php
 | 
			
		||||
 | 
			
		||||
declare(strict_types=1);
 | 
			
		||||
 | 
			
		||||
namespace OpenTelemetry\API\Common\Time;
 | 
			
		||||
 | 
			
		||||
final class Clock
 | 
			
		||||
{
 | 
			
		||||
    private static ?ClockInterface $clock = null;
 | 
			
		||||
 | 
			
		||||
    public static function getDefault(): ClockInterface
 | 
			
		||||
    {
 | 
			
		||||
        return self::$clock ??= new SystemClock();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static function setDefault(ClockInterface $clock): void
 | 
			
		||||
    {
 | 
			
		||||
        self::$clock = $clock;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static function reset(): void
 | 
			
		||||
    {
 | 
			
		||||
        self::$clock = null;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,17 @@
 | 
			
		|||
<?php
 | 
			
		||||
 | 
			
		||||
declare(strict_types=1);
 | 
			
		||||
 | 
			
		||||
namespace OpenTelemetry\API\Common\Time;
 | 
			
		||||
 | 
			
		||||
interface ClockInterface
 | 
			
		||||
{
 | 
			
		||||
    public const NANOS_PER_SECOND = 1_000_000_000;
 | 
			
		||||
    public const NANOS_PER_MILLISECOND = 1_000_000;
 | 
			
		||||
    public const NANOS_PER_MICROSECOND = 1_000;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Returns the current epoch wall-clock timestamp in nanoseconds
 | 
			
		||||
     */
 | 
			
		||||
    public function now(): int;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -2,11 +2,14 @@
 | 
			
		|||
 | 
			
		||||
declare(strict_types=1);
 | 
			
		||||
 | 
			
		||||
namespace OpenTelemetry\SDK\Common\Time;
 | 
			
		||||
namespace OpenTelemetry\API\Common\Time;
 | 
			
		||||
 | 
			
		||||
use function hrtime;
 | 
			
		||||
use function microtime;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @internal OpenTelemetry
 | 
			
		||||
 */
 | 
			
		||||
final class SystemClock implements ClockInterface
 | 
			
		||||
{
 | 
			
		||||
    private static int $referenceTime = 0;
 | 
			
		||||
| 
						 | 
				
			
			@ -2,10 +2,11 @@
 | 
			
		|||
 | 
			
		||||
declare(strict_types=1);
 | 
			
		||||
 | 
			
		||||
namespace OpenTelemetry\Tests\Unit\SDK\Util;
 | 
			
		||||
 | 
			
		||||
use OpenTelemetry\SDK\Common\Time\ClockInterface;
 | 
			
		||||
namespace OpenTelemetry\API\Common\Time;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @internal OpenTelemetry
 | 
			
		||||
 */
 | 
			
		||||
final class TestClock implements ClockInterface
 | 
			
		||||
{
 | 
			
		||||
    public const DEFAULT_START_EPOCH = 1633060331386955008; // Fri Oct 01 2021 03:52:11 UTC
 | 
			
		||||
| 
						 | 
				
			
			@ -36,9 +37,4 @@ final class TestClock implements ClockInterface
 | 
			
		|||
    {
 | 
			
		||||
        return $this->currentEpochNanos;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function nanoTime(): int
 | 
			
		||||
    {
 | 
			
		||||
        return $this->currentEpochNanos;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -4,11 +4,11 @@ declare(strict_types=1);
 | 
			
		|||
 | 
			
		||||
namespace OpenTelemetry\Config\SDK\ComponentProvider\Logs;
 | 
			
		||||
 | 
			
		||||
use OpenTelemetry\API\Common\Time\Clock;
 | 
			
		||||
use OpenTelemetry\Config\SDK\Configuration\ComponentPlugin;
 | 
			
		||||
use OpenTelemetry\Config\SDK\Configuration\ComponentProvider;
 | 
			
		||||
use OpenTelemetry\Config\SDK\Configuration\ComponentProviderRegistry;
 | 
			
		||||
use OpenTelemetry\Config\SDK\Configuration\Context;
 | 
			
		||||
use OpenTelemetry\SDK\Common\Time\ClockFactory;
 | 
			
		||||
use OpenTelemetry\SDK\Logs\LogRecordExporterInterface;
 | 
			
		||||
use OpenTelemetry\SDK\Logs\LogRecordProcessorInterface;
 | 
			
		||||
use OpenTelemetry\SDK\Logs\Processor\BatchLogRecordProcessor;
 | 
			
		||||
| 
						 | 
				
			
			@ -33,7 +33,7 @@ final class LogRecordProcessorBatch implements ComponentProvider
 | 
			
		|||
    {
 | 
			
		||||
        return new BatchLogRecordProcessor(
 | 
			
		||||
            exporter: $properties['exporter']->create($context),
 | 
			
		||||
            clock: ClockFactory::getDefault(),
 | 
			
		||||
            clock: Clock::getDefault(),
 | 
			
		||||
            maxQueueSize: $properties['max_queue_size'],
 | 
			
		||||
            scheduledDelayMillis: $properties['schedule_delay'],
 | 
			
		||||
            exportTimeoutMillis: $properties['export_timeout'],
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4,6 +4,7 @@ declare(strict_types=1);
 | 
			
		|||
 | 
			
		||||
namespace OpenTelemetry\Config\SDK\ComponentProvider;
 | 
			
		||||
 | 
			
		||||
use OpenTelemetry\API\Common\Time\Clock;
 | 
			
		||||
use OpenTelemetry\Config\SDK\Configuration\ComponentPlugin;
 | 
			
		||||
use OpenTelemetry\Config\SDK\Configuration\ComponentProvider;
 | 
			
		||||
use OpenTelemetry\Config\SDK\Configuration\ComponentProviderRegistry;
 | 
			
		||||
| 
						 | 
				
			
			@ -13,7 +14,6 @@ use OpenTelemetry\Context\Propagation\NoopTextMapPropagator;
 | 
			
		|||
use OpenTelemetry\Context\Propagation\TextMapPropagatorInterface;
 | 
			
		||||
use OpenTelemetry\SDK\Common\Attribute\Attributes;
 | 
			
		||||
use OpenTelemetry\SDK\Common\Instrumentation\InstrumentationScopeFactory;
 | 
			
		||||
use OpenTelemetry\SDK\Common\Time\ClockFactory;
 | 
			
		||||
use OpenTelemetry\SDK\Logs\LoggerProvider;
 | 
			
		||||
use OpenTelemetry\SDK\Logs\LogRecordProcessorInterface;
 | 
			
		||||
use OpenTelemetry\SDK\Logs\Processor\MultiLogRecordProcessor;
 | 
			
		||||
| 
						 | 
				
			
			@ -215,7 +215,7 @@ final class OpenTelemetrySdk implements ComponentProvider
 | 
			
		|||
        $meterProvider = new MeterProvider(
 | 
			
		||||
            contextStorage: null,
 | 
			
		||||
            resource: $resource,
 | 
			
		||||
            clock: ClockFactory::getDefault(),
 | 
			
		||||
            clock: Clock::getDefault(),
 | 
			
		||||
            attributesFactory: Attributes::factory(),
 | 
			
		||||
            instrumentationScopeFactory: new InstrumentationScopeFactory(Attributes::factory()),
 | 
			
		||||
            metricReaders: $metricReaders, // @phpstan-ignore-line
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4,11 +4,11 @@ declare(strict_types=1);
 | 
			
		|||
 | 
			
		||||
namespace OpenTelemetry\Config\SDK\ComponentProvider\Trace;
 | 
			
		||||
 | 
			
		||||
use OpenTelemetry\API\Common\Time\Clock;
 | 
			
		||||
use OpenTelemetry\Config\SDK\Configuration\ComponentPlugin;
 | 
			
		||||
use OpenTelemetry\Config\SDK\Configuration\ComponentProvider;
 | 
			
		||||
use OpenTelemetry\Config\SDK\Configuration\ComponentProviderRegistry;
 | 
			
		||||
use OpenTelemetry\Config\SDK\Configuration\Context;
 | 
			
		||||
use OpenTelemetry\SDK\Common\Time\ClockFactory;
 | 
			
		||||
use OpenTelemetry\SDK\Trace\SpanExporterInterface;
 | 
			
		||||
use OpenTelemetry\SDK\Trace\SpanProcessor\BatchSpanProcessor;
 | 
			
		||||
use OpenTelemetry\SDK\Trace\SpanProcessorInterface;
 | 
			
		||||
| 
						 | 
				
			
			@ -33,7 +33,7 @@ final class SpanProcessorBatch implements ComponentProvider
 | 
			
		|||
    {
 | 
			
		||||
        return new BatchSpanProcessor(
 | 
			
		||||
            exporter: $properties['exporter']->create($context),
 | 
			
		||||
            clock: ClockFactory::getDefault(),
 | 
			
		||||
            clock: Clock::getDefault(),
 | 
			
		||||
            maxQueueSize: $properties['max_queue_size'],
 | 
			
		||||
            scheduledDelayMillis: $properties['schedule_delay'],
 | 
			
		||||
            exportTimeoutMillis: $properties['export_timeout'],
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -5,10 +5,10 @@ declare(strict_types=1);
 | 
			
		|||
namespace OpenTelemetry\Contrib\Zipkin;
 | 
			
		||||
 | 
			
		||||
use function max;
 | 
			
		||||
use OpenTelemetry\API\Common\Time\ClockInterface;
 | 
			
		||||
use OpenTelemetry\API\Trace\SpanKind;
 | 
			
		||||
use OpenTelemetry\API\Trace\StatusCode;
 | 
			
		||||
use OpenTelemetry\Contrib\Zipkin\SpanKind as ZipkinSpanKind;
 | 
			
		||||
use OpenTelemetry\SDK\Common\Time\Util as TimeUtil;
 | 
			
		||||
use OpenTelemetry\SDK\Resource\ResourceInfoFactory;
 | 
			
		||||
use OpenTelemetry\SDK\Trace\EventInterface;
 | 
			
		||||
use OpenTelemetry\SDK\Trace\SpanConverterInterface;
 | 
			
		||||
| 
						 | 
				
			
			@ -25,6 +25,8 @@ class SpanConverter implements SpanConverterInterface
 | 
			
		|||
    const KEY_DROPPED_EVENTS_COUNT = 'otel.dropped_events_count';
 | 
			
		||||
    const KEY_DROPPED_LINKS_COUNT = 'otel.dropped_links_count';
 | 
			
		||||
 | 
			
		||||
    public const NANOS_PER_MICROSECOND = 1_000;
 | 
			
		||||
 | 
			
		||||
    const REMOTE_ENDPOINT_PREFERRED_ATTRIBUTE_TO_RANK_MAP = [
 | 
			
		||||
        'peer.service' => 1,
 | 
			
		||||
        'net.peer.name' => 2,
 | 
			
		||||
| 
						 | 
				
			
			@ -44,6 +46,12 @@ class SpanConverter implements SpanConverterInterface
 | 
			
		|||
        $this->defaultServiceName = ResourceInfoFactory::defaultResource()->getAttributes()->get(ResourceAttributes::SERVICE_NAME);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /** @psalm-pure */
 | 
			
		||||
    public static function nanosToMicros(int $nanoseconds): int
 | 
			
		||||
    {
 | 
			
		||||
        return intdiv($nanoseconds, ClockInterface::NANOS_PER_MICROSECOND);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private function sanitiseTagValue($value): string
 | 
			
		||||
    {
 | 
			
		||||
        // Casting false to string makes an empty string
 | 
			
		||||
| 
						 | 
				
			
			@ -80,8 +88,8 @@ class SpanConverter implements SpanConverterInterface
 | 
			
		|||
    {
 | 
			
		||||
        $spanParent = $span->getParentContext();
 | 
			
		||||
 | 
			
		||||
        $startTimestamp = TimeUtil::nanosToMicros($span->getStartEpochNanos());
 | 
			
		||||
        $endTimestamp = TimeUtil::nanosToMicros($span->getEndEpochNanos());
 | 
			
		||||
        $startTimestamp = self::nanosToMicros($span->getStartEpochNanos());
 | 
			
		||||
        $endTimestamp = self::nanosToMicros($span->getEndEpochNanos());
 | 
			
		||||
 | 
			
		||||
        $serviceName =  $span->getResource()->getAttributes()->get(ResourceAttributes::SERVICE_NAME)
 | 
			
		||||
                        ??
 | 
			
		||||
| 
						 | 
				
			
			@ -189,7 +197,7 @@ class SpanConverter implements SpanConverterInterface
 | 
			
		|||
        $value = ($attributesAsJson !== null) ? sprintf('"%s": %s', $eventName, $attributesAsJson) : sprintf('"%s"', $eventName);
 | 
			
		||||
 | 
			
		||||
        $annotation = [
 | 
			
		||||
            'timestamp' => TimeUtil::nanosToMicros($event->getEpochNanos()),
 | 
			
		||||
            'timestamp' => self::nanosToMicros($event->getEpochNanos()),
 | 
			
		||||
            'value' => $value,
 | 
			
		||||
        ];
 | 
			
		||||
        if ($event->getAttributes()->getDroppedAttributesCount() > 0) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4,27 +4,26 @@ declare(strict_types=1);
 | 
			
		|||
 | 
			
		||||
namespace OpenTelemetry\SDK\Common\Time;
 | 
			
		||||
 | 
			
		||||
final class ClockFactory implements ClockFactoryInterface
 | 
			
		||||
use OpenTelemetry\API\Common\Time\Clock;
 | 
			
		||||
use OpenTelemetry\API\Common\Time\ClockInterface;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @deprecated Use OpenTelemetry\API\Common\Time\Clock
 | 
			
		||||
 * @codeCoverageIgnore
 | 
			
		||||
 */
 | 
			
		||||
class ClockFactory
 | 
			
		||||
{
 | 
			
		||||
    private static ?ClockInterface $default = null;
 | 
			
		||||
 | 
			
		||||
    public static function create(): self
 | 
			
		||||
    {
 | 
			
		||||
        return new self();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function build(): ClockInterface
 | 
			
		||||
    {
 | 
			
		||||
        return new SystemClock();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static function getDefault(): ClockInterface
 | 
			
		||||
    {
 | 
			
		||||
        return self::$default ?? self::$default = self::create()->build();
 | 
			
		||||
        return Clock::getDefault();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static function setDefault(?ClockInterface $clock): void
 | 
			
		||||
    {
 | 
			
		||||
        self::$default = $clock;
 | 
			
		||||
        if ($clock !== null) {
 | 
			
		||||
            Clock::setDefault($clock);
 | 
			
		||||
        } else {
 | 
			
		||||
            Clock::reset();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,16 +0,0 @@
 | 
			
		|||
<?php
 | 
			
		||||
 | 
			
		||||
declare(strict_types=1);
 | 
			
		||||
 | 
			
		||||
namespace OpenTelemetry\SDK\Common\Time;
 | 
			
		||||
 | 
			
		||||
interface ClockFactoryInterface
 | 
			
		||||
{
 | 
			
		||||
    public static function create(): self;
 | 
			
		||||
 | 
			
		||||
    public function build(): ClockInterface;
 | 
			
		||||
 | 
			
		||||
    public static function getDefault(): ClockInterface;
 | 
			
		||||
 | 
			
		||||
    public static function setDefault(?ClockInterface $clock): void;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -4,16 +4,11 @@ declare(strict_types=1);
 | 
			
		|||
 | 
			
		||||
namespace OpenTelemetry\SDK\Common\Time;
 | 
			
		||||
 | 
			
		||||
interface ClockInterface
 | 
			
		||||
{
 | 
			
		||||
    public const MILLIS_PER_SECOND = 1_000;
 | 
			
		||||
    public const MICROS_PER_SECOND = 1_000_000;
 | 
			
		||||
    public const NANOS_PER_SECOND = 1_000_000_000;
 | 
			
		||||
    public const NANOS_PER_MILLISECOND = 1_000_000;
 | 
			
		||||
    public const NANOS_PER_MICROSECOND = 1_000;
 | 
			
		||||
use OpenTelemetry\API\Common\Time as API;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Returns the current epoch wall-clock timestamp in nanoseconds
 | 
			
		||||
     */
 | 
			
		||||
    public function now(): int;
 | 
			
		||||
/**
 | 
			
		||||
 * @deprecated Use OpenTelemetry\API\Common\Time\ClockInterface
 | 
			
		||||
 */
 | 
			
		||||
interface ClockInterface extends API\ClockInterface
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,116 +0,0 @@
 | 
			
		|||
<?php
 | 
			
		||||
 | 
			
		||||
declare(strict_types=1);
 | 
			
		||||
 | 
			
		||||
namespace OpenTelemetry\SDK\Common\Time;
 | 
			
		||||
 | 
			
		||||
final class StopWatch implements StopWatchInterface
 | 
			
		||||
{
 | 
			
		||||
    private const INITIAL_ELAPSED_TIME = 0;
 | 
			
		||||
    private bool $running = false;
 | 
			
		||||
    private ?int $startTime = null;
 | 
			
		||||
    private ?int $stopTime = null;
 | 
			
		||||
 | 
			
		||||
    public function __construct(
 | 
			
		||||
        private readonly ClockInterface $clock,
 | 
			
		||||
        private ?int $initialStartTime = null,
 | 
			
		||||
    ) {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function isRunning(): bool
 | 
			
		||||
    {
 | 
			
		||||
        return $this->running;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function start(): void
 | 
			
		||||
    {
 | 
			
		||||
        // resolve start time as early as possible
 | 
			
		||||
        $startTime = $this->time();
 | 
			
		||||
 | 
			
		||||
        if ($this->isRunning()) {
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        $this->startTime = $startTime;
 | 
			
		||||
        if (!$this->hasBeenStarted()) {
 | 
			
		||||
            $this->initialStartTime = $startTime;
 | 
			
		||||
        }
 | 
			
		||||
        $this->running = true;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function stop(): void
 | 
			
		||||
    {
 | 
			
		||||
        if (!$this->isRunning()) {
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        $this->stopTime = $this->time();
 | 
			
		||||
        $this->running = false;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function reset(): void
 | 
			
		||||
    {
 | 
			
		||||
        $this->startTime = $this->initialStartTime = $this->isRunning() ? $this->time() : null;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getElapsedTime(): int
 | 
			
		||||
    {
 | 
			
		||||
        if (!$this->hasBeenStarted()) {
 | 
			
		||||
            return self::INITIAL_ELAPSED_TIME;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return $this->calculateElapsedTime();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getLastElapsedTime(): int
 | 
			
		||||
    {
 | 
			
		||||
        if (!$this->hasBeenStarted()) {
 | 
			
		||||
            return self::INITIAL_ELAPSED_TIME;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return $this->calculateLastElapsedTime();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private function time(): int
 | 
			
		||||
    {
 | 
			
		||||
        return $this->clock->now();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private function hasBeenStarted(): bool
 | 
			
		||||
    {
 | 
			
		||||
        return $this->initialStartTime !== null;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private function calculateElapsedTime(): int
 | 
			
		||||
    {
 | 
			
		||||
        $referenceTime = $this->isRunning()
 | 
			
		||||
            ? $this->time()
 | 
			
		||||
            : $this->getStopTime();
 | 
			
		||||
 | 
			
		||||
        return $referenceTime - $this->getInitialStartTime();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private function calculateLastElapsedTime(): int
 | 
			
		||||
    {
 | 
			
		||||
        $referenceTime = $this->isRunning()
 | 
			
		||||
            ? $this->time()
 | 
			
		||||
            : $this->getStopTime();
 | 
			
		||||
 | 
			
		||||
        return $referenceTime - $this->getStartTime();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private function getInitialStartTime(): ?int
 | 
			
		||||
    {
 | 
			
		||||
        return $this->initialStartTime;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private function getStartTime(): ?int
 | 
			
		||||
    {
 | 
			
		||||
        return $this->startTime;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private function getStopTime(): ?int
 | 
			
		||||
    {
 | 
			
		||||
        return $this->stopTime;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,44 +0,0 @@
 | 
			
		|||
<?php
 | 
			
		||||
 | 
			
		||||
declare(strict_types=1);
 | 
			
		||||
 | 
			
		||||
namespace OpenTelemetry\SDK\Common\Time;
 | 
			
		||||
 | 
			
		||||
final class StopWatchFactory implements StopWatchFactoryInterface
 | 
			
		||||
{
 | 
			
		||||
    private static ?StopWatchInterface $default = null;
 | 
			
		||||
 | 
			
		||||
    private readonly ClockInterface $clock;
 | 
			
		||||
 | 
			
		||||
    public function __construct(
 | 
			
		||||
        ?ClockInterface $clock = null,
 | 
			
		||||
        private readonly ?int $initialStartTime = null,
 | 
			
		||||
    ) {
 | 
			
		||||
        $this->clock = $clock ?? ClockFactory::getDefault();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static function create(?ClockInterface $clock = null, ?int $initialStartTime = null): self
 | 
			
		||||
    {
 | 
			
		||||
        return new self($clock, $initialStartTime);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static function fromClockFactory(ClockFactoryInterface $factory, ?int $initialStartTime = null): self
 | 
			
		||||
    {
 | 
			
		||||
        return self::create($factory->build(), $initialStartTime);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function build(): StopWatch
 | 
			
		||||
    {
 | 
			
		||||
        return new StopWatch($this->clock, $this->initialStartTime);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static function getDefault(): StopWatchInterface
 | 
			
		||||
    {
 | 
			
		||||
        return self::$default ?? self::$default = self::create()->build();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static function setDefault(?StopWatchInterface $default): void
 | 
			
		||||
    {
 | 
			
		||||
        self::$default = $default;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,18 +0,0 @@
 | 
			
		|||
<?php
 | 
			
		||||
 | 
			
		||||
declare(strict_types=1);
 | 
			
		||||
 | 
			
		||||
namespace OpenTelemetry\SDK\Common\Time;
 | 
			
		||||
 | 
			
		||||
interface StopWatchFactoryInterface
 | 
			
		||||
{
 | 
			
		||||
    public static function create(?ClockInterface $clock = null, ?int $initialStartTime = null): self;
 | 
			
		||||
 | 
			
		||||
    public static function fromClockFactory(ClockFactoryInterface $factory, ?int $initialStartTime = null): self;
 | 
			
		||||
 | 
			
		||||
    public function build(): StopWatchInterface;
 | 
			
		||||
 | 
			
		||||
    public static function getDefault(): StopWatchInterface;
 | 
			
		||||
 | 
			
		||||
    public static function setDefault(?StopWatchInterface $default): void;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,20 +0,0 @@
 | 
			
		|||
<?php
 | 
			
		||||
 | 
			
		||||
declare(strict_types=1);
 | 
			
		||||
 | 
			
		||||
namespace OpenTelemetry\SDK\Common\Time;
 | 
			
		||||
 | 
			
		||||
interface StopWatchInterface
 | 
			
		||||
{
 | 
			
		||||
    public function isRunning(): bool;
 | 
			
		||||
 | 
			
		||||
    public function start(): void;
 | 
			
		||||
 | 
			
		||||
    public function stop(): void;
 | 
			
		||||
 | 
			
		||||
    public function reset(): void;
 | 
			
		||||
 | 
			
		||||
    public function getElapsedTime(): int;
 | 
			
		||||
 | 
			
		||||
    public function getLastElapsedTime(): int;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,32 +0,0 @@
 | 
			
		|||
<?php
 | 
			
		||||
 | 
			
		||||
declare(strict_types=1);
 | 
			
		||||
 | 
			
		||||
namespace OpenTelemetry\SDK\Common\Time;
 | 
			
		||||
 | 
			
		||||
class Util
 | 
			
		||||
{
 | 
			
		||||
    /** @psalm-pure */
 | 
			
		||||
    public static function nanosToMicros(int $nanoseconds): int
 | 
			
		||||
    {
 | 
			
		||||
        return intdiv($nanoseconds, ClockInterface::NANOS_PER_MICROSECOND);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /** @psalm-pure */
 | 
			
		||||
    public static function nanosToMillis(int $nanoseconds): int
 | 
			
		||||
    {
 | 
			
		||||
        return intdiv($nanoseconds, ClockInterface::NANOS_PER_MILLISECOND);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /** @psalm-pure */
 | 
			
		||||
    public static function secondsToNanos(int $seconds): int
 | 
			
		||||
    {
 | 
			
		||||
        return $seconds * ClockInterface::NANOS_PER_SECOND;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /** @psalm-pure */
 | 
			
		||||
    public static function millisToNanos(int $milliSeconds): int
 | 
			
		||||
    {
 | 
			
		||||
        return $milliSeconds * ClockInterface::NANOS_PER_MILLISECOND;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -5,12 +5,12 @@ declare(strict_types=1);
 | 
			
		|||
namespace OpenTelemetry\SDK\Logs;
 | 
			
		||||
 | 
			
		||||
use InvalidArgumentException;
 | 
			
		||||
use OpenTelemetry\API\Common\Time\Clock;
 | 
			
		||||
use OpenTelemetry\API\Metrics\MeterProviderInterface;
 | 
			
		||||
use OpenTelemetry\SDK\Common\Configuration\Configuration;
 | 
			
		||||
use OpenTelemetry\SDK\Common\Configuration\KnownValues;
 | 
			
		||||
use OpenTelemetry\SDK\Common\Configuration\KnownValues as Values;
 | 
			
		||||
use OpenTelemetry\SDK\Common\Configuration\Variables;
 | 
			
		||||
use OpenTelemetry\SDK\Common\Time\ClockFactory;
 | 
			
		||||
use OpenTelemetry\SDK\Logs\Processor\BatchLogRecordProcessor;
 | 
			
		||||
use OpenTelemetry\SDK\Logs\Processor\MultiLogRecordProcessor;
 | 
			
		||||
use OpenTelemetry\SDK\Logs\Processor\NoopLogRecordProcessor;
 | 
			
		||||
| 
						 | 
				
			
			@ -38,7 +38,7 @@ class LogRecordProcessorFactory
 | 
			
		|||
        return match ($name) {
 | 
			
		||||
            KnownValues::VALUE_BATCH => new BatchLogRecordProcessor(
 | 
			
		||||
                $exporter,
 | 
			
		||||
                ClockFactory::getDefault(),
 | 
			
		||||
                Clock::getDefault(),
 | 
			
		||||
                Configuration::getInt(Variables::OTEL_BLRP_MAX_QUEUE_SIZE),
 | 
			
		||||
                Configuration::getInt(Variables::OTEL_BLRP_SCHEDULE_DELAY),
 | 
			
		||||
                Configuration::getInt(Variables::OTEL_BLRP_EXPORT_TIMEOUT),
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -6,12 +6,12 @@ namespace OpenTelemetry\SDK\Logs\Processor;
 | 
			
		|||
 | 
			
		||||
use InvalidArgumentException;
 | 
			
		||||
use OpenTelemetry\API\Behavior\LogsMessagesTrait;
 | 
			
		||||
use OpenTelemetry\API\Common\Time\ClockInterface;
 | 
			
		||||
use OpenTelemetry\API\Metrics\MeterProviderInterface;
 | 
			
		||||
use OpenTelemetry\API\Metrics\ObserverInterface;
 | 
			
		||||
use OpenTelemetry\Context\Context;
 | 
			
		||||
use OpenTelemetry\Context\ContextInterface;
 | 
			
		||||
use OpenTelemetry\SDK\Common\Future\CancellationInterface;
 | 
			
		||||
use OpenTelemetry\SDK\Common\Time\ClockInterface;
 | 
			
		||||
use OpenTelemetry\SDK\Logs\LogRecordExporterInterface;
 | 
			
		||||
use OpenTelemetry\SDK\Logs\LogRecordProcessorInterface;
 | 
			
		||||
use OpenTelemetry\SDK\Logs\ReadWriteLogRecord;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -9,6 +9,7 @@ use ArrayAccess;
 | 
			
		|||
use function assert;
 | 
			
		||||
use function is_callable;
 | 
			
		||||
use OpenTelemetry\API\Behavior\LogsMessagesTrait;
 | 
			
		||||
use OpenTelemetry\API\Common\Time\ClockInterface;
 | 
			
		||||
use OpenTelemetry\API\Metrics\AsynchronousInstrument;
 | 
			
		||||
use OpenTelemetry\API\Metrics\CounterInterface;
 | 
			
		||||
use OpenTelemetry\API\Metrics\GaugeInterface;
 | 
			
		||||
| 
						 | 
				
			
			@ -20,7 +21,6 @@ use OpenTelemetry\API\Metrics\ObservableGaugeInterface;
 | 
			
		|||
use OpenTelemetry\API\Metrics\ObservableUpDownCounterInterface;
 | 
			
		||||
use OpenTelemetry\API\Metrics\UpDownCounterInterface;
 | 
			
		||||
use OpenTelemetry\SDK\Common\Instrumentation\InstrumentationScopeInterface;
 | 
			
		||||
use OpenTelemetry\SDK\Common\Time\ClockInterface;
 | 
			
		||||
use function OpenTelemetry\SDK\Common\Util\closure;
 | 
			
		||||
use OpenTelemetry\SDK\Metrics\Exemplar\ExemplarFilterInterface;
 | 
			
		||||
use OpenTelemetry\SDK\Metrics\MetricRegistration\MultiRegistryRegistration;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -5,12 +5,12 @@ declare(strict_types=1);
 | 
			
		|||
namespace OpenTelemetry\SDK\Metrics;
 | 
			
		||||
 | 
			
		||||
use ArrayAccess;
 | 
			
		||||
use OpenTelemetry\API\Common\Time\ClockInterface;
 | 
			
		||||
use OpenTelemetry\API\Metrics\MeterInterface;
 | 
			
		||||
use OpenTelemetry\API\Metrics\Noop\NoopMeter;
 | 
			
		||||
use OpenTelemetry\Context\ContextStorageInterface;
 | 
			
		||||
use OpenTelemetry\SDK\Common\Attribute\AttributesFactoryInterface;
 | 
			
		||||
use OpenTelemetry\SDK\Common\Instrumentation\InstrumentationScopeFactoryInterface;
 | 
			
		||||
use OpenTelemetry\SDK\Common\Time\ClockInterface;
 | 
			
		||||
use OpenTelemetry\SDK\Metrics\Exemplar\ExemplarFilterInterface;
 | 
			
		||||
use OpenTelemetry\SDK\Metrics\MetricFactory\StreamFactory;
 | 
			
		||||
use OpenTelemetry\SDK\Metrics\MetricRegistry\MetricRegistry;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4,9 +4,9 @@ declare(strict_types=1);
 | 
			
		|||
 | 
			
		||||
namespace OpenTelemetry\SDK\Metrics;
 | 
			
		||||
 | 
			
		||||
use OpenTelemetry\API\Common\Time\Clock;
 | 
			
		||||
use OpenTelemetry\SDK\Common\Attribute\Attributes;
 | 
			
		||||
use OpenTelemetry\SDK\Common\Instrumentation\InstrumentationScopeFactory;
 | 
			
		||||
use OpenTelemetry\SDK\Common\Time\ClockFactory;
 | 
			
		||||
use OpenTelemetry\SDK\Metrics\Exemplar\ExemplarFilter\WithSampledTraceExemplarFilter;
 | 
			
		||||
use OpenTelemetry\SDK\Metrics\Exemplar\ExemplarFilterInterface;
 | 
			
		||||
use OpenTelemetry\SDK\Metrics\StalenessHandler\NoopStalenessHandlerFactory;
 | 
			
		||||
| 
						 | 
				
			
			@ -50,7 +50,7 @@ class MeterProviderBuilder
 | 
			
		|||
        return new MeterProvider(
 | 
			
		||||
            null,
 | 
			
		||||
            $this->resource ?? ResourceInfoFactory::emptyResource(),
 | 
			
		||||
            ClockFactory::getDefault(),
 | 
			
		||||
            Clock::getDefault(),
 | 
			
		||||
            Attributes::factory(),
 | 
			
		||||
            new InstrumentationScopeFactory(Attributes::factory()),
 | 
			
		||||
            $this->metricReaders,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -6,10 +6,10 @@ namespace OpenTelemetry\SDK\Metrics\MetricRegistry;
 | 
			
		|||
 | 
			
		||||
use function array_key_last;
 | 
			
		||||
use Closure;
 | 
			
		||||
use OpenTelemetry\API\Common\Time\ClockInterface;
 | 
			
		||||
use OpenTelemetry\Context\Context;
 | 
			
		||||
use OpenTelemetry\Context\ContextStorageInterface;
 | 
			
		||||
use OpenTelemetry\SDK\Common\Attribute\AttributesFactoryInterface;
 | 
			
		||||
use OpenTelemetry\SDK\Common\Time\ClockInterface;
 | 
			
		||||
use OpenTelemetry\SDK\Metrics\Instrument;
 | 
			
		||||
use OpenTelemetry\SDK\Metrics\Stream\MetricAggregatorFactoryInterface;
 | 
			
		||||
use OpenTelemetry\SDK\Metrics\Stream\MetricAggregatorInterface;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -5,7 +5,7 @@ declare(strict_types=1);
 | 
			
		|||
namespace OpenTelemetry\SDK\Metrics\StalenessHandler;
 | 
			
		||||
 | 
			
		||||
use Closure;
 | 
			
		||||
use OpenTelemetry\SDK\Common\Time\ClockInterface;
 | 
			
		||||
use OpenTelemetry\API\Common\Time\ClockInterface;
 | 
			
		||||
use OpenTelemetry\SDK\Metrics\ReferenceCounterInterface;
 | 
			
		||||
use OpenTelemetry\SDK\Metrics\StalenessHandlerFactoryInterface;
 | 
			
		||||
use OpenTelemetry\SDK\Metrics\StalenessHandlerInterface;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4,6 +4,7 @@ declare(strict_types=1);
 | 
			
		|||
 | 
			
		||||
namespace OpenTelemetry\SDK\Trace;
 | 
			
		||||
 | 
			
		||||
use OpenTelemetry\API\Common\Time\Clock;
 | 
			
		||||
use OpenTelemetry\API\Trace as API;
 | 
			
		||||
use OpenTelemetry\API\Trace\SpanContextInterface;
 | 
			
		||||
use OpenTelemetry\Context\ContextInterface;
 | 
			
		||||
| 
						 | 
				
			
			@ -11,7 +12,6 @@ use OpenTelemetry\SDK\Common\Attribute\AttributesBuilderInterface;
 | 
			
		|||
use OpenTelemetry\SDK\Common\Dev\Compatibility\Util as BcUtil;
 | 
			
		||||
use OpenTelemetry\SDK\Common\Exception\StackTraceFormatter;
 | 
			
		||||
use OpenTelemetry\SDK\Common\Instrumentation\InstrumentationScopeInterface;
 | 
			
		||||
use OpenTelemetry\SDK\Common\Time\ClockFactory;
 | 
			
		||||
use OpenTelemetry\SDK\Resource\ResourceInfo;
 | 
			
		||||
use Throwable;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -84,7 +84,7 @@ final class Span extends API\Span implements ReadWriteSpanInterface
 | 
			
		|||
            $attributesBuilder,
 | 
			
		||||
            $links,
 | 
			
		||||
            $totalRecordedLinks,
 | 
			
		||||
            $startEpochNanos !== 0 ? $startEpochNanos : ClockFactory::getDefault()->now()
 | 
			
		||||
            $startEpochNanos !== 0 ? $startEpochNanos : Clock::getDefault()->now()
 | 
			
		||||
        );
 | 
			
		||||
 | 
			
		||||
        // Call onStart here to ensure the span is fully initialized.
 | 
			
		||||
| 
						 | 
				
			
			@ -176,7 +176,7 @@ final class Span extends API\Span implements ReadWriteSpanInterface
 | 
			
		|||
            return $this;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        $timestamp ??= ClockFactory::getDefault()->now();
 | 
			
		||||
        $timestamp ??= Clock::getDefault()->now();
 | 
			
		||||
        $eventAttributesBuilder = $this->spanLimits->getEventAttributesFactory()->builder($attributes);
 | 
			
		||||
 | 
			
		||||
        $this->events[] = new Event($name, $timestamp, $eventAttributesBuilder->build());
 | 
			
		||||
| 
						 | 
				
			
			@ -194,7 +194,7 @@ final class Span extends API\Span implements ReadWriteSpanInterface
 | 
			
		|||
            return $this;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        $timestamp ??= ClockFactory::getDefault()->now();
 | 
			
		||||
        $timestamp ??= Clock::getDefault()->now();
 | 
			
		||||
        $eventAttributesBuilder = $this->spanLimits->getEventAttributesFactory()->builder([
 | 
			
		||||
            'exception.type' => $exception::class,
 | 
			
		||||
            'exception.message' => $exception->getMessage(),
 | 
			
		||||
| 
						 | 
				
			
			@ -249,7 +249,7 @@ final class Span extends API\Span implements ReadWriteSpanInterface
 | 
			
		|||
            return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        $this->endEpochNanos = $endEpochNanos ?? ClockFactory::getDefault()->now();
 | 
			
		||||
        $this->endEpochNanos = $endEpochNanos ?? Clock::getDefault()->now();
 | 
			
		||||
        $this->hasEnded = true;
 | 
			
		||||
 | 
			
		||||
        $this->spanProcessor->onEnd($this);
 | 
			
		||||
| 
						 | 
				
			
			@ -295,7 +295,7 @@ final class Span extends API\Span implements ReadWriteSpanInterface
 | 
			
		|||
    /** @inheritDoc */
 | 
			
		||||
    public function getDuration(): int
 | 
			
		||||
    {
 | 
			
		||||
        return ($this->hasEnded ? $this->endEpochNanos : ClockFactory::getDefault()->now()) - $this->startEpochNanos;
 | 
			
		||||
        return ($this->hasEnded ? $this->endEpochNanos : Clock::getDefault()->now()) - $this->startEpochNanos;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /** @inheritDoc */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -8,12 +8,12 @@ use function assert;
 | 
			
		|||
use function count;
 | 
			
		||||
use InvalidArgumentException;
 | 
			
		||||
use OpenTelemetry\API\Behavior\LogsMessagesTrait;
 | 
			
		||||
use OpenTelemetry\API\Common\Time\ClockInterface;
 | 
			
		||||
use OpenTelemetry\API\Metrics\MeterProviderInterface;
 | 
			
		||||
use OpenTelemetry\API\Metrics\ObserverInterface;
 | 
			
		||||
use OpenTelemetry\Context\Context;
 | 
			
		||||
use OpenTelemetry\Context\ContextInterface;
 | 
			
		||||
use OpenTelemetry\SDK\Common\Future\CancellationInterface;
 | 
			
		||||
use OpenTelemetry\SDK\Common\Time\ClockInterface;
 | 
			
		||||
use OpenTelemetry\SDK\Trace\ReadableSpanInterface;
 | 
			
		||||
use OpenTelemetry\SDK\Trace\ReadWriteSpanInterface;
 | 
			
		||||
use OpenTelemetry\SDK\Trace\SpanDataInterface;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4,7 +4,7 @@ declare(strict_types=1);
 | 
			
		|||
 | 
			
		||||
namespace OpenTelemetry\SDK\Trace\SpanProcessor;
 | 
			
		||||
 | 
			
		||||
use OpenTelemetry\SDK\Common\Time\ClockFactory;
 | 
			
		||||
use OpenTelemetry\API\Common\Time\Clock;
 | 
			
		||||
use OpenTelemetry\SDK\Metrics\MeterProviderInterface;
 | 
			
		||||
use OpenTelemetry\SDK\Trace\SpanExporterInterface;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -27,7 +27,7 @@ class BatchSpanProcessorBuilder
 | 
			
		|||
    {
 | 
			
		||||
        return new BatchSpanProcessor(
 | 
			
		||||
            $this->exporter,
 | 
			
		||||
            ClockFactory::getDefault(),
 | 
			
		||||
            Clock::getDefault(),
 | 
			
		||||
            BatchSpanProcessor::DEFAULT_MAX_QUEUE_SIZE,
 | 
			
		||||
            BatchSpanProcessor::DEFAULT_SCHEDULE_DELAY,
 | 
			
		||||
            BatchSpanProcessor::DEFAULT_EXPORT_TIMEOUT,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -5,10 +5,10 @@ declare(strict_types=1);
 | 
			
		|||
namespace OpenTelemetry\SDK\Trace;
 | 
			
		||||
 | 
			
		||||
use InvalidArgumentException;
 | 
			
		||||
use OpenTelemetry\API\Common\Time\Clock;
 | 
			
		||||
use OpenTelemetry\SDK\Common\Configuration\Configuration;
 | 
			
		||||
use OpenTelemetry\SDK\Common\Configuration\KnownValues as Values;
 | 
			
		||||
use OpenTelemetry\SDK\Common\Configuration\Variables as Env;
 | 
			
		||||
use OpenTelemetry\SDK\Common\Time\ClockFactory;
 | 
			
		||||
use OpenTelemetry\SDK\Metrics\MeterProviderInterface;
 | 
			
		||||
use OpenTelemetry\SDK\Metrics\NoopMeterProvider;
 | 
			
		||||
use OpenTelemetry\SDK\Trace\SpanProcessor\BatchSpanProcessor;
 | 
			
		||||
| 
						 | 
				
			
			@ -28,7 +28,7 @@ class SpanProcessorFactory
 | 
			
		|||
        return match ($name) {
 | 
			
		||||
            Values::VALUE_BATCH => new BatchSpanProcessor(
 | 
			
		||||
                $exporter,
 | 
			
		||||
                ClockFactory::getDefault(),
 | 
			
		||||
                Clock::getDefault(),
 | 
			
		||||
                Configuration::getInt(Env::OTEL_BSP_MAX_QUEUE_SIZE, BatchSpanProcessor::DEFAULT_MAX_QUEUE_SIZE),
 | 
			
		||||
                Configuration::getInt(Env::OTEL_BSP_SCHEDULE_DELAY, BatchSpanProcessor::DEFAULT_SCHEDULE_DELAY),
 | 
			
		||||
                Configuration::getInt(Env::OTEL_BSP_EXPORT_TIMEOUT, BatchSpanProcessor::DEFAULT_EXPORT_TIMEOUT),
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4,6 +4,7 @@ declare(strict_types=1);
 | 
			
		|||
 | 
			
		||||
namespace OpenTelemetry\Tests\Benchmark;
 | 
			
		||||
 | 
			
		||||
use OpenTelemetry\API\Common\Time\Clock;
 | 
			
		||||
use OpenTelemetry\API\Trace\TracerInterface;
 | 
			
		||||
use OpenTelemetry\Contrib\Otlp\SpanExporter;
 | 
			
		||||
use OpenTelemetry\SDK\Common\Attribute\Attributes;
 | 
			
		||||
| 
						 | 
				
			
			@ -11,7 +12,6 @@ use OpenTelemetry\SDK\Common\Export\TransportInterface;
 | 
			
		|||
use OpenTelemetry\SDK\Common\Future\CancellationInterface;
 | 
			
		||||
use OpenTelemetry\SDK\Common\Future\CompletedFuture;
 | 
			
		||||
use OpenTelemetry\SDK\Common\Future\FutureInterface;
 | 
			
		||||
use OpenTelemetry\SDK\Common\Time\ClockFactory;
 | 
			
		||||
use OpenTelemetry\SDK\Resource\ResourceInfo;
 | 
			
		||||
use OpenTelemetry\SDK\Trace\Sampler\AlwaysOnSampler;
 | 
			
		||||
use OpenTelemetry\SDK\Trace\SamplerInterface;
 | 
			
		||||
| 
						 | 
				
			
			@ -95,7 +95,7 @@ class OtlpBench
 | 
			
		|||
        $exporter = new SpanExporter($transport);
 | 
			
		||||
        $processor = $params[1] === self::SIMPLE
 | 
			
		||||
            ? new SimpleSpanProcessor($exporter)
 | 
			
		||||
            : new BatchSpanProcessor($exporter, ClockFactory::getDefault());
 | 
			
		||||
            : new BatchSpanProcessor($exporter, Clock::getDefault());
 | 
			
		||||
        $provider = new TracerProvider($processor, $this->sampler, $this->resource);
 | 
			
		||||
        $this->tracer = $provider->getTracer('io.opentelemetry.contrib.php');
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -5,13 +5,14 @@ declare(strict_types=1);
 | 
			
		|||
namespace OpenTelemetry\Tests\Integration\SDK;
 | 
			
		||||
 | 
			
		||||
use AssertWell\PHPUnitGlobalState\EnvironmentVariables;
 | 
			
		||||
use OpenTelemetry\API\Common\Time\ClockInterface;
 | 
			
		||||
use OpenTelemetry\API\Common\Time\TestClock;
 | 
			
		||||
use OpenTelemetry\API\Metrics as API;
 | 
			
		||||
use OpenTelemetry\API\Metrics\Noop\NoopMeter;
 | 
			
		||||
use OpenTelemetry\API\Metrics\ObserverInterface;
 | 
			
		||||
use OpenTelemetry\SDK\Common\Attribute\Attributes;
 | 
			
		||||
use OpenTelemetry\SDK\Common\Instrumentation\InstrumentationScope;
 | 
			
		||||
use OpenTelemetry\SDK\Common\Instrumentation\InstrumentationScopeFactory;
 | 
			
		||||
use OpenTelemetry\SDK\Common\Time\ClockInterface;
 | 
			
		||||
use OpenTelemetry\SDK\Metrics\Data\Metric;
 | 
			
		||||
use OpenTelemetry\SDK\Metrics\Data\NumberDataPoint;
 | 
			
		||||
use OpenTelemetry\SDK\Metrics\Data\Sum;
 | 
			
		||||
| 
						 | 
				
			
			@ -27,7 +28,6 @@ use OpenTelemetry\SDK\Metrics\MetricSourceRegistryInterface;
 | 
			
		|||
use OpenTelemetry\SDK\Metrics\StalenessHandler\ImmediateStalenessHandlerFactory;
 | 
			
		||||
use OpenTelemetry\SDK\Metrics\View\CriteriaViewRegistry;
 | 
			
		||||
use OpenTelemetry\SDK\Resource\ResourceInfoFactory;
 | 
			
		||||
use OpenTelemetry\Tests\Unit\SDK\Util\TestClock;
 | 
			
		||||
use PHPUnit\Framework\TestCase;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -6,9 +6,9 @@ require __DIR__ . '/trace-context-handler.php';
 | 
			
		|||
 | 
			
		||||
use Nyholm\Psr7\Request;
 | 
			
		||||
use Nyholm\Psr7\Response;
 | 
			
		||||
use OpenTelemetry\API\Common\Time\Clock;
 | 
			
		||||
use OpenTelemetry\Contrib\Zipkin\Exporter as ZipkinExporter;
 | 
			
		||||
use OpenTelemetry\SDK\Common\Export\Http\PsrTransportFactory;
 | 
			
		||||
use OpenTelemetry\SDK\Common\Time\ClockFactory;
 | 
			
		||||
use OpenTelemetry\SDK\Trace\SpanProcessor\BatchSpanProcessor;
 | 
			
		||||
use OpenTelemetry\SDK\Trace\TracerProvider;
 | 
			
		||||
use Psr\Http\Client\ClientExceptionInterface;
 | 
			
		||||
| 
						 | 
				
			
			@ -28,7 +28,7 @@ function main(): void
 | 
			
		|||
                new ZipkinExporter(
 | 
			
		||||
                    (new PsrTransportFactory())->create('http://zipkin:9412/api/v2/spans', 'application/json')
 | 
			
		||||
                ),
 | 
			
		||||
                ClockFactory::getDefault()
 | 
			
		||||
                Clock::getDefault()
 | 
			
		||||
            ),
 | 
			
		||||
        ],
 | 
			
		||||
    ))->getTracer('W3C Trace-Context Test Service');
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,40 @@
 | 
			
		|||
<?php
 | 
			
		||||
 | 
			
		||||
declare(strict_types=1);
 | 
			
		||||
 | 
			
		||||
namespace OpenTelemetry\Tests\Unit\API\Common\Time;
 | 
			
		||||
 | 
			
		||||
use OpenTelemetry\API\Common\Time\Clock;
 | 
			
		||||
use OpenTelemetry\API\Common\Time\ClockInterface;
 | 
			
		||||
use OpenTelemetry\API\Common\Time\SystemClock;
 | 
			
		||||
use PHPUnit\Framework\TestCase;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @covers \OpenTelemetry\API\Common\Time\Clock
 | 
			
		||||
 */
 | 
			
		||||
class ClockTest extends TestCase
 | 
			
		||||
{
 | 
			
		||||
    public function test_default_is_system_clock(): void
 | 
			
		||||
    {
 | 
			
		||||
        $this->assertInstanceOf(SystemClock::class, Clock::getDefault());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function test_default_is_settable(): void
 | 
			
		||||
    {
 | 
			
		||||
        $clock = $this->createMock(ClockInterface::class);
 | 
			
		||||
        Clock::setDefault($clock);
 | 
			
		||||
 | 
			
		||||
        $this->assertSame($clock, Clock::getDefault());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function test_default_is_resettable(): void
 | 
			
		||||
    {
 | 
			
		||||
        $clock = $this->createMock(ClockInterface::class);
 | 
			
		||||
        Clock::setDefault(
 | 
			
		||||
            $clock
 | 
			
		||||
        );
 | 
			
		||||
        Clock::reset();
 | 
			
		||||
 | 
			
		||||
        $this->assertNotSame($clock, Clock::getDefault());
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -2,14 +2,14 @@
 | 
			
		|||
 | 
			
		||||
declare(strict_types=1);
 | 
			
		||||
 | 
			
		||||
namespace OpenTelemetry\Tests\Unit\SDK\Common\Time;
 | 
			
		||||
namespace OpenTelemetry\Tests\Unit\API\Common\Time;
 | 
			
		||||
 | 
			
		||||
use DateTime;
 | 
			
		||||
use OpenTelemetry\SDK\Common\Time\SystemClock;
 | 
			
		||||
use OpenTelemetry\API\Common\Time\SystemClock;
 | 
			
		||||
use PHPUnit\Framework\TestCase;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @covers \OpenTelemetry\SDK\Common\Time\SystemClock
 | 
			
		||||
 * @covers \OpenTelemetry\API\Common\Time\SystemClock
 | 
			
		||||
 */
 | 
			
		||||
class SystemClockTest extends TestCase
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -4,6 +4,7 @@ declare(strict_types=1);
 | 
			
		|||
 | 
			
		||||
namespace OpenTelemetry\Tests\Unit\API\Trace;
 | 
			
		||||
 | 
			
		||||
use OpenTelemetry\API\Common\Time\TestClock;
 | 
			
		||||
use OpenTelemetry\API\Trace\NonRecordingSpan;
 | 
			
		||||
use OpenTelemetry\API\Trace\NoopSpanBuilder;
 | 
			
		||||
use OpenTelemetry\API\Trace\SpanContextInterface;
 | 
			
		||||
| 
						 | 
				
			
			@ -11,7 +12,6 @@ use OpenTelemetry\API\Trace\SpanInterface;
 | 
			
		|||
use OpenTelemetry\Context\Context;
 | 
			
		||||
use OpenTelemetry\Context\ContextKeys;
 | 
			
		||||
use OpenTelemetry\Context\ContextStorageInterface;
 | 
			
		||||
use OpenTelemetry\Tests\Unit\SDK\Util\TestClock;
 | 
			
		||||
use PHPUnit\Framework\TestCase;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,45 +0,0 @@
 | 
			
		|||
<?php
 | 
			
		||||
 | 
			
		||||
declare(strict_types=1);
 | 
			
		||||
 | 
			
		||||
namespace OpenTelemetry\Tests\Unit\SDK\Common\Time;
 | 
			
		||||
 | 
			
		||||
use OpenTelemetry\SDK\Common\Time\ClockFactory;
 | 
			
		||||
use OpenTelemetry\SDK\Common\Time\ClockInterface;
 | 
			
		||||
use OpenTelemetry\SDK\Common\Time\SystemClock;
 | 
			
		||||
use PHPUnit\Framework\TestCase;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @covers \OpenTelemetry\SDK\Common\Time\ClockFactory
 | 
			
		||||
 */
 | 
			
		||||
class ClockFactoryTest extends TestCase
 | 
			
		||||
{
 | 
			
		||||
    public function test_build(): void
 | 
			
		||||
    {
 | 
			
		||||
        $this->assertInstanceOf(SystemClock::class, ClockFactory::create()->build());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function test_default_is_system_clock(): void
 | 
			
		||||
    {
 | 
			
		||||
        $this->assertInstanceOf(SystemClock::class, ClockFactory::getDefault());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function test_default_is_settable(): void
 | 
			
		||||
    {
 | 
			
		||||
        $clock = $this->createMock(ClockInterface::class);
 | 
			
		||||
        ClockFactory::setDefault($clock);
 | 
			
		||||
 | 
			
		||||
        $this->assertSame($clock, ClockFactory::getDefault());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function test_default_is_resettable(): void
 | 
			
		||||
    {
 | 
			
		||||
        $clock = $this->createMock(ClockInterface::class);
 | 
			
		||||
        ClockFactory::setDefault(
 | 
			
		||||
            $clock
 | 
			
		||||
        );
 | 
			
		||||
        ClockFactory::setDefault(null);
 | 
			
		||||
 | 
			
		||||
        $this->assertNotSame($clock, ClockFactory::getDefault());
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,49 +0,0 @@
 | 
			
		|||
<?php
 | 
			
		||||
 | 
			
		||||
declare(strict_types=1);
 | 
			
		||||
 | 
			
		||||
namespace OpenTelemetry\Tests\Unit\SDK\Common\Time;
 | 
			
		||||
 | 
			
		||||
use OpenTelemetry\SDK\Common\Time\ClockFactoryInterface;
 | 
			
		||||
use OpenTelemetry\SDK\Common\Time\StopWatch;
 | 
			
		||||
use OpenTelemetry\SDK\Common\Time\StopWatchFactory;
 | 
			
		||||
use OpenTelemetry\SDK\Common\Time\StopWatchInterface;
 | 
			
		||||
use PHPUnit\Framework\TestCase;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @covers \OpenTelemetry\SDK\Common\Time\StopWatchFactory
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
class StopWatchFactoryTest extends TestCase
 | 
			
		||||
{
 | 
			
		||||
    public function test_from_clock_factory(): void
 | 
			
		||||
    {
 | 
			
		||||
        $clockFactory = $this->createMock(ClockFactoryInterface::class);
 | 
			
		||||
        $clockFactory->expects($this->once())->method('build');
 | 
			
		||||
 | 
			
		||||
        StopWatchFactory::fromClockFactory($clockFactory);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function test_default_is_system_clock(): void
 | 
			
		||||
    {
 | 
			
		||||
        $this->assertInstanceOf(StopWatch::class, StopWatchFactory::getDefault());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function test_default_is_settable(): void
 | 
			
		||||
    {
 | 
			
		||||
        $stopwatch = $this->createMock(StopWatchInterface::class);
 | 
			
		||||
        StopWatchFactory::setDefault($stopwatch);
 | 
			
		||||
 | 
			
		||||
        $this->assertSame($stopwatch, StopWatchFactory::getDefault());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function test_default_is_resettable(): void
 | 
			
		||||
    {
 | 
			
		||||
        StopWatchFactory::setDefault(
 | 
			
		||||
            $this->createMock(StopWatchInterface::class)
 | 
			
		||||
        );
 | 
			
		||||
        StopWatchFactory::setDefault(null);
 | 
			
		||||
 | 
			
		||||
        $this->assertInstanceOf(StopWatch::class, StopWatchFactory::getDefault());
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,231 +0,0 @@
 | 
			
		|||
<?php
 | 
			
		||||
 | 
			
		||||
declare(strict_types=1);
 | 
			
		||||
 | 
			
		||||
namespace OpenTelemetry\Tests\Unit\SDK\Common\Time;
 | 
			
		||||
 | 
			
		||||
use OpenTelemetry\SDK\Common\Time\StopWatch;
 | 
			
		||||
use OpenTelemetry\Tests\Unit\SDK\Util\TestClock;
 | 
			
		||||
use PHPUnit\Framework\TestCase;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @covers \OpenTelemetry\SDK\Common\Time\StopWatch
 | 
			
		||||
 */
 | 
			
		||||
class StopWatchTest extends TestCase
 | 
			
		||||
{
 | 
			
		||||
    private StopWatch $stopwatch;
 | 
			
		||||
    private TestClock $testClock;
 | 
			
		||||
 | 
			
		||||
    public function setUp(): void
 | 
			
		||||
    {
 | 
			
		||||
        $this->init();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private function init(?int $initialStartTime = null): void
 | 
			
		||||
    {
 | 
			
		||||
        $this->stopwatch = new StopWatch(
 | 
			
		||||
            $this->testClock = new TestClock(),
 | 
			
		||||
            $initialStartTime
 | 
			
		||||
        );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function test_is_not_running_initially(): void
 | 
			
		||||
    {
 | 
			
		||||
        $this->assertFalse($this->stopwatch->isRunning());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function test_start(): void
 | 
			
		||||
    {
 | 
			
		||||
        $this->stopwatch->start();
 | 
			
		||||
 | 
			
		||||
        $this->assertTrue($this->stopwatch->isRunning());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function test_restart(): void
 | 
			
		||||
    {
 | 
			
		||||
        $this->stopwatch->start();
 | 
			
		||||
        $this->stopwatch->stop();
 | 
			
		||||
        $this->stopwatch->start();
 | 
			
		||||
 | 
			
		||||
        $this->assertTrue($this->stopwatch->isRunning());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function test_stop(): void
 | 
			
		||||
    {
 | 
			
		||||
        $this->stopwatch->start();
 | 
			
		||||
        $this->stopwatch->stop();
 | 
			
		||||
        $this->assertFalse($this->stopwatch->isRunning());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function test_stop_without_start(): void
 | 
			
		||||
    {
 | 
			
		||||
        $this->stopwatch->stop();
 | 
			
		||||
 | 
			
		||||
        $this->assertFalse($this->stopwatch->isRunning());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function test_get_elapsed_time_initially(): void
 | 
			
		||||
    {
 | 
			
		||||
        $this->assertSame(0, $this->stopwatch->getElapsedTime());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function test_get_elapsed_time_started(): void
 | 
			
		||||
    {
 | 
			
		||||
        $elapsed = 500;
 | 
			
		||||
 | 
			
		||||
        $this->stopwatch->start();
 | 
			
		||||
        $this->testClock->advance($elapsed);
 | 
			
		||||
 | 
			
		||||
        $this->assertSame($elapsed, $this->stopwatch->getElapsedTime());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function test_get_elapsed_time_started_twice(): void
 | 
			
		||||
    {
 | 
			
		||||
        $elapsed = 500;
 | 
			
		||||
 | 
			
		||||
        $this->stopwatch->start();
 | 
			
		||||
        $this->testClock->advance($elapsed);
 | 
			
		||||
        $this->stopwatch->start();
 | 
			
		||||
        $this->testClock->advance($elapsed);
 | 
			
		||||
 | 
			
		||||
        $this->assertSame($elapsed * 2, $this->stopwatch->getElapsedTime());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function test_get_elapsed_time_stopped(): void
 | 
			
		||||
    {
 | 
			
		||||
        $elapsed = 500;
 | 
			
		||||
 | 
			
		||||
        $this->stopwatch->start();
 | 
			
		||||
        $this->testClock->advance($elapsed);
 | 
			
		||||
        $this->stopwatch->stop();
 | 
			
		||||
        $this->testClock->advance($elapsed);
 | 
			
		||||
 | 
			
		||||
        $this->assertSame($elapsed, $this->stopwatch->getElapsedTime());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function test_get_elapsed_time_stopped_twice(): void
 | 
			
		||||
    {
 | 
			
		||||
        $elapsed = 500;
 | 
			
		||||
 | 
			
		||||
        $this->stopwatch->start();
 | 
			
		||||
        $this->testClock->advance($elapsed);
 | 
			
		||||
        $this->stopwatch->stop();
 | 
			
		||||
        $this->testClock->advance($elapsed);
 | 
			
		||||
        $this->stopwatch->stop();
 | 
			
		||||
 | 
			
		||||
        $this->assertSame($elapsed, $this->stopwatch->getElapsedTime());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function test_get_elapsed_time_with_initial_start_time(): void
 | 
			
		||||
    {
 | 
			
		||||
        $elapsed = 500;
 | 
			
		||||
        $this->init(TestClock::DEFAULT_START_EPOCH - $elapsed);
 | 
			
		||||
 | 
			
		||||
        $this->stopwatch->start();
 | 
			
		||||
        $this->testClock->advance($elapsed);
 | 
			
		||||
 | 
			
		||||
        $this->assertSame($elapsed * 2, $this->stopwatch->getElapsedTime());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function test_get_last_elapsed_time_initially(): void
 | 
			
		||||
    {
 | 
			
		||||
        $this->assertSame(0, $this->stopwatch->getLastElapsedTime());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function test_get_last_elapsed_time_started(): void
 | 
			
		||||
    {
 | 
			
		||||
        $elapsed = 500;
 | 
			
		||||
 | 
			
		||||
        $this->stopwatch->start();
 | 
			
		||||
        $this->testClock->advance($elapsed);
 | 
			
		||||
 | 
			
		||||
        $this->assertSame($elapsed, $this->stopwatch->getLastElapsedTime());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function test_get_last_elapsed_time_started_twice(): void
 | 
			
		||||
    {
 | 
			
		||||
        $elapsed = 500;
 | 
			
		||||
 | 
			
		||||
        $this->stopwatch->start();
 | 
			
		||||
        $this->testClock->advance($elapsed);
 | 
			
		||||
        $this->stopwatch->start();
 | 
			
		||||
        $this->testClock->advance($elapsed);
 | 
			
		||||
 | 
			
		||||
        $this->assertSame($elapsed * 2, $this->stopwatch->getLastElapsedTime());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function test_get_last_elapsed_time_restarted(): void
 | 
			
		||||
    {
 | 
			
		||||
        $elapsed = 500;
 | 
			
		||||
 | 
			
		||||
        $this->stopwatch->start();
 | 
			
		||||
        $this->testClock->advance($elapsed);
 | 
			
		||||
        $this->stopwatch->stop();
 | 
			
		||||
        $this->testClock->advance($elapsed);
 | 
			
		||||
        $this->stopwatch->start();
 | 
			
		||||
        $this->testClock->advance($elapsed);
 | 
			
		||||
 | 
			
		||||
        $this->assertSame($elapsed, $this->stopwatch->getLastElapsedTime());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function test_get_last_elapsed_time_stopped(): void
 | 
			
		||||
    {
 | 
			
		||||
        $elapsed = 500;
 | 
			
		||||
 | 
			
		||||
        $this->stopwatch->start();
 | 
			
		||||
        $this->testClock->advance($elapsed);
 | 
			
		||||
        $this->stopwatch->stop();
 | 
			
		||||
        $this->testClock->advance($elapsed);
 | 
			
		||||
 | 
			
		||||
        $this->assertSame($elapsed, $this->stopwatch->getLastElapsedTime());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function test_get_last_elapsed_time_stopped_twice(): void
 | 
			
		||||
    {
 | 
			
		||||
        $elapsed = 500;
 | 
			
		||||
 | 
			
		||||
        $this->stopwatch->start();
 | 
			
		||||
        $this->testClock->advance($elapsed);
 | 
			
		||||
        $this->stopwatch->stop();
 | 
			
		||||
        $this->testClock->advance($elapsed);
 | 
			
		||||
        $this->stopwatch->stop();
 | 
			
		||||
 | 
			
		||||
        $this->assertSame($elapsed, $this->stopwatch->getLastElapsedTime());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function test_reset_initially(): void
 | 
			
		||||
    {
 | 
			
		||||
        $this->stopwatch->reset();
 | 
			
		||||
        $this->testClock->advance(500);
 | 
			
		||||
 | 
			
		||||
        $this->assertSame(0, $this->stopwatch->getElapsedTime());
 | 
			
		||||
        $this->assertSame(0, $this->stopwatch->getLastElapsedTime());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function test_reset_started(): void
 | 
			
		||||
    {
 | 
			
		||||
        $elapsed = 500;
 | 
			
		||||
 | 
			
		||||
        $this->stopwatch->start();
 | 
			
		||||
        $this->testClock->advance($elapsed);
 | 
			
		||||
        $this->stopwatch->reset();
 | 
			
		||||
        $this->testClock->advance($elapsed);
 | 
			
		||||
 | 
			
		||||
        $this->assertSame($elapsed, $this->stopwatch->getElapsedTime());
 | 
			
		||||
        $this->assertSame($elapsed, $this->stopwatch->getLastElapsedTime());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function test_reset_stopped(): void
 | 
			
		||||
    {
 | 
			
		||||
        $elapsed = 500;
 | 
			
		||||
 | 
			
		||||
        $this->stopwatch->start();
 | 
			
		||||
        $this->testClock->advance($elapsed);
 | 
			
		||||
        $this->stopwatch->stop();
 | 
			
		||||
        $this->stopwatch->reset();
 | 
			
		||||
        $this->testClock->advance($elapsed);
 | 
			
		||||
 | 
			
		||||
        $this->assertSame(0, $this->stopwatch->getElapsedTime());
 | 
			
		||||
        $this->assertSame(0, $this->stopwatch->getLastElapsedTime());
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,34 +0,0 @@
 | 
			
		|||
<?php
 | 
			
		||||
 | 
			
		||||
declare(strict_types=1);
 | 
			
		||||
 | 
			
		||||
namespace OpenTelemetry\Tests\Unit\SDK\Common\Time;
 | 
			
		||||
 | 
			
		||||
use OpenTelemetry\SDK\Common\Time\Util;
 | 
			
		||||
use PHPUnit\Framework\TestCase;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @covers \OpenTelemetry\SDK\Common\Time\Util
 | 
			
		||||
 */
 | 
			
		||||
class UtilTest extends TestCase
 | 
			
		||||
{
 | 
			
		||||
    public function test_nanos_to_micro(): void
 | 
			
		||||
    {
 | 
			
		||||
        $this->assertEquals(1, Util::nanosToMicros((int) 1e3));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function test_nanos_to_milli(): void
 | 
			
		||||
    {
 | 
			
		||||
        $this->assertEquals(1, Util::nanosToMillis((int) 1e6));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function test_seconds_to_nanos(): void
 | 
			
		||||
    {
 | 
			
		||||
        $this->assertEquals((int) 1e9, Util::secondsToNanos(1));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function test_millis_to_nanos(): void
 | 
			
		||||
    {
 | 
			
		||||
        $this->assertEquals((int) 1e6, Util::millisToNanos(1));
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -10,12 +10,13 @@ use Mockery;
 | 
			
		|||
use Mockery\Adapter\Phpunit\MockeryTestCase;
 | 
			
		||||
use OpenTelemetry\API\Behavior\Internal\Logging;
 | 
			
		||||
use OpenTelemetry\API\Behavior\Internal\LogWriter\LogWriterInterface;
 | 
			
		||||
use OpenTelemetry\API\Common\Time\Clock;
 | 
			
		||||
use OpenTelemetry\API\Common\Time\ClockInterface;
 | 
			
		||||
use OpenTelemetry\API\Common\Time\TestClock;
 | 
			
		||||
use OpenTelemetry\Context\Context;
 | 
			
		||||
use OpenTelemetry\SDK\Common\Attribute\Attributes;
 | 
			
		||||
use OpenTelemetry\SDK\Common\Future\CompletedFuture;
 | 
			
		||||
use OpenTelemetry\SDK\Common\Instrumentation\InstrumentationScopeFactory;
 | 
			
		||||
use OpenTelemetry\SDK\Common\Time\ClockFactory;
 | 
			
		||||
use OpenTelemetry\SDK\Common\Time\ClockInterface;
 | 
			
		||||
use OpenTelemetry\SDK\Logs\LogRecordExporterInterface;
 | 
			
		||||
use OpenTelemetry\SDK\Logs\LogRecordProcessorInterface;
 | 
			
		||||
use OpenTelemetry\SDK\Logs\Processor\BatchLogRecordProcessor;
 | 
			
		||||
| 
						 | 
				
			
			@ -26,7 +27,6 @@ use OpenTelemetry\SDK\Metrics\MetricReader\ExportingReader;
 | 
			
		|||
use OpenTelemetry\SDK\Metrics\StalenessHandler\ImmediateStalenessHandlerFactory;
 | 
			
		||||
use OpenTelemetry\SDK\Metrics\View\CriteriaViewRegistry;
 | 
			
		||||
use OpenTelemetry\SDK\Resource\ResourceInfoFactory;
 | 
			
		||||
use OpenTelemetry\Tests\Unit\SDK\Util\TestClock;
 | 
			
		||||
use PHPUnit\Framework\MockObject\MockObject;
 | 
			
		||||
use Psr\Log\LogLevel;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -45,12 +45,12 @@ class BatchLogRecordProcessorTest extends MockeryTestCase
 | 
			
		|||
        Logging::setLogWriter($this->logWriter);
 | 
			
		||||
        $this->testClock = new TestClock();
 | 
			
		||||
 | 
			
		||||
        ClockFactory::setDefault($this->testClock);
 | 
			
		||||
        Clock::setDefault($this->testClock);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    protected function tearDown(): void
 | 
			
		||||
    {
 | 
			
		||||
        ClockFactory::setDefault(null);
 | 
			
		||||
        Clock::reset();
 | 
			
		||||
        Logging::reset();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -427,7 +427,7 @@ class BatchLogRecordProcessorTest extends MockeryTestCase
 | 
			
		|||
 | 
			
		||||
        $processor = new BatchLogRecordProcessor(
 | 
			
		||||
            $exporter,
 | 
			
		||||
            ClockFactory::getDefault(),
 | 
			
		||||
            Clock::getDefault(),
 | 
			
		||||
            2048,
 | 
			
		||||
            5000,
 | 
			
		||||
            30000,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4,6 +4,7 @@ declare(strict_types=1);
 | 
			
		|||
 | 
			
		||||
namespace OpenTelemetry\Tests\Unit\SDK\Metrics;
 | 
			
		||||
 | 
			
		||||
use OpenTelemetry\API\Common\Time\TestClock;
 | 
			
		||||
use OpenTelemetry\API\Metrics\ObserverInterface;
 | 
			
		||||
use OpenTelemetry\SDK\Common\Attribute\Attributes;
 | 
			
		||||
use OpenTelemetry\SDK\Metrics\Aggregation\ExplicitBucketHistogramAggregation;
 | 
			
		||||
| 
						 | 
				
			
			@ -25,7 +26,6 @@ use OpenTelemetry\SDK\Metrics\Stream\MetricAggregator;
 | 
			
		|||
use OpenTelemetry\SDK\Metrics\Stream\MetricAggregatorFactory;
 | 
			
		||||
use OpenTelemetry\SDK\Metrics\Stream\SynchronousMetricStream;
 | 
			
		||||
use OpenTelemetry\SDK\Metrics\UpDownCounter;
 | 
			
		||||
use OpenTelemetry\Tests\Unit\SDK\Util\TestClock;
 | 
			
		||||
use PHPUnit\Framework\TestCase;
 | 
			
		||||
use stdClass;
 | 
			
		||||
use WeakMap;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4,12 +4,12 @@ declare(strict_types=1);
 | 
			
		|||
 | 
			
		||||
namespace OpenTelemetry\Tests\Unit\SDK\Metrics;
 | 
			
		||||
 | 
			
		||||
use OpenTelemetry\API\Common\Time\Clock;
 | 
			
		||||
use OpenTelemetry\API\Metrics\Noop\NoopMeter;
 | 
			
		||||
use OpenTelemetry\SDK\Common\Attribute\Attributes;
 | 
			
		||||
use OpenTelemetry\SDK\Common\Instrumentation\InstrumentationScope;
 | 
			
		||||
use OpenTelemetry\SDK\Common\Instrumentation\InstrumentationScopeFactory;
 | 
			
		||||
use OpenTelemetry\SDK\Common\Instrumentation\InstrumentationScopeFactoryInterface;
 | 
			
		||||
use OpenTelemetry\SDK\Common\Time\ClockFactory;
 | 
			
		||||
use OpenTelemetry\SDK\Metrics\DefaultAggregationProviderInterface;
 | 
			
		||||
use OpenTelemetry\SDK\Metrics\MeterProvider;
 | 
			
		||||
use OpenTelemetry\SDK\Metrics\MetricReaderInterface;
 | 
			
		||||
| 
						 | 
				
			
			@ -39,7 +39,7 @@ final class MeterProviderTest extends TestCase
 | 
			
		|||
        $meterProvider = new MeterProvider(
 | 
			
		||||
            null,
 | 
			
		||||
            ResourceInfoFactory::emptyResource(),
 | 
			
		||||
            ClockFactory::getDefault(),
 | 
			
		||||
            Clock::getDefault(),
 | 
			
		||||
            Attributes::factory(),
 | 
			
		||||
            $instrumentationScopeFactory,
 | 
			
		||||
            [],
 | 
			
		||||
| 
						 | 
				
			
			@ -55,7 +55,7 @@ final class MeterProviderTest extends TestCase
 | 
			
		|||
        $meterProvider = new MeterProvider(
 | 
			
		||||
            null,
 | 
			
		||||
            ResourceInfoFactory::emptyResource(),
 | 
			
		||||
            ClockFactory::getDefault(),
 | 
			
		||||
            Clock::getDefault(),
 | 
			
		||||
            Attributes::factory(),
 | 
			
		||||
            new InstrumentationScopeFactory(Attributes::factory()),
 | 
			
		||||
            [],
 | 
			
		||||
| 
						 | 
				
			
			@ -76,7 +76,7 @@ final class MeterProviderTest extends TestCase
 | 
			
		|||
        $meterProvider = new MeterProvider(
 | 
			
		||||
            null,
 | 
			
		||||
            ResourceInfoFactory::emptyResource(),
 | 
			
		||||
            ClockFactory::getDefault(),
 | 
			
		||||
            Clock::getDefault(),
 | 
			
		||||
            Attributes::factory(),
 | 
			
		||||
            new InstrumentationScopeFactory(Attributes::factory()),
 | 
			
		||||
            [$metricReader],
 | 
			
		||||
| 
						 | 
				
			
			@ -95,7 +95,7 @@ final class MeterProviderTest extends TestCase
 | 
			
		|||
        $meterProvider = new MeterProvider(
 | 
			
		||||
            null,
 | 
			
		||||
            ResourceInfoFactory::emptyResource(),
 | 
			
		||||
            ClockFactory::getDefault(),
 | 
			
		||||
            Clock::getDefault(),
 | 
			
		||||
            Attributes::factory(),
 | 
			
		||||
            new InstrumentationScopeFactory(Attributes::factory()),
 | 
			
		||||
            [$metricReader],
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -5,10 +5,10 @@ declare(strict_types=1);
 | 
			
		|||
namespace OpenTelemetry\Tests\Unit\SDK\Metrics;
 | 
			
		||||
 | 
			
		||||
use function func_get_arg;
 | 
			
		||||
use OpenTelemetry\API\Common\Time\Clock;
 | 
			
		||||
use OpenTelemetry\SDK\Common\Attribute\Attributes;
 | 
			
		||||
use OpenTelemetry\SDK\Common\Instrumentation\InstrumentationScope;
 | 
			
		||||
use OpenTelemetry\SDK\Common\Instrumentation\InstrumentationScopeFactory;
 | 
			
		||||
use OpenTelemetry\SDK\Common\Time\ClockFactory;
 | 
			
		||||
use OpenTelemetry\SDK\Metrics\AggregationInterface;
 | 
			
		||||
use OpenTelemetry\SDK\Metrics\DefaultAggregationProviderInterface;
 | 
			
		||||
use OpenTelemetry\SDK\Metrics\Instrument;
 | 
			
		||||
| 
						 | 
				
			
			@ -381,7 +381,7 @@ final class MeterTest extends TestCase
 | 
			
		|||
        return new MeterProvider(
 | 
			
		||||
            null,
 | 
			
		||||
            ResourceInfoFactory::emptyResource(),
 | 
			
		||||
            ClockFactory::getDefault(),
 | 
			
		||||
            Clock::getDefault(),
 | 
			
		||||
            Attributes::factory(),
 | 
			
		||||
            new InstrumentationScopeFactory(Attributes::factory()),
 | 
			
		||||
            $metricReaders,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -5,6 +5,7 @@ declare(strict_types=1);
 | 
			
		|||
namespace OpenTelemetry\Tests\Unit\SDK\Metrics\MetricFactory;
 | 
			
		||||
 | 
			
		||||
use function func_get_args;
 | 
			
		||||
use OpenTelemetry\API\Common\Time\TestClock;
 | 
			
		||||
use OpenTelemetry\API\Metrics\ObserverInterface;
 | 
			
		||||
use OpenTelemetry\SDK\Common\Attribute\Attributes;
 | 
			
		||||
use OpenTelemetry\SDK\Common\Instrumentation\InstrumentationScope;
 | 
			
		||||
| 
						 | 
				
			
			@ -26,7 +27,6 @@ use OpenTelemetry\SDK\Metrics\StalenessHandler\NoopStalenessHandler;
 | 
			
		|||
use OpenTelemetry\SDK\Metrics\StalenessHandlerInterface;
 | 
			
		||||
use OpenTelemetry\SDK\Metrics\ViewProjection;
 | 
			
		||||
use OpenTelemetry\SDK\Resource\ResourceInfoFactory;
 | 
			
		||||
use OpenTelemetry\Tests\Unit\SDK\Util\TestClock;
 | 
			
		||||
use PHPUnit\Framework\TestCase;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4,6 +4,7 @@ declare(strict_types=1);
 | 
			
		|||
 | 
			
		||||
namespace OpenTelemetry\Tests\Unit\SDK\Metrics\MetricRegistry;
 | 
			
		||||
 | 
			
		||||
use OpenTelemetry\API\Common\Time\TestClock;
 | 
			
		||||
use OpenTelemetry\API\Metrics\ObserverInterface;
 | 
			
		||||
use OpenTelemetry\SDK\Common\Attribute\Attributes;
 | 
			
		||||
use OpenTelemetry\SDK\Metrics\Aggregation\SumAggregation;
 | 
			
		||||
| 
						 | 
				
			
			@ -17,7 +18,6 @@ use OpenTelemetry\SDK\Metrics\Stream\AsynchronousMetricStream;
 | 
			
		|||
use OpenTelemetry\SDK\Metrics\Stream\MetricAggregator;
 | 
			
		||||
use OpenTelemetry\SDK\Metrics\Stream\MetricAggregatorFactory;
 | 
			
		||||
use OpenTelemetry\SDK\Metrics\Stream\SynchronousMetricStream;
 | 
			
		||||
use OpenTelemetry\Tests\Unit\SDK\Util\TestClock;
 | 
			
		||||
use PHPUnit\Framework\TestCase;
 | 
			
		||||
use function printf;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4,8 +4,8 @@ declare(strict_types=1);
 | 
			
		|||
 | 
			
		||||
namespace OpenTelemetry\Tests\Unit\SDK\Metrics\StalenessHandler;
 | 
			
		||||
 | 
			
		||||
use OpenTelemetry\API\Common\Time\TestClock;
 | 
			
		||||
use OpenTelemetry\SDK\Metrics\StalenessHandler\DelayedStalenessHandlerFactory;
 | 
			
		||||
use OpenTelemetry\Tests\Unit\SDK\Util\TestClock;
 | 
			
		||||
use PHPUnit\Framework\TestCase;
 | 
			
		||||
use stdClass;
 | 
			
		||||
use WeakReference;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4,9 +4,9 @@ declare(strict_types=1);
 | 
			
		|||
 | 
			
		||||
namespace OpenTelemetry\Tests\Unit\SDK\Trace;
 | 
			
		||||
 | 
			
		||||
use OpenTelemetry\API\Common\Time\TestClock;
 | 
			
		||||
use OpenTelemetry\SDK\Common\Attribute\AttributesInterface;
 | 
			
		||||
use OpenTelemetry\SDK\Trace\Event;
 | 
			
		||||
use OpenTelemetry\Tests\Unit\SDK\Util\TestClock;
 | 
			
		||||
use PHPUnit\Framework\TestCase;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -11,13 +11,14 @@ use Mockery;
 | 
			
		|||
use Mockery\Adapter\Phpunit\MockeryTestCase;
 | 
			
		||||
use OpenTelemetry\API\Behavior\Internal\Logging;
 | 
			
		||||
use OpenTelemetry\API\Behavior\Internal\LogWriter\LogWriterInterface;
 | 
			
		||||
use OpenTelemetry\API\Common\Time\Clock;
 | 
			
		||||
use OpenTelemetry\API\Common\Time\ClockInterface;
 | 
			
		||||
use OpenTelemetry\API\Common\Time\TestClock;
 | 
			
		||||
use OpenTelemetry\API\Trace as API;
 | 
			
		||||
use OpenTelemetry\Context\Context;
 | 
			
		||||
use OpenTelemetry\SDK\Common\Attribute\Attributes;
 | 
			
		||||
use OpenTelemetry\SDK\Common\Future\CompletedFuture;
 | 
			
		||||
use OpenTelemetry\SDK\Common\Instrumentation\InstrumentationScopeFactory;
 | 
			
		||||
use OpenTelemetry\SDK\Common\Time\ClockFactory;
 | 
			
		||||
use OpenTelemetry\SDK\Common\Time\ClockInterface;
 | 
			
		||||
use OpenTelemetry\SDK\Metrics\MeterProvider;
 | 
			
		||||
use OpenTelemetry\SDK\Metrics\MetricExporter\InMemoryExporter;
 | 
			
		||||
use OpenTelemetry\SDK\Metrics\MetricReader\ExportingReader;
 | 
			
		||||
| 
						 | 
				
			
			@ -30,7 +31,6 @@ 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 PHPUnit\Framework\MockObject\MockObject;
 | 
			
		||||
use Psr\Log\LogLevel;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -49,12 +49,12 @@ class BatchSpanProcessorTest extends MockeryTestCase
 | 
			
		|||
        Logging::setLogWriter($this->logWriter);
 | 
			
		||||
        $this->testClock = new TestClock();
 | 
			
		||||
 | 
			
		||||
        ClockFactory::setDefault($this->testClock);
 | 
			
		||||
        Clock::setDefault($this->testClock);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    protected function tearDown(): void
 | 
			
		||||
    {
 | 
			
		||||
        ClockFactory::setDefault(null);
 | 
			
		||||
        Clock::reset();
 | 
			
		||||
        Logging::reset();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -485,7 +485,7 @@ class BatchSpanProcessorTest extends MockeryTestCase
 | 
			
		|||
 | 
			
		||||
        $processor = new BatchSpanProcessor(
 | 
			
		||||
            $exporter,
 | 
			
		||||
            ClockFactory::getDefault(),
 | 
			
		||||
            Clock::getDefault(),
 | 
			
		||||
            2048,
 | 
			
		||||
            5000,
 | 
			
		||||
            30000,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -11,6 +11,9 @@ use Mockery\Adapter\Phpunit\MockeryTestCase;
 | 
			
		|||
use Mockery\MockInterface;
 | 
			
		||||
use OpenTelemetry\API\Behavior\Internal\Logging;
 | 
			
		||||
use OpenTelemetry\API\Behavior\Internal\LogWriter\LogWriterInterface;
 | 
			
		||||
use OpenTelemetry\API\Common\Time\Clock;
 | 
			
		||||
use OpenTelemetry\API\Common\Time\ClockInterface;
 | 
			
		||||
use OpenTelemetry\API\Common\Time\TestClock;
 | 
			
		||||
use OpenTelemetry\API\Trace as API;
 | 
			
		||||
use OpenTelemetry\API\Trace\NonRecordingSpan;
 | 
			
		||||
use OpenTelemetry\API\Trace\SpanContext;
 | 
			
		||||
| 
						 | 
				
			
			@ -21,9 +24,6 @@ use OpenTelemetry\SDK\Common\Attribute\Attributes;
 | 
			
		|||
use OpenTelemetry\SDK\Common\Attribute\AttributesInterface;
 | 
			
		||||
use OpenTelemetry\SDK\Common\Exception\StackTraceFormatter;
 | 
			
		||||
use OpenTelemetry\SDK\Common\Instrumentation\InstrumentationScope;
 | 
			
		||||
use OpenTelemetry\SDK\Common\Time\ClockFactory;
 | 
			
		||||
use OpenTelemetry\SDK\Common\Time\ClockInterface;
 | 
			
		||||
use OpenTelemetry\SDK\Common\Time\Util as TimeUtil;
 | 
			
		||||
use OpenTelemetry\SDK\Resource\ResourceInfo;
 | 
			
		||||
use OpenTelemetry\SDK\Resource\ResourceInfoFactory;
 | 
			
		||||
use OpenTelemetry\SDK\Trace\Event;
 | 
			
		||||
| 
						 | 
				
			
			@ -38,7 +38,6 @@ use OpenTelemetry\SDK\Trace\SpanLimits;
 | 
			
		|||
use OpenTelemetry\SDK\Trace\SpanLimitsBuilder;
 | 
			
		||||
use OpenTelemetry\SDK\Trace\SpanProcessorInterface;
 | 
			
		||||
use OpenTelemetry\SDK\Trace\StatusData;
 | 
			
		||||
use OpenTelemetry\Tests\Unit\SDK\Util\TestClock;
 | 
			
		||||
use PHPUnit\Framework\MockObject\MockObject;
 | 
			
		||||
use function range;
 | 
			
		||||
use function str_repeat;
 | 
			
		||||
| 
						 | 
				
			
			@ -99,14 +98,14 @@ class SpanTest extends MockeryTestCase
 | 
			
		|||
            )
 | 
			
		||||
        );
 | 
			
		||||
 | 
			
		||||
        ClockFactory::setDefault($this->testClock);
 | 
			
		||||
        Clock::setDefault($this->testClock);
 | 
			
		||||
        $this->logWriter = $this->createMock(LogWriterInterface::class);
 | 
			
		||||
        Logging::setLogWriter($this->logWriter);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    protected function tearDown(): void
 | 
			
		||||
    {
 | 
			
		||||
        ClockFactory::setDefault(null);
 | 
			
		||||
        Clock::reset();
 | 
			
		||||
        Logging::reset();
 | 
			
		||||
        //        LoggerHolder::unset();
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			@ -552,7 +551,7 @@ class SpanTest extends MockeryTestCase
 | 
			
		|||
        $span = $this->createTestRootSpan();
 | 
			
		||||
        $span->addEvent('event1');
 | 
			
		||||
        $span->addEvent('event2', ['key1' => 1]);
 | 
			
		||||
        $span->addEvent('event3', [], TimeUtil::secondsToNanos(10));
 | 
			
		||||
        $span->addEvent('event3', [], 10*ClockInterface::NANOS_PER_SECOND);
 | 
			
		||||
 | 
			
		||||
        $span->end();
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -562,7 +561,7 @@ class SpanTest extends MockeryTestCase
 | 
			
		|||
 | 
			
		||||
        $this->assertEvent($events[$idx++], 'event1', Attributes::create([]), self::START_EPOCH);
 | 
			
		||||
        $this->assertEvent($events[$idx++], 'event2', Attributes::create(['key1' => 1]), self::START_EPOCH);
 | 
			
		||||
        $this->assertEvent($events[$idx], 'event3', Attributes::create([]), TimeUtil::secondsToNanos(10));
 | 
			
		||||
        $this->assertEvent($events[$idx], 'event3', Attributes::create([]), 10*ClockInterface::NANOS_PER_SECOND);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function test_add_event_attribute_length(): void
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -6,12 +6,12 @@ namespace OpenTelemetry\Tests\Unit\SDK\Util;
 | 
			
		|||
 | 
			
		||||
use function count;
 | 
			
		||||
use function max;
 | 
			
		||||
use OpenTelemetry\API\Common\Time\Clock;
 | 
			
		||||
use OpenTelemetry\API\Trace as API;
 | 
			
		||||
use OpenTelemetry\SDK\Common\Attribute\Attributes;
 | 
			
		||||
use OpenTelemetry\SDK\Common\Attribute\AttributesBuilderInterface;
 | 
			
		||||
use OpenTelemetry\SDK\Common\Attribute\AttributesInterface;
 | 
			
		||||
use OpenTelemetry\SDK\Common\Instrumentation\InstrumentationScope;
 | 
			
		||||
use OpenTelemetry\SDK\Common\Time\ClockFactory;
 | 
			
		||||
use OpenTelemetry\SDK\Resource\ResourceInfo;
 | 
			
		||||
use OpenTelemetry\SDK\Resource\ResourceInfoFactory;
 | 
			
		||||
use OpenTelemetry\SDK\Trace as SDK;
 | 
			
		||||
| 
						 | 
				
			
			@ -105,7 +105,7 @@ class SpanData implements SDK\SpanDataInterface
 | 
			
		|||
 | 
			
		||||
    public function addEvent(string $name, AttributesInterface $attributes, int $timestamp = null): self
 | 
			
		||||
    {
 | 
			
		||||
        $this->events[] = new SDK\Event($name, $timestamp ?? ClockFactory::getDefault()->now(), $attributes);
 | 
			
		||||
        $this->events[] = new SDK\Event($name, $timestamp ?? Clock::getDefault()->now(), $attributes);
 | 
			
		||||
 | 
			
		||||
        return $this;
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue