From 8f3646a9c93a06f76f6abb31020fdb74b4b1fc59 Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Sun, 9 Apr 2023 20:50:33 +0300 Subject: exp: jaeger tracing --- .../src/Jaeger/Mapper/SpanToJaegerMapper.php | 171 +++++++++++++++++++++ 1 file changed, 171 insertions(+) create mode 100644 vendor/jonahgeorge/jaeger-client-php/src/Jaeger/Mapper/SpanToJaegerMapper.php (limited to 'vendor/jonahgeorge/jaeger-client-php/src/Jaeger/Mapper/SpanToJaegerMapper.php') diff --git a/vendor/jonahgeorge/jaeger-client-php/src/Jaeger/Mapper/SpanToJaegerMapper.php b/vendor/jonahgeorge/jaeger-client-php/src/Jaeger/Mapper/SpanToJaegerMapper.php new file mode 100644 index 000000000..da5871904 --- /dev/null +++ b/vendor/jonahgeorge/jaeger-client-php/src/Jaeger/Mapper/SpanToJaegerMapper.php @@ -0,0 +1,171 @@ +specialSpanTags; + } + + /** + * @return string + */ + public function getProcessTagsPrefix(): string + { + return $this->processTagsPrefix; + } + + public function mapSpanToJaeger(Span $span) : JaegerThriftSpan + { + $timestamp = $span->getStartTime(); + $duration = $span->getEndTime() - $span->getStartTime(); + + /** @var Tag[] $tags */ + $tags = []; + + $tags[] = new Tag([ + "key" => COMPONENT, + "vType" => TagType::STRING, + "vStr" => $span->getComponent() ?? $span->getTracer()->getServiceName(), + ]); + + // Handle special tags + $peerService = $span->peer['service_name'] ?? null; + if ($peerService !== null) { + $tags[] = new Tag([ + "key" => PEER_SERVICE, + "vType" => TagType::STRING, + "vStr" => $peerService, + ]); + } + + $peerHostIpv4 = $span->peer['ipv4'] ?? null; + if ($peerHostIpv4 !== null) { + $tags[] = new Tag([ + "key" => PEER_HOST_IPV4, + "vType" => TagType::STRING, + "vStr" => $peerHostIpv4, + ]); + } + + $peerPort = $span->peer['port'] ?? null; + if ($peerPort !== null) { + $tags[] = new Tag([ + "key" => PEER_PORT, + "vType" => TagType::LONG, + "vLong" => $peerPort, + ]); + } + + $spanKind = $span->getKind(); + if ($spanKind !== null) { + $tags[] = new Tag([ + "key" => SPAN_KIND, + "vType" => TagType::STRING, + "vStr" => $spanKind, + ]); + } + + /** @var BinaryAnnotation[] $binaryAnnotationTags */ + $binaryAnnotationTags = $span->getTags(); + foreach ($binaryAnnotationTags as $binaryAnnotationTag) { + if (in_array($binaryAnnotationTag->key, $this->specialSpanTags, true)) { + continue ; + } + + if (strpos($binaryAnnotationTag->key, $this->processTagsPrefix) === 0) { + continue; + } + + $type = ""; + $vkey = ""; + switch ($binaryAnnotationTag->annotation_type) { + case AnnotationType::BOOL: + $type = TagType::BOOL; + $vkey = "vBool"; + break; + case AnnotationType::BYTES: + $type = TagType::BINARY; + $vkey = "vBinary"; + break; + case AnnotationType::DOUBLE: + $type = TagType::DOUBLE; + $vkey = "vDouble"; + break; + case AnnotationType::I16: + case AnnotationType::I32: + case AnnotationType::I64: + $type = TagType::LONG; + $vkey = "vLong"; + break; + default: + $type = TagType::STRING; + $vkey = "vStr"; + } + + $tags[] = new Tag([ + "key" => $binaryAnnotationTag->key, + "vType" => $type, + $vkey => $binaryAnnotationTag->value, + ]); + } + + /** @var Log[] $logs */ + $logs = []; + + $spanLogs = $span->getLogs(); + + foreach ($spanLogs as $spanLog) { + /** @var Tag $fields */ + $fields = []; + + if (!empty($spanLog["fields"])) { + $fields[] = new Tag([ + "key" => "event", + "vType" => TagType::STRING, + "vStr" => json_encode($spanLog["fields"]) + ]); + } + + $logs[] = new Log([ + "timestamp" => $spanLog["timestamp"], + "fields" => $fields + ]); + } + + return new JaegerThriftSpan([ + "traceIdLow" => (int)$span->getContext()->getTraceId(), + "traceIdHigh" => 0, + "spanId" => (int)$span->getContext()->getSpanId(), + "parentSpanId" => (int)$span->getContext()->getParentId(), + "operationName" => $span->getOperationName(), + "startTime" => $timestamp, + "duration" => $duration, + "flags" => (int)$span->isDebug(), + "tags" => $tags, + "logs" => $logs + ]); + } +} -- cgit v1.2.3