Skip to content

Latest commit

 

History

History
43 lines (35 loc) · 1.23 KB

simple-trace.md

File metadata and controls

43 lines (35 loc) · 1.23 KB

Simple tracing example

Jaeger

namespace App\Controller;

use Instrumentation\Tracing\Tracing;
use OpenTelemetry\API\Trace\SpanKind;
use OpenTelemetry\API\Trace\TracerInterface;
use OpenTelemetry\API\Trace\TracerProviderInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Contracts\HttpClient\HttpClientInterface;

class CurrentTime
{
    public function __construct(
        private TracerProviderInterface $tracerProvider, 
        private HttpClientInterface $httpClient,
        private LoggerInterface $logger
    ) {
    }

    public function __invoke(Request $request): Response
    {
        $ip = $request->getClientIp();
        $info = $this->httpClient->request('GET', 'http://worldtimeapi.org/api/ip/' . $ip)->toArray();

        $span = $this->getTracer()->spanBuilder('process')->startSpan();
        $result = sprintf('Current time is %s in timezone "%s".', $info['datetime'], $info['timezone']);
        $this->logger->info($result);
        $span->end();

        return new Response($result);
    }

    private function getTracer(): TracerInterface
    {
        return $this->tracerProvider->getTracer(Tracing::NAME);
    }
}