function MetricRegistry::collectAndPush
Overrides MetricCollectorInterface::collectAndPush
File
-
vendor/
open-telemetry/ sdk/ Metrics/ MetricRegistry/ MetricRegistry.php, line 138
Class
- MetricRegistry
- @internal
Namespace
OpenTelemetry\SDK\Metrics\MetricRegistryCode
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));
}
}
}