From 865ecc87963dc3b26e66296616eef2a1cc41ac3f Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Wed, 25 Oct 2023 12:55:09 +0300 Subject: move to psr-4 autoloader --- classes/Tracer.php | 216 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 216 insertions(+) create mode 100644 classes/Tracer.php (limited to 'classes/Tracer.php') diff --git a/classes/Tracer.php b/classes/Tracer.php new file mode 100644 index 000000000..7163adb90 --- /dev/null +++ b/classes/Tracer.php @@ -0,0 +1,216 @@ +create($OPENTELEMETRY_ENDPOINT, 'application/x-protobuf'); + $exporter = new SpanExporter($transport); + + $resource = ResourceInfoFactory::emptyResource()->merge( + ResourceInfo::create(Attributes::create( + [ResourceAttributes::SERVICE_NAME => Config::get(Config::OPENTELEMETRY_SERVICE)] + ), ResourceAttributes::SCHEMA_URL), + ); + + $this->tracerProvider = TracerProvider::builder() + ->addSpanProcessor(new SimpleSpanProcessor($exporter)) + ->setResource($resource) + ->setSampler(new ParentBased(new AlwaysOnSampler())) + ->build(); + + $this->tracer = $this->tracerProvider->getTracer('io.opentelemetry.contrib.php'); + + $context = TraceContextPropagator::getInstance()->extract(getallheaders()); + + $span = $this->tracer->spanBuilder($_SESSION['name'] ?? 'not logged in') + ->setParent($context) + ->setSpanKind(SpanKind::KIND_SERVER) + ->setAttribute('php.request', json_encode($_REQUEST)) + ->setAttribute('php.server', json_encode($_SERVER)) + ->setAttribute('php.session', json_encode($_SESSION ?? [])) + ->startSpan(); + + $scope = $span->activate(); + + register_shutdown_function(function() use ($span, $scope) { + $span->end(); + $scope->detach(); + $this->tracerProvider->shutdown(); + }); + } + } + + /** + * @param string $name + * @return OpenTelemetry\API\Trace\SpanInterface + */ + private function _start(string $name) { + if ($this->tracer != null) { + $span = $this->tracer + ->spanBuilder($name) + ->setSpanKind(SpanKind::KIND_SERVER) + ->startSpan(); + + $span->activate(); + } else { + $span = new DummySpanInterface(); + } + + return $span; + } + + /** + * @param string $name + * @return OpenTelemetry\API\Trace\SpanInterface + */ + public static function start(string $name) { + return self::get_instance()->_start($name); + } + + public static function get_instance() : Tracer { + if (self::$instance == null) + self::$instance = new self(); + + return self::$instance; + } +} -- cgit v1.2.3-54-g00ecf