From cdd7ad020e165fe680703b6d3319b908b682fb7a Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Fri, 20 Oct 2023 17:12:29 +0300 Subject: jaeger-client -> opentelemetry --- classes/tracer.php | 79 +++++++++++++++++++++++++++++++----------------------- 1 file changed, 45 insertions(+), 34 deletions(-) (limited to 'classes/tracer.php') diff --git a/classes/tracer.php b/classes/tracer.php index 5a23dfeba..3a734641e 100644 --- a/classes/tracer.php +++ b/classes/tracer.php @@ -1,61 +1,72 @@ [ - 'type' => \Jaeger\SAMPLER_TYPE_CONST, - 'param' => true, - ], - 'logging' => true, - "local_agent" => [ - "reporting_host" => $jaeger_host, - "reporting_port" => 6832 - ], - 'dispatch_mode' => \Jaeger\Config::JAEGER_OVER_BINARY_UDP, - ], - Config::get(Config::JAEGER_SERVICE_NAME) - ); - - $config->initializeTracer(); - - register_shutdown_function(function() { - $tracer = GlobalTracer::get(); - $tracer->flush(); - }); + $opentelemetry_host = Config::get(Config::OPENTELEMETRY_HOST); + + if ($opentelemetry_host) { + $transport = (new OtlpHttpTransportFactory())->create("http://$opentelemetry_host/v1/traces", 'application/x-protobuf'); + $exporter = new SpanExporter($transport); + } else { + $exporter = new InMemoryExporter(); } + + $tracerProvider = new TracerProvider(new SimpleSpanProcessor($exporter)); + $this->tracer = $tracerProvider->getTracer('io.opentelemetry.contrib.php'); + + $context = TraceContextPropagator::getInstance()->extract(getallheaders()); + $span = $this->tracer->spanBuilder(Config::get(Config::OPENTELEMETRY_SERVICE)) + ->setParent($context) + ->startSpan(); + + $span->activate(); + + register_shutdown_function(function() use ($span, $tracerProvider) { + $span->end(); + + $tracerProvider->shutdown(); + }); } /** * @param string $name * @param array|array> $tags * @param array $args - * @return Scope + * @return Span */ - private function _start(string $name, array $tags = [], array $args = []): Scope { - $tracer = GlobalTracer::get(); + private function _start(string $name, array $tags = [], array $args = []) { + $span = $this->tracer->spanBuilder($name)->startSpan(); + + foreach ($tags as $k => $v) { + $span->setAttribute($k, $v); + } + + $span->setAttribute("func.args", json_encode($args)); - $tags['args'] = json_encode($args); + $span->activate(); - return $tracer->startActiveSpan($name, ['tags' => $tags]); + return $span; } /** * @param string $name * @param array|array> $tags * @param array $args - * @return Scope + * @return Span */ - public static function start(string $name, array $tags = [], array $args = []) : Scope { + public static function start(string $name, array $tags = [], array $args = []) { return self::get_instance()->_start($name, $tags, $args); } -- cgit v1.2.3