Refactor Attributes (#623)

* Move Attribute classes to Common namespace

* refactor AttributesTest

* Move Attribute classes to Common namespace in examples

* Introduce AttributeLimitsInterface

* Fix bug in total added values calculation

* Move compare test to correct test-class

* Apply CS

* Refactor Attributes

* Fix attributes in Benchmark

* Move AttributeLimits defaults to interface
This commit is contained in:
Timo Michna 2022-03-20 04:51:47 +01:00 committed by GitHub
parent 1d6d717e0d
commit 940f67f1c7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
58 changed files with 269 additions and 153 deletions

View File

@ -6,7 +6,7 @@ require __DIR__ . '/../vendor/autoload.php';
use OpenTelemetry\API\Trace as API;
use OpenTelemetry\Context\Context;
use OpenTelemetry\SDK\AbstractClock;
use OpenTelemetry\SDK\Attributes;
use OpenTelemetry\SDK\Common\Attribute\Attributes;
use OpenTelemetry\SDK\Trace\Sampler\AlwaysOffSampler;
use OpenTelemetry\SDK\Trace\SamplingResult;
use OpenTelemetry\SDK\Trace\TracerProvider;

View File

@ -4,7 +4,7 @@ declare(strict_types=1);
require __DIR__ . '/../vendor/autoload.php';
use OpenTelemetry\Contrib\Jaeger\Exporter as JaegerExporter;
use OpenTelemetry\SDK\Attributes;
use OpenTelemetry\SDK\Common\Attribute\Attributes;
use OpenTelemetry\SDK\Trace\Sampler\AlwaysOnSampler;
use OpenTelemetry\SDK\Trace\SpanProcessor\SimpleSpanProcessor;
use OpenTelemetry\SDK\Trace\TracerProvider;

View File

@ -9,7 +9,7 @@ use OpenTelemetry\API\Trace as API;
use OpenTelemetry\Context\Context;
use OpenTelemetry\Contrib\Newrelic\Exporter as NewrelicExporter;
use OpenTelemetry\SDK\AbstractClock;
use OpenTelemetry\SDK\Attributes;
use OpenTelemetry\SDK\Common\Attribute\Attributes;
use OpenTelemetry\SDK\Trace\Sampler\AlwaysOnSampler;
use OpenTelemetry\SDK\Trace\SamplingResult;
use OpenTelemetry\SDK\Trace\SpanProcessor\SimpleSpanProcessor;

View File

@ -6,7 +6,7 @@ require __DIR__ . '/../vendor/autoload.php';
use GuzzleHttp\Client;
use GuzzleHttp\Psr7\HttpFactory;
use OpenTelemetry\Contrib\OtlpHttp\Exporter as OTLPExporter;
use OpenTelemetry\SDK\Attributes;
use OpenTelemetry\SDK\Common\Attribute\Attributes;
use OpenTelemetry\SDK\Trace\SpanProcessor\SimpleSpanProcessor;
use OpenTelemetry\SDK\Trace\TracerProvider;

View File

@ -4,7 +4,7 @@ declare(strict_types=1);
require __DIR__ . '/../vendor/autoload.php';
use OpenTelemetry\Contrib\OtlpGrpc\Exporter as OTLPGrpcExporter;
use OpenTelemetry\SDK\Attributes;
use OpenTelemetry\SDK\Common\Attribute\Attributes;
use OpenTelemetry\SDK\Trace\SpanProcessor\SimpleSpanProcessor;
use OpenTelemetry\SDK\Trace\TracerProvider;

View File

@ -7,7 +7,7 @@ use OpenTelemetry\API\Trace as API;
use OpenTelemetry\Context\Context;
use OpenTelemetry\Contrib\OtlpGrpc\Exporter as OTLPExporter;
use OpenTelemetry\SDK\AbstractClock;
use OpenTelemetry\SDK\Attributes;
use OpenTelemetry\SDK\Common\Attribute\Attributes;
use OpenTelemetry\SDK\Trace\Sampler\AlwaysOnSampler;
use OpenTelemetry\SDK\Trace\SamplingResult;
use OpenTelemetry\SDK\Trace\SpanProcessor\SimpleSpanProcessor;

View File

@ -7,7 +7,7 @@ use OpenTelemetry\API\Trace as API;
use OpenTelemetry\Context\Context;
use OpenTelemetry\Contrib\OtlpGrpc\Exporter as OTLPExporter;
use OpenTelemetry\SDK\AbstractClock;
use OpenTelemetry\SDK\Attributes;
use OpenTelemetry\SDK\Common\Attribute\Attributes;
use OpenTelemetry\SDK\Trace\Sampler\AlwaysOnSampler;
use OpenTelemetry\SDK\Trace\SamplingResult;
use OpenTelemetry\SDK\Trace\SpanProcessor\SimpleSpanProcessor;

View File

@ -6,7 +6,7 @@ require __DIR__ . '/../vendor/autoload.php';
use GuzzleHttp\Client;
use GuzzleHttp\Psr7\HttpFactory;
use OpenTelemetry\Contrib\Zipkin\Exporter as ZipkinExporter;
use OpenTelemetry\SDK\Attributes;
use OpenTelemetry\SDK\Common\Attribute\Attributes;
use OpenTelemetry\SDK\Trace\SpanProcessor\SimpleSpanProcessor;
use OpenTelemetry\SDK\Trace\TracerProvider;

View File

@ -9,7 +9,7 @@ use OpenTelemetry\API\Trace as API;
use OpenTelemetry\Context\Context;
use OpenTelemetry\Contrib\ZipkinToNewrelic\Exporter as ZipkinToNewrelicExporter;
use OpenTelemetry\SDK\AbstractClock;
use OpenTelemetry\SDK\Attributes;
use OpenTelemetry\SDK\Common\Attribute\Attributes;
use OpenTelemetry\SDK\Trace\Sampler\AlwaysOnSampler;
use OpenTelemetry\SDK\Trace\SamplingResult;
use OpenTelemetry\SDK\Trace\SpanProcessor\SimpleSpanProcessor;

View File

@ -3,7 +3,7 @@
declare(strict_types=1);
require __DIR__ . '/../vendor/autoload.php';
use OpenTelemetry\SDK\Attributes;
use OpenTelemetry\SDK\Common\Attribute\Attributes;
use OpenTelemetry\SDK\Resource\ResourceInfo;
use OpenTelemetry\SDK\Trace\SpanExporter\ConsoleSpanExporter;
use OpenTelemetry\SDK\Trace\SpanProcessor\SimpleSpanProcessor;

View File

@ -2,21 +2,17 @@
declare(strict_types=1);
namespace OpenTelemetry\SDK;
namespace OpenTelemetry\SDK\Common\Attribute;
class AttributeLimits
final class AttributeLimits implements AttributeLimitsInterface
{
private const DEFAULT_COUNT_LIMIT = 128;
private const DEFAULT_VALUE_LENGTH_LIMIT = PHP_INT_MAX;
private int $attributeCountLimit;
private int $attributeValueLengthLimit;
public function __construct(
int $attributeCountLimit = self::DEFAULT_COUNT_LIMIT,
int $attributeValueLengthLimit = self::DEFAULT_VALUE_LENGTH_LIMIT
int $attributeCountLimit = AttributeLimitsInterface::DEFAULT_COUNT_LIMIT,
int $attributeValueLengthLimit = AttributeLimitsInterface::DEFAULT_VALUE_LENGTH_LIMIT
) {
$this->attributeCountLimit = $attributeCountLimit;
$this->attributeValueLengthLimit = $attributeValueLengthLimit;

View File

@ -0,0 +1,17 @@
<?php
declare(strict_types=1);
namespace OpenTelemetry\SDK\Common\Attribute;
interface AttributeLimitsInterface
{
public const DEFAULT_COUNT_LIMIT = 128;
public const DEFAULT_VALUE_LENGTH_LIMIT = PHP_INT_MAX;
/** @return int Maximum allowed attribute count */
public function getAttributeCountLimit(): int;
/** @return int Maximum allowed attribute value length */
public function getAttributeValueLengthLimit(): int;
}

View File

@ -2,7 +2,7 @@
declare(strict_types=1);
namespace OpenTelemetry\SDK;
namespace OpenTelemetry\SDK\Common\Attribute;
use function mb_substr;
use Traversable;
@ -11,17 +11,11 @@ class Attributes implements AttributesInterface
{
private array $attributes = [];
private AttributeLimits $attributeLimits;
private AttributeLimitsInterface $attributeLimits;
private int $totalAddedAttributes = 0;
/** @return Attributes Returns a new instance of Attributes with the limits applied */
public static function withLimits(iterable $attributes, AttributeLimits $attributeLimits): Attributes
{
return new self($attributes, $attributeLimits);
}
public function __construct(iterable $attributes = [], AttributeLimits $attributeLimits = null)
public function __construct(iterable $attributes = [], AttributeLimitsInterface $attributeLimits = null)
{
$this->attributeLimits = $attributeLimits ?? new AttributeLimits();
foreach ($attributes as $key => $value) {
@ -29,40 +23,44 @@ class Attributes implements AttributesInterface
}
}
/** @return Attributes Returns a new instance of Attributes with the limits applied */
public static function withLimits(iterable $attributes, AttributeLimitsInterface $attributeLimits): Attributes
{
return new self($attributes, $attributeLimits);
}
public function hasAttribute(string $name): bool
{
return isset($this->attributes[$name]);
}
public function setAttribute(string $name, $value): AttributesInterface
{
// unset the attribute when null value is passed
if ($value === null) {
return $this->unsetAttribute($name);
}
$this->totalAddedAttributes++;
// unset the attribute when null value is passed
if (null === $value) {
// drop attribute when limit is reached
if (!$this->hasAttribute($name) && $this->isLimitReached()) {
return $this;
}
$this->attributes[$name] = $this->normalizeValue($value);
return $this;
}
public function unsetAttribute(string $name): AttributesInterface
{
if ($this->hasAttribute($name)) {
unset($this->attributes[$name]);
$this->totalAddedAttributes--;
return $this;
}
// drop attribute when limit is reached
if (!isset($this->attributes[$name]) && count($this) >= $this->attributeLimits->getAttributeCountLimit()) {
return $this;
}
if (is_string($value)) {
$limitedValue = mb_substr($value, 0, $this->attributeLimits->getAttributeValueLengthLimit());
} elseif (is_array($value)) {
$limitedValue = array_map(function ($arrayValue) {
if (is_string($arrayValue)) {
return mb_substr($arrayValue, 0, $this->attributeLimits->getAttributeValueLengthLimit());
}
return $arrayValue;
}, $value);
} else {
$limitedValue = $value;
}
$this->attributes[$name] = $limitedValue;
return $this;
}
@ -98,4 +96,29 @@ class Attributes implements AttributesInterface
{
return $this->totalAddedAttributes - count($this);
}
public function isLimitReached(): bool
{
return count($this) >= $this->attributeLimits->getAttributeCountLimit();
}
private function truncateStringValue(string $value): string
{
return mb_substr($value, 0, $this->attributeLimits->getAttributeValueLengthLimit());
}
private function normalizeValue($value)
{
if (is_string($value)) {
return $this->truncateStringValue($value);
}
if (is_array($value)) {
return array_map(function ($value) {
return $this->normalizeValue($value);
}, $value);
}
return $value;
}
}

View File

@ -2,7 +2,7 @@
declare(strict_types=1);
namespace OpenTelemetry\SDK;
namespace OpenTelemetry\SDK\Common\Attribute;
use Countable;
use IteratorAggregate;
@ -11,6 +11,8 @@ use Traversable;
interface AttributesInterface extends IteratorAggregate, Countable
{
public function setAttribute(string $name, $value): AttributesInterface;
public function unsetAttribute(string $name): AttributesInterface;
public function hasAttribute(string $name): bool;
public function get(string $name);
public function getIterator(): Traversable;
@ -18,4 +20,6 @@ interface AttributesInterface extends IteratorAggregate, Countable
public function getTotalAddedValues(): int;
public function getDroppedAttributesCount(): int;
public function isLimitReached(): bool;
}

View File

@ -6,7 +6,7 @@ namespace OpenTelemetry\SDK\Resource\Detectors;
use function class_exists;
use Composer\InstalledVersions;
use OpenTelemetry\SDK\Attributes;
use OpenTelemetry\SDK\Common\Attribute\Attributes;
use OpenTelemetry\SDK\Resource\ResourceDetectorInterface;
use OpenTelemetry\SDK\Resource\ResourceInfo;
use OpenTelemetry\SemConv\ResourceAttributes;

View File

@ -4,7 +4,7 @@ declare(strict_types=1);
namespace OpenTelemetry\SDK\Resource\Detectors;
use OpenTelemetry\SDK\Attributes;
use OpenTelemetry\SDK\Common\Attribute\Attributes;
use OpenTelemetry\SDK\Common\Environment\EnvironmentVariablesTrait;
use OpenTelemetry\SDK\Common\Environment\Variables as Env;
use OpenTelemetry\SDK\Resource\ResourceDetectorInterface;

View File

@ -4,7 +4,7 @@ declare(strict_types=1);
namespace OpenTelemetry\SDK\Resource\Detectors;
use OpenTelemetry\SDK\Attributes;
use OpenTelemetry\SDK\Common\Attribute\Attributes;
use OpenTelemetry\SDK\Resource\ResourceDetectorInterface;
use OpenTelemetry\SDK\Resource\ResourceInfo;
use OpenTelemetry\SemConv\ResourceAttributes;

View File

@ -4,7 +4,7 @@ declare(strict_types=1);
namespace OpenTelemetry\SDK\Resource\Detectors;
use OpenTelemetry\SDK\Attributes;
use OpenTelemetry\SDK\Common\Attribute\Attributes;
use OpenTelemetry\SDK\Resource\ResourceDetectorInterface;
use OpenTelemetry\SDK\Resource\ResourceInfo;
use OpenTelemetry\SemConv\ResourceAttributes;

View File

@ -6,7 +6,7 @@ namespace OpenTelemetry\SDK\Resource\Detectors;
use function extension_loaded;
use function getmypid;
use OpenTelemetry\SDK\Attributes;
use OpenTelemetry\SDK\Common\Attribute\Attributes;
use OpenTelemetry\SDK\Resource\ResourceDetectorInterface;
use OpenTelemetry\SDK\Resource\ResourceInfo;
use OpenTelemetry\SemConv\ResourceAttributes;

View File

@ -4,7 +4,7 @@ declare(strict_types=1);
namespace OpenTelemetry\SDK\Resource\Detectors;
use OpenTelemetry\SDK\Attributes;
use OpenTelemetry\SDK\Common\Attribute\Attributes;
use OpenTelemetry\SDK\Resource\ResourceDetectorInterface;
use OpenTelemetry\SDK\Resource\ResourceInfo;
use OpenTelemetry\SemConv\ResourceAttributes;

View File

@ -6,7 +6,7 @@ namespace OpenTelemetry\SDK\Resource\Detectors;
use function class_exists;
use Composer\InstalledVersions;
use OpenTelemetry\SDK\Attributes;
use OpenTelemetry\SDK\Common\Attribute\Attributes;
use OpenTelemetry\SDK\Resource\ResourceDetectorInterface;
use OpenTelemetry\SDK\Resource\ResourceInfo;
use OpenTelemetry\SemConv\ResourceAttributes;

View File

@ -4,7 +4,7 @@ declare(strict_types=1);
namespace OpenTelemetry\SDK\Resource\Detectors;
use OpenTelemetry\SDK\Attributes;
use OpenTelemetry\SDK\Common\Attribute\Attributes;
use OpenTelemetry\SDK\Resource\ResourceDetectorInterface;
use OpenTelemetry\SDK\Resource\ResourceInfo;
use OpenTelemetry\SemConv\ResourceAttributes;

View File

@ -5,8 +5,8 @@ declare(strict_types=1);
namespace OpenTelemetry\SDK\Resource;
use function in_array;
use OpenTelemetry\SDK\Attributes;
use OpenTelemetry\SDK\AttributesInterface;
use OpenTelemetry\SDK\Common\Attribute\Attributes;
use OpenTelemetry\SDK\Common\Attribute\AttributesInterface;
use OpenTelemetry\SDK\Common\Environment\Accessor;
use OpenTelemetry\SDK\Common\Environment\KnownValues as Values;
use OpenTelemetry\SDK\Common\Environment\Variables as Env;

View File

@ -5,8 +5,8 @@ declare(strict_types=1);
namespace OpenTelemetry\SDK\Trace;
use function count;
use OpenTelemetry\SDK\Attributes;
use OpenTelemetry\SDK\AttributesInterface;
use OpenTelemetry\SDK\Common\Attribute\Attributes;
use OpenTelemetry\SDK\Common\Attribute\AttributesInterface;
final class Event implements EventInterface
{

View File

@ -4,7 +4,7 @@ declare(strict_types=1);
namespace OpenTelemetry\SDK\Trace;
use OpenTelemetry\SDK\AttributesInterface;
use OpenTelemetry\SDK\Common\Attribute\AttributesInterface;
interface EventInterface
{

View File

@ -6,7 +6,7 @@ namespace OpenTelemetry\SDK\Trace;
use function max;
use OpenTelemetry\API\Trace as API;
use OpenTelemetry\SDK\AttributesInterface;
use OpenTelemetry\SDK\Common\Attribute\AttributesInterface;
use OpenTelemetry\SDK\InstrumentationLibrary;
use OpenTelemetry\SDK\Resource\ResourceInfo;

View File

@ -6,8 +6,8 @@ namespace OpenTelemetry\SDK\Trace;
use function count;
use OpenTelemetry\API\Trace as API;
use OpenTelemetry\SDK\Attributes;
use OpenTelemetry\SDK\AttributesInterface;
use OpenTelemetry\SDK\Common\Attribute\Attributes;
use OpenTelemetry\SDK\Common\Attribute\AttributesInterface;
final class Link implements LinkInterface
{

View File

@ -5,7 +5,7 @@ declare(strict_types=1);
namespace OpenTelemetry\SDK\Trace;
use OpenTelemetry\API\Trace\SpanContextInterface;
use OpenTelemetry\SDK\AttributesInterface;
use OpenTelemetry\SDK\Common\Attribute\AttributesInterface;
interface LinkInterface
{

View File

@ -5,7 +5,7 @@ declare(strict_types=1);
namespace OpenTelemetry\SDK\Trace\Sampler;
use OpenTelemetry\Context\Context;
use OpenTelemetry\SDK\AttributesInterface;
use OpenTelemetry\SDK\Common\Attribute\AttributesInterface;
use OpenTelemetry\SDK\Trace\SamplerInterface;
use OpenTelemetry\SDK\Trace\SamplingResult;
use OpenTelemetry\SDK\Trace\Span;

View File

@ -5,7 +5,7 @@ declare(strict_types=1);
namespace OpenTelemetry\SDK\Trace\Sampler;
use OpenTelemetry\Context\Context;
use OpenTelemetry\SDK\AttributesInterface;
use OpenTelemetry\SDK\Common\Attribute\AttributesInterface;
use OpenTelemetry\SDK\Trace\SamplerInterface;
use OpenTelemetry\SDK\Trace\SamplingResult;
use OpenTelemetry\SDK\Trace\Span;

View File

@ -5,7 +5,7 @@ declare(strict_types=1);
namespace OpenTelemetry\SDK\Trace\Sampler;
use OpenTelemetry\Context\Context;
use OpenTelemetry\SDK\AttributesInterface;
use OpenTelemetry\SDK\Common\Attribute\AttributesInterface;
use OpenTelemetry\SDK\Trace\SamplerInterface;
use OpenTelemetry\SDK\Trace\SamplingResult;
use OpenTelemetry\SDK\Trace\Span;

View File

@ -6,7 +6,7 @@ namespace OpenTelemetry\SDK\Trace\Sampler;
use InvalidArgumentException;
use OpenTelemetry\Context\Context;
use OpenTelemetry\SDK\AttributesInterface;
use OpenTelemetry\SDK\Common\Attribute\AttributesInterface;
use OpenTelemetry\SDK\Trace\SamplerInterface;
use OpenTelemetry\SDK\Trace\SamplingResult;
use OpenTelemetry\SDK\Trace\Span;

View File

@ -5,7 +5,7 @@ declare(strict_types=1);
namespace OpenTelemetry\SDK\Trace;
use OpenTelemetry\Context\Context;
use OpenTelemetry\SDK\AttributesInterface;
use OpenTelemetry\SDK\Common\Attribute\AttributesInterface;
/**
* This interface is used to organize sampling logic.
@ -22,7 +22,7 @@ interface SamplerInterface
* Typically in situations when the Span to be created starts a new Trace.
* @param string $spanName Name of the Span to be created.
* @param int $spanKind Span kind.
* @param AttributesInterface|null $attributes Initial set of Attributes for the Span being constructed.
* @param \OpenTelemetry\SDK\Common\Attribute\AttributesInterface|null $attributes Initial set of Attributes for the Span being constructed.
* @param list<LinkInterface> $links Collection of links that will be associated with the Span to be created.
* Typically, useful for batch operations.
* @see https://github.com/open-telemetry/opentelemetry-specification/blob/master/specification/overview.md#links-between-spans

View File

@ -5,7 +5,7 @@ declare(strict_types=1);
namespace OpenTelemetry\SDK\Trace;
use OpenTelemetry\API\Trace as API;
use OpenTelemetry\SDK\AttributesInterface;
use OpenTelemetry\SDK\Common\Attribute\AttributesInterface;
final class SamplingResult
{

View File

@ -14,9 +14,9 @@ use function in_array;
use OpenTelemetry\API\Trace as API;
use OpenTelemetry\Context\Context;
use OpenTelemetry\SDK\AbstractClock;
use OpenTelemetry\SDK\AttributeLimits;
use OpenTelemetry\SDK\Attributes;
use OpenTelemetry\SDK\AttributesInterface;
use OpenTelemetry\SDK\Common\Attribute\AttributeLimits;
use OpenTelemetry\SDK\Common\Attribute\Attributes;
use OpenTelemetry\SDK\Common\Attribute\AttributesInterface;
use OpenTelemetry\SDK\InstrumentationLibrary;
use OpenTelemetry\SDK\Resource\ResourceInfo;
use function sprintf;

View File

@ -7,9 +7,9 @@ namespace OpenTelemetry\SDK\Trace;
use function in_array;
use OpenTelemetry\API\Trace as API;
use OpenTelemetry\Context\Context;
use OpenTelemetry\SDK\AttributeLimits;
use OpenTelemetry\SDK\Attributes;
use OpenTelemetry\SDK\AttributesInterface;
use OpenTelemetry\SDK\Common\Attribute\AttributeLimits;
use OpenTelemetry\SDK\Common\Attribute\Attributes;
use OpenTelemetry\SDK\Common\Attribute\AttributesInterface;
use OpenTelemetry\SDK\InstrumentationLibrary;
final class SpanBuilder implements API\SpanBuilderInterface

View File

@ -5,7 +5,7 @@ declare(strict_types=1);
namespace OpenTelemetry\SDK\Trace;
use OpenTelemetry\API\Trace as API;
use OpenTelemetry\SDK\AttributesInterface;
use OpenTelemetry\SDK\Common\Attribute\AttributesInterface;
use OpenTelemetry\SDK\InstrumentationLibrary;
use OpenTelemetry\SDK\Resource\ResourceInfo;

View File

@ -6,7 +6,7 @@ namespace OpenTelemetry\SDK\Trace\SpanExporter;
use OpenTelemetry\API\Trace\SpanContextInterface;
use OpenTelemetry\API\Trace\SpanKind;
use OpenTelemetry\SDK\AttributesInterface;
use OpenTelemetry\SDK\Common\Attribute\AttributesInterface;
use OpenTelemetry\SDK\Resource\ResourceInfo;
use OpenTelemetry\SDK\Trace\EventInterface;
use OpenTelemetry\SDK\Trace\LinkInterface;
@ -114,7 +114,7 @@ class FriendlySpanConverter implements SpanConverterInterface
}
/**
* @param AttributesInterface $attributes
* @param \OpenTelemetry\SDK\Common\Attribute\AttributesInterface $attributes
* @return array
*/
private function convertAttributes(AttributesInterface $attributes): array

View File

@ -4,7 +4,7 @@ declare(strict_types=1);
namespace OpenTelemetry\SDK\Trace;
use OpenTelemetry\SDK\AttributeLimits;
use OpenTelemetry\SDK\Common\Attribute\AttributeLimits;
final class SpanLimits
{

View File

@ -10,7 +10,7 @@ use OpenTelemetry\API\Trace\TracerInterface;
use OpenTelemetry\Contrib\OtlpGrpc\Exporter as GrpcExporter;
use OpenTelemetry\Contrib\OtlpHttp\Exporter as HttpExporter;
use Opentelemetry\Proto\Collector\Trace\V1\TraceServiceClient;
use OpenTelemetry\SDK\Attributes;
use OpenTelemetry\SDK\Common\Attribute\Attributes;
use OpenTelemetry\SDK\Resource\ResourceInfo;
use OpenTelemetry\SDK\Trace\Sampler\AlwaysOnSampler;
use OpenTelemetry\SDK\Trace\SamplerInterface;

View File

@ -10,8 +10,8 @@ use Mockery\MockInterface;
use OpenTelemetry\API\Trace as API;
use OpenTelemetry\API\Trace\SpanContext;
use OpenTelemetry\Context\Context;
use OpenTelemetry\SDK\Attributes;
use OpenTelemetry\SDK\AttributesInterface;
use OpenTelemetry\SDK\Common\Attribute\Attributes;
use OpenTelemetry\SDK\Common\Attribute\AttributesInterface;
use OpenTelemetry\SDK\Trace\Link;
use OpenTelemetry\SDK\Trace\Sampler\AlwaysOffSampler;
use OpenTelemetry\SDK\Trace\SamplerInterface;

View File

@ -7,7 +7,7 @@ namespace OpenTelemetry\Tests\API\Unit\Trace;
use Exception;
use OpenTelemetry\API\Trace\NonRecordingSpan;
use OpenTelemetry\API\Trace\SpanContextInterface;
use OpenTelemetry\SDK\AttributesInterface;
use OpenTelemetry\SDK\Common\Attribute\AttributesInterface;
use PHPUnit\Framework\TestCase;
/**

View File

@ -8,7 +8,7 @@ use OpenTelemetry\API\Trace\SpanContext;
use OpenTelemetry\API\Trace\SpanKind;
use OpenTelemetry\API\Trace\StatusCode;
use OpenTelemetry\Contrib\Jaeger\SpanConverter;
use OpenTelemetry\SDK\Attributes;
use OpenTelemetry\SDK\Common\Attribute\Attributes;
use OpenTelemetry\SDK\InstrumentationLibrary;
use OpenTelemetry\SDK\Resource\ResourceInfo;
use OpenTelemetry\SDK\Trace\Event;

View File

@ -5,7 +5,7 @@ declare(strict_types=1);
namespace OpenTelemetry\Tests\Unit\Contrib;
use OpenTelemetry\Contrib\Newrelic\SpanConverter;
use OpenTelemetry\SDK\Attributes;
use OpenTelemetry\SDK\Common\Attribute\Attributes;
use OpenTelemetry\SDK\Resource\ResourceInfo;
use OpenTelemetry\Tests\Unit\SDK\Util\SpanData;
use PHPUnit\Framework\TestCase;

View File

@ -16,7 +16,7 @@ use Opentelemetry\Proto\Trace\V1;
use Opentelemetry\Proto\Trace\V1\InstrumentationLibrarySpans;
use Opentelemetry\Proto\Trace\V1\ResourceSpans;
use Opentelemetry\Proto\Trace\V1\Span\SpanKind as ProtoSpanKind;
use OpenTelemetry\SDK\Attributes;
use OpenTelemetry\SDK\Common\Attribute\Attributes;
use OpenTelemetry\SDK\InstrumentationLibrary;
use OpenTelemetry\SDK\Resource\ResourceInfo;
use OpenTelemetry\SDK\Trace\StatusData;

View File

@ -9,7 +9,7 @@ use OpenTelemetry\API\Trace\SpanKind;
use OpenTelemetry\API\Trace\StatusCode;
use OpenTelemetry\Contrib\Zipkin\SpanConverter;
use OpenTelemetry\Contrib\Zipkin\SpanKind as ZipkinSpanKind;
use OpenTelemetry\SDK\Attributes;
use OpenTelemetry\SDK\Common\Attribute\Attributes;
use OpenTelemetry\SDK\InstrumentationLibrary;
use OpenTelemetry\SDK\Resource\ResourceInfo;
use OpenTelemetry\SDK\Trace\StatusData;

View File

@ -6,7 +6,7 @@ namespace OpenTelemetry\Tests\Unit\Contrib;
use function implode;
use OpenTelemetry\Contrib\ZipkinToNewrelic\SpanConverter;
use OpenTelemetry\SDK\Attributes;
use OpenTelemetry\SDK\Common\Attribute\Attributes;
use OpenTelemetry\SDK\Resource\ResourceInfo;
use OpenTelemetry\Tests\Unit\SDK\Util\SpanData;
use PHPUnit\Framework\TestCase;

View File

@ -1,28 +0,0 @@
<?php
declare(strict_types=1);
namespace OpenTelemetry\Tests\Unit\SDK;
use OpenTelemetry\SDK\AttributeLimits;
use PHPUnit\Framework\TestCase;
/**
* @covers OpenTelemetry\SDK\AttributeLimits
*/
class AttributeLimitsTest extends TestCase
{
public function test_default_limits(): void
{
$limits = new AttributeLimits();
$this->assertNotNull($limits->getAttributeCountLimit());
$this->assertNotNull($limits->getAttributeValueLengthLimit());
}
public function test_limits(): void
{
$limits = new AttributeLimits(10, 20);
$this->assertSame(10, $limits->getAttributeCountLimit());
$this->assertSame(20, $limits->getAttributeValueLengthLimit());
}
}

View File

@ -0,0 +1,39 @@
<?php
declare(strict_types=1);
namespace OpenTelemetry\Tests\Unit\SDK\Common\Attribute;
use OpenTelemetry\SDK\Common\Attribute\AttributeLimits;
use OpenTelemetry\SDK\Common\Attribute\AttributeLimitsInterface;
use PHPUnit\Framework\TestCase;
/**
* @covers \OpenTelemetry\SDK\Common\Attribute\AttributeLimits
*/
class AttributeLimitsTest extends TestCase
{
public function test_compare(): void
{
$attrLimits1 = new AttributeLimits(10, 20);
$attrLimits2 = new AttributeLimits(10, 20);
$attrLimits3 = new AttributeLimits(20, 30);
$this->assertEquals($attrLimits1, $attrLimits2);
$this->assertNotEquals($attrLimits1, $attrLimits3);
}
public function test_default_limits(): void
{
$limits = new AttributeLimits();
$this->assertSame(AttributeLimitsInterface::DEFAULT_COUNT_LIMIT, $limits->getAttributeCountLimit());
$this->assertSame(AttributeLimitsInterface::DEFAULT_VALUE_LENGTH_LIMIT, $limits->getAttributeValueLengthLimit());
}
public function test_limits(): void
{
$limits = new AttributeLimits(10, 20);
$this->assertSame(10, $limits->getAttributeCountLimit());
$this->assertSame(20, $limits->getAttributeValueLengthLimit());
}
}

View File

@ -2,35 +2,38 @@
declare(strict_types=1);
namespace OpenTelemetry\Tests\Unit\SDK;
namespace OpenTelemetry\Tests\Unit\SDK\Common\Attribute;
use OpenTelemetry\SDK\AttributeLimits;
use OpenTelemetry\SDK\Attributes;
use OpenTelemetry\SDK\Common\Attribute\AttributeLimits;
use OpenTelemetry\SDK\Common\Attribute\Attributes;
use PHPUnit\Framework\TestCase;
/**
* @covers OpenTelemetry\SDK\Attributes
* @covers \OpenTelemetry\SDK\Common\Attribute\Attributes
*/
class AttributesTest extends TestCase
{
public function test_attribute_limits_compare(): void
public function test_has_attribute(): void
{
$attrLimits1 = new AttributeLimits(10, 20);
$attrLimits2 = new AttributeLimits(10, 20);
$attrLimits3 = new AttributeLimits(20, 30);
$attributes = new Attributes([
'foo' => 'foo',
]);
$this->assertTrue($attrLimits1 == $attrLimits2);
$this->assertTrue($attrLimits1 != $attrLimits3);
$this->assertFalse($attributes->hasAttribute('bar'));
$attributes->setAttribute('bar', 'bar');
$this->assertTrue($attributes->hasAttribute('bar'));
}
/** @test Test numeric attribute key is not cast to integer value */
/** Test numeric attribute key is not cast to integer value */
public function test_numeric_attribute_name(): void
{
$attributes = new Attributes(['1' => '2']);
$this->assertCount(1, $attributes);
foreach ($attributes as $key => $value) {
$this->assertTrue(is_string($key));
$this->assertTrue(is_string($value));
$this->assertIsString($key);
$this->assertIsString($value);
}
}
@ -39,7 +42,6 @@ class AttributesTest extends TestCase
*/
public function test_attribute_limits(): void
{
$boolValue = true;
$intValue = 42;
$floatValue = 3.14;
$shortStringValue = '0123';
@ -48,7 +50,7 @@ class AttributesTest extends TestCase
$attributeLimits = new AttributeLimits(6, 16);
$attributes = new Attributes([
'bool' => $boolValue,
'bool' => true,
'int' => $intValue,
'float' => $floatValue,
'short_string' => $shortStringValue,
@ -56,18 +58,17 @@ class AttributesTest extends TestCase
'array' => [
$shortStringValue,
$longStringValue,
$boolValue,
true,
],
'ignored_key' => 'ignored_value',
], $attributeLimits);
$this->assertEquals($boolValue, $attributes->get('bool'));
$this->assertTrue($attributes->get('bool'));
$this->assertEquals($intValue, $attributes->get('int'));
$this->assertEquals($floatValue, $attributes->get('float'));
$this->assertEquals($shortStringValue, $attributes->get('short_string'));
$this->assertEquals($longStringTrimmed, $attributes->get('long_string'));
$this->assertEquals([$shortStringValue, $longStringTrimmed, $boolValue], $attributes->get('array'));
$this->assertEquals([$shortStringValue, $longStringTrimmed, true], $attributes->get('array'));
$this->assertEquals(6, $attributes->count());
$this->assertNull($attributes->get('ignored_key'));
}
@ -111,6 +112,7 @@ class AttributesTest extends TestCase
$attributes->setAttribute('bar', null);
$this->assertCount(1, $attributes);
}
public function test_to_array(): void
{
$values = [
@ -119,6 +121,69 @@ class AttributesTest extends TestCase
];
$attributes = new Attributes($values);
$this->assertSame($values, $attributes->toArray());
}
public function test_get_total_added_values(): void
{
$attributes = new Attributes([
'foo' => 'foo',
'bar' => 'bar',
]);
$this->assertEquals(2, $attributes->getTotalAddedValues());
$attributes->setAttribute('baz', 'baz');
$this->assertEquals(3, $attributes->getTotalAddedValues());
}
public function test_unset_get_total_added_values(): void
{
$attributes = new Attributes([
'foo' => 'foo',
'bar' => 'bar',
]);
$this->assertEquals(2, $attributes->getTotalAddedValues());
$attributes->unsetAttribute('foo');
$this->assertEquals(1, $attributes->getTotalAddedValues());
}
public function test_limit_get_total_added_values(): void
{
$attributes = new Attributes([
'foo' => 'foo',
'bar' => 'bar',
], new AttributeLimits(1));
$this->assertEquals(2, $attributes->getTotalAddedValues());
$attributes->setAttribute('baz', 'baz');
$this->assertEquals(3, $attributes->getTotalAddedValues());
}
public function test_count_dropped_attributes(): void
{
$attributes = new Attributes([
'foo' => 'foo',
'bar' => 'bar',
], new AttributeLimits(1));
$this->assertEquals(1, $attributes->getTotalAddedValues() - count($attributes));
$attributes->setAttribute('baz', 'baz');
$this->assertEquals(2, $attributes->getTotalAddedValues() - count($attributes));
}
public function test_is_limit_reached(): void
{
$attributes = new Attributes([
'foo' => 'foo',
'bar' => 'bar',
], new AttributeLimits(3));
$this->assertFalse($attributes->isLimitReached());
$attributes->setAttribute('baz', 'baz');
$this->assertTrue($attributes->isLimitReached());
}
}

View File

@ -7,7 +7,7 @@ namespace OpenTelemetry\Tests\Unit\SDK\Resource;
use AssertWell\PHPUnitGlobalState\EnvironmentVariables;
use Composer\InstalledVersions;
use InvalidArgumentException;
use OpenTelemetry\SDK\Attributes;
use OpenTelemetry\SDK\Common\Attribute\Attributes;
use OpenTelemetry\SDK\Resource\Detectors;
use OpenTelemetry\SDK\Resource\ResourceInfo;
use OpenTelemetry\SemConv\ResourceAttributes;

View File

@ -4,7 +4,7 @@ declare(strict_types=1);
namespace OpenTelemetry\Tests\Unit\SDK\Trace;
use OpenTelemetry\SDK\AttributesInterface;
use OpenTelemetry\SDK\Common\Attribute\AttributesInterface;
use OpenTelemetry\SDK\Trace\Event;
use OpenTelemetry\Tests\Unit\SDK\Util\TestClock;
use PHPUnit\Framework\TestCase;

View File

@ -6,7 +6,7 @@ namespace OpenTelemetry\Tests\Unit\SDK\Trace;
use OpenTelemetry\API\Trace as API;
use OpenTelemetry\API\Trace\SpanKind;
use OpenTelemetry\SDK\AttributesInterface;
use OpenTelemetry\SDK\Common\Attribute\AttributesInterface;
use OpenTelemetry\SDK\InstrumentationLibrary;
use OpenTelemetry\SDK\Resource\ResourceInfo;
use OpenTelemetry\SDK\Trace\ImmutableSpan;

View File

@ -5,7 +5,7 @@ declare(strict_types=1);
namespace OpenTelemetry\Tests\Unit\SDK\Trace;
use OpenTelemetry\API\Trace as API;
use OpenTelemetry\SDK\AttributesInterface;
use OpenTelemetry\SDK\Common\Attribute\AttributesInterface;
use OpenTelemetry\SDK\Trace\Link;
use PHPUnit\Framework\TestCase;

View File

@ -5,7 +5,7 @@ declare(strict_types=1);
namespace OpenTelemetry\Tests\Unit\SDK\Trace;
use OpenTelemetry\API\Trace\TraceStateInterface;
use OpenTelemetry\SDK\Attributes;
use OpenTelemetry\SDK\Common\Attribute\Attributes;
use OpenTelemetry\SDK\Trace\SamplingResult;
use PHPUnit\Framework\TestCase;

View File

@ -7,7 +7,7 @@ namespace OpenTelemetry\Tests\Unit\SDK\Trace\SpanExporter;
use OpenTelemetry\API\Trace\SpanContextInterface;
use OpenTelemetry\API\Trace\SpanKind;
use OpenTelemetry\API\Trace\TraceStateInterface;
use OpenTelemetry\SDK\AttributesInterface;
use OpenTelemetry\SDK\Common\Attribute\AttributesInterface;
use OpenTelemetry\SDK\Resource\ResourceInfo;
use OpenTelemetry\SDK\Trace\EventInterface;
use OpenTelemetry\SDK\Trace\LinkInterface;

View File

@ -14,9 +14,9 @@ use OpenTelemetry\API\Trace\NonRecordingSpan;
use OpenTelemetry\API\Trace\SpanContext;
use OpenTelemetry\Context\Context;
use OpenTelemetry\SDK\AbstractClock;
use OpenTelemetry\SDK\Attributes;
use OpenTelemetry\SDK\AttributesInterface;
use OpenTelemetry\SDK\ClockInterface;
use OpenTelemetry\SDK\Common\Attribute\Attributes;
use OpenTelemetry\SDK\Common\Attribute\AttributesInterface;
use OpenTelemetry\SDK\InstrumentationLibrary;
use OpenTelemetry\SDK\Resource\ResourceInfo;
use OpenTelemetry\SDK\Trace\Event;

View File

@ -8,8 +8,8 @@ use function count;
use function max;
use OpenTelemetry\API\Trace as API;
use OpenTelemetry\SDK\AbstractClock;
use OpenTelemetry\SDK\Attributes;
use OpenTelemetry\SDK\AttributesInterface;
use OpenTelemetry\SDK\Common\Attribute\Attributes;
use OpenTelemetry\SDK\Common\Attribute\AttributesInterface;
use OpenTelemetry\SDK\InstrumentationLibrary;
use OpenTelemetry\SDK\Resource\ResourceInfo;
use OpenTelemetry\SDK\Trace as SDK;