End-to-end telemetry of inter-service communication.
You can install the Telemetry package via Composer:
composer require dragon-code/telemetry
use DragonCode\Telemetry\TelemetryHeader;
use DragonCode\Telemetry\TelemetryRequest;
use Symfony\Component\HttpFoundation\Request;
/** @var Request $request */
$request = /* ... */;
$telemetry = new TelemetryRequest($request, new TelemetryHeader);
function telemetry(Request $request, ?int $userId = null): Request
{
return (new TelemetryRequest($request, new TelemetryHeader))
->userId($userId)
->ip()
->traceId()
->getRequest();
}
// For the first call
telemetry($request, $user->id);
// For subsequent services
telemetry($request);
use DragonCode\Telemetry\TelemetryHeader;
use DragonCode\Telemetry\TelemetryRequest;
use Symfony\Component\HttpFoundation\Request;
/** @var Request $request */
$request = /* ... */;
$telemetry = new TelemetryRequest($request, new TelemetryHeader);
function telemetry(Request $request, ?int $userId = null): Request
{
return (new TelemetryRequest($request, new TelemetryHeader))
->userId($userId)
->ip()
->traceId()
->custom('Some-Header', fn (Request $request) => 1234
->getRequest();
}
$item = telemetry($request);
return $item->headers->get('Some-Header'); // 1234
$request->headers->set('Some-Header', 'qwerty');
$item = telemetry($request);
return $item->headers->get('Some-Header'); // qwerty
use DragonCode\Telemetry\TelemetryHeader;
return new TelemetryHeader(
userId: 'Some-User-Id',
ip: 'Some-IP',
traceId: 'Some-Trace-Id',
);
This package is licensed under the MIT License.