o11y-8.x-1.x-dev/modules/o11y_traces/src/Plugin/Tracer/OpenTelemetryTracer.php

modules/o11y_traces/src/Plugin/Tracer/OpenTelemetryTracer.php
<?php

declare(strict_types=1);

namespace Drupal\o11y_traces\Plugin\Tracer;

use Drupal\tracer\TracerInterface;
use OpenTelemetry\API\Trace\SpanInterface;
use OpenTelemetry\API\Trace\TracerInterface as OTELTracerInterface;
use OpenTelemetry\Contrib\OtlpHttp\Exporter;
use OpenTelemetry\SDK\Common\Time\SystemClock;
use OpenTelemetry\SDK\Trace\SpanProcessor\BatchSpanProcessor;
use OpenTelemetry\SDK\Trace\SpanProcessor\SimpleSpanProcessor;
use OpenTelemetry\SDK\Trace\TracerProvider;

/**
 * Tracer that uses OpenTelemetry as a backend.
 *
 * @Tracer(
 *   id = "o11y_tracer",
 *   label = @Translation("OpenTelemetry Tracer"),
 *   description = @Translation("OpenTelemetry Tracer"),
 *   )
 */
class OpenTelemetryTracer implements TracerInterface {

  /**
   * The OpenTelemetry Tracer.
   *
   * @var \OpenTelemetry\API\Trace\TracerInterface
   */
  private OTELTracerInterface $tracer;

  /**
   * OpenTelemetryTracer constructor.
   */
  public function __construct() {
    $tracerProvider = new TracerProvider(
      new BatchSpanProcessor(
        Exporter::fromConnectionString(),
        new SystemClock(),
      )
    );

    $this->tracer = $tracerProvider->getTracer('drupal.o11y');
  }

  /**
   * {@inheritdoc}
   */
  public function start(string $category, string $name, array $attributes = []): object {
    $attributes['name'] = $name;

    return $this->tracer->spanBuilder($category)
      ->setAttributes($attributes)
      ->startSpan();
  }

  /**
   * {@inheritdoc}
   */
  public function openSection(object $span): object {
    $span->activate();

    return $span;
  }

  /**
   * {@inheritdoc}
   */
  public function closeSection(object $span): object {
    return $span;
  }

  /**
   * {@inheritdoc}
   */
  public function stop(object $span): void {
    assert($span instanceof SpanInterface);
    $span->end();
  }

  /**
   * {@inheritdoc}
   */
  public function getEvents(): array {
    return [];
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc