<?php namespace App\Service\Util\Support\Trace; class TraceContext { private $traceId; private $spanId = 0; private $parentSpanId = 0; public function __construct($traceId = null, $parentSpanId = 0, $spanId = 0) { $this->traceId = $traceId ?? uniqid(); $this->parentSpanId = $parentSpanId; $this->spanId = $spanId; } public static function newFromParent($traceInfo) { $traceContext = new self($traceInfo['traceId'], $traceInfo['spanId']); return $traceContext; } public function getTraceInfo() { return [ 'traceId' => $this->getTraceId(), 'parentSpanId' => $this->getParentSpanId(), 'spanId' => $this->getSpanId() ]; } public function getParentSpanId() { return $this->parentSpanId; } public function getSpanId() { return ++$this->spanId; } public function getTraceId() { return $this->traceId; } }