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

Breadcrumb

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

function MetricRegistry::collectAndPush

Overrides MetricCollectorInterface::collectAndPush

File

vendor/open-telemetry/sdk/Metrics/MetricRegistry/MetricRegistry.php, line 138

Class

MetricRegistry
@internal

Namespace

OpenTelemetry\SDK\Metrics\MetricRegistry

Code

public function collectAndPush(iterable $streamIds) : void {
    $timestamp = $this->clock
        ->now();
    $aggregators = [];
    $observers = [];
    $callbackIds = [];
    foreach ($streamIds as $streamId) {
        $instrumentId = $this->streamToInstrument[$streamId];
        if (!($aggregator = $this->synchronousAggregators[$streamId] ?? null)) {
            $aggregator = $this->asynchronousAggregatorFactories[$streamId]
                ->create();
            $observers[$instrumentId] ??= new MultiObserver($this->attributesFactory, $timestamp);
            $observers[$instrumentId]->writers[] = $aggregator;
            foreach ($this->instrumentToCallbacks[$instrumentId] ?? [] as $callbackId) {
                $callbackIds[$callbackId] = $callbackId;
            }
        }
        $aggregators[$streamId] = $aggregator;
    }
    $noopObserver = new NoopObserver();
    $callbacks = [];
    foreach ($callbackIds as $callbackId) {
        $args = [];
        foreach ($this->asynchronousCallbackArguments[$callbackId] as $instrumentId) {
            $args[] = $observers[$instrumentId] ?? $noopObserver;
        }
        $callback = $this->asynchronousCallbacks[$callbackId];
        $callbacks[] = static fn() => $callback(...$args);
    }
    foreach ($callbacks as $callback) {
        $callback();
    }
    $timestamp = $this->clock
        ->now();
    foreach ($aggregators as $streamId => $aggregator) {
        if ($stream = $this->streams[$streamId] ?? null) {
            $stream->push($aggregator->collect($timestamp));
        }
    }
}
RSS feed
Powered by Drupal