Skip to main content
Drupal API
User account menu
  • Log in

Breadcrumb

  1. Drupal Core 11.1.x
  2. ExplicitBucketHistogramAggregation.php

class ExplicitBucketHistogramAggregation

@implements AggregationInterface<ExplicitBucketHistogramSummary>

Hierarchy

  • class \OpenTelemetry\SDK\Metrics\Aggregation\ExplicitBucketHistogramAggregation implements \OpenTelemetry\SDK\Metrics\AggregationInterface

Expanded class hierarchy of ExplicitBucketHistogramAggregation

1 file declares its use of ExplicitBucketHistogramAggregation
StreamFactory.php in vendor/open-telemetry/sdk/Metrics/MetricFactory/StreamFactory.php

File

vendor/open-telemetry/sdk/Metrics/Aggregation/ExplicitBucketHistogramAggregation.php, line 19

Namespace

OpenTelemetry\SDK\Metrics\Aggregation
View source
final class ExplicitBucketHistogramAggregation implements AggregationInterface {
    
    /**
     * @param list<float|int> $boundaries strictly ascending histogram bucket boundaries
     */
    public function __construct(array $boundaries) {
    }
    public function initialize() : ExplicitBucketHistogramSummary {
        return new ExplicitBucketHistogramSummary(0, 0, +INF, -INF, array_fill(0, count($this->boundaries) + 1, 0));
    }
    
    /**
     * @param ExplicitBucketHistogramSummary $summary
     */
    public function record($summary, $value, AttributesInterface $attributes, ContextInterface $context, int $timestamp) : void {
        $boundariesCount = count($this->boundaries);
        for ($i = 0; $i < $boundariesCount && $this->boundaries[$i] < $value; $i++) {
        }
        $summary->count++;
        $summary->sum += $value;
        $summary->min = self::min($value, $summary->min);
        $summary->max = self::max($value, $summary->max);
        $summary->buckets[$i]++;
    }
    
    /**
     * @param ExplicitBucketHistogramSummary $left
     * @param ExplicitBucketHistogramSummary $right
     */
    public function merge($left, $right) : ExplicitBucketHistogramSummary {
        $count = $left->count + $right->count;
        $sum = $left->sum + $right->sum;
        $min = self::min($left->min, $right->min);
        $max = self::max($left->max, $right->max);
        $buckets = $right->buckets;
        foreach ($left->buckets as $i => $bucketCount) {
            $buckets[$i] += $bucketCount;
        }
        return new ExplicitBucketHistogramSummary($count, $sum, $min, $max, $buckets);
    }
    
    /**
     * @param ExplicitBucketHistogramSummary $left
     * @param ExplicitBucketHistogramSummary $right
     */
    public function diff($left, $right) : ExplicitBucketHistogramSummary {
        $count = -$left->count + $right->count;
        $sum = -$left->sum + $right->sum;
        $min = $left->min > $right->min ? $right->min : NAN;
        $max = $left->max < $right->max ? $right->max : NAN;
        $buckets = $right->buckets;
        foreach ($left->buckets as $i => $bucketCount) {
            $buckets[$i] -= $bucketCount;
        }
        return new ExplicitBucketHistogramSummary($count, $sum, $min, $max, $buckets);
    }
    
    /**
     * @param array<ExplicitBucketHistogramSummary> $summaries
     */
    public function toData(array $attributes, array $summaries, array $exemplars, int $startTimestamp, int $timestamp, $temporality) : Data\Histogram {
        $dataPoints = [];
        foreach ($attributes as $key => $dataPointAttributes) {
            if ($summaries[$key]->count === 0) {
                continue;
            }
            $dataPoints[] = new Data\HistogramDataPoint($summaries[$key]->count, $summaries[$key]->sum, $summaries[$key]->min, $summaries[$key]->max, $summaries[$key]->buckets, $this->boundaries, $dataPointAttributes, $startTimestamp, $timestamp, $exemplars[$key] ?? []);
        }
        return new Data\Histogram($dataPoints, $temporality);
    }
    private static function min(float|int $left, float|int $right) : float|int {
        
        /** @noinspection PhpConditionAlreadyCheckedInspection */
        return $left <= $right ? $left : ($right <= $left ? $right : NAN);
    }
    private static function max(float|int $left, float|int $right) : float|int {
        
        /** @noinspection PhpConditionAlreadyCheckedInspection */
        return $left >= $right ? $left : ($right >= $left ? $right : NAN);
    }

}

Members

Title Sort descending Modifiers Object type Summary Overriden Title
ExplicitBucketHistogramAggregation::diff public function Overrides AggregationInterface::diff
ExplicitBucketHistogramAggregation::initialize public function @psalm-return T Overrides AggregationInterface::initialize
ExplicitBucketHistogramAggregation::max private static function
ExplicitBucketHistogramAggregation::merge public function Overrides AggregationInterface::merge
ExplicitBucketHistogramAggregation::min private static function
ExplicitBucketHistogramAggregation::record public function Overrides AggregationInterface::record
ExplicitBucketHistogramAggregation::toData public function Overrides AggregationInterface::toData
ExplicitBucketHistogramAggregation::__construct public function
RSS feed
Powered by Drupal