function BatchSpanProcessor::__construct
File
-
vendor/
open-telemetry/ sdk/ Trace/ SpanProcessor/ BatchSpanProcessor.php, line 61
Class
Namespace
OpenTelemetry\SDK\Trace\SpanProcessorCode
public function __construct(SpanExporterInterface $exporter, ClockInterface $clock, int $maxQueueSize = self::DEFAULT_MAX_QUEUE_SIZE, int $scheduledDelayMillis = self::DEFAULT_SCHEDULE_DELAY, int $exportTimeoutMillis = self::DEFAULT_EXPORT_TIMEOUT, int $maxExportBatchSize = self::DEFAULT_MAX_EXPORT_BATCH_SIZE, bool $autoFlush = true, ?MeterProviderInterface $meterProvider = null) {
if ($maxQueueSize <= 0) {
throw new InvalidArgumentException(sprintf('Maximum queue size (%d) must be greater than zero', $maxQueueSize));
}
if ($scheduledDelayMillis <= 0) {
throw new InvalidArgumentException(sprintf('Scheduled delay (%d) must be greater than zero', $scheduledDelayMillis));
}
if ($exportTimeoutMillis <= 0) {
throw new InvalidArgumentException(sprintf('Export timeout (%d) must be greater than zero', $exportTimeoutMillis));
}
if ($maxExportBatchSize <= 0) {
throw new InvalidArgumentException(sprintf('Maximum export batch size (%d) must be greater than zero', $maxExportBatchSize));
}
if ($maxExportBatchSize > $maxQueueSize) {
throw new InvalidArgumentException(sprintf('Maximum export batch size (%d) must be less than or equal to maximum queue size (%d)', $maxExportBatchSize, $maxQueueSize));
}
$this->maxQueueSize = $maxQueueSize;
$this->scheduledDelayNanos = $scheduledDelayMillis * 1000000;
$this->maxExportBatchSize = $maxExportBatchSize;
$this->exportContext = Context::getCurrent();
$this->queue = new SplQueue();
$this->flush = new SplQueue();
if ($meterProvider === null) {
return;
}
$meter = $meterProvider->getMeter('io.opentelemetry.sdk');
$meter->createObservableUpDownCounter('otel.trace.span_processor.spans', '{spans}', 'The number of sampled spans received by the span processor')
->observe(function (ObserverInterface $observer) : void {
$queued = $this->queue
->count() * $this->maxExportBatchSize + count($this->batch);
$pending = $this->queueSize - $queued;
$processed = $this->processed;
$dropped = $this->dropped;
$observer->observe($queued, self::ATTRIBUTES_QUEUED);
$observer->observe($pending, self::ATTRIBUTES_PENDING);
$observer->observe($processed, self::ATTRIBUTES_PROCESSED);
$observer->observe($dropped, self::ATTRIBUTES_DROPPED);
});
$meter->createObservableUpDownCounter('otel.trace.span_processor.queue.limit', '{spans}', 'The queue size limit')
->observe(function (ObserverInterface $observer) : void {
$observer->observe($this->maxQueueSize, self::ATTRIBUTES_PROCESSOR);
});
$meter->createObservableUpDownCounter('otel.trace.span_processor.queue.usage', '{spans}', 'The current queue usage')
->observe(function (ObserverInterface $observer) : void {
$queued = $this->queue
->count() * $this->maxExportBatchSize + count($this->batch);
$pending = $this->queueSize - $queued;
$free = $this->maxQueueSize - $this->queueSize;
$observer->observe($queued, self::ATTRIBUTES_QUEUED);
$observer->observe($pending, self::ATTRIBUTES_PENDING);
$observer->observe($free, self::ATTRIBUTES_FREE);
});
}