diff --git a/README.md b/README.md index c1ba868..dea902b 100644 --- a/README.md +++ b/README.md @@ -1,19 +1,19 @@ -# 🪢 Telemetry +# 🪢 Request Tracker -![the dragon code telemetry](https://preview.dragon-code.pro/the%20dragon%20code/telemetry.svg?brand=symfony&mode=auto) +![the dragon code request-tracker](https://preview.dragon-code.pro/the%20dragon%20code/request-tracker.svg?brand=symfony&mode=auto) [![Stable Version][badge_stable]][link_packagist] [![Total Downloads][badge_downloads]][link_packagist] [![License][badge_license]][link_license] -End-to-end telemetry of inter-service communication. +Request tracking across microservices. ## Installation -You can install the **Telemetry** package via [Composer](https://getcomposer.org): +You can install the **Request Tracker** package via [Composer](https://getcomposer.org): ```Bash -composer require dragon-code/telemetry +composer require dragon-code/request-tracker ``` ## Basic Usage @@ -21,18 +21,18 @@ composer require dragon-code/telemetry ### Using Default Header Names ```php -use DragonCode\Telemetry\TelemetryHeader; -use DragonCode\Telemetry\TelemetryRequest; +use DragonCode\RequestTracker\TrackerHeader; +use DragonCode\RequestTracker\TrackerRequest; use Symfony\Component\HttpFoundation\Request; /** @var Request $request */ $request = /* ... */; -$telemetry = new TelemetryRequest($request, new TelemetryHeader); +$tracker = new TrackerRequest($request, new TrackerHeader); -function telemetry(Request $request, ?int $userId = null): Request +function tracker(Request $request, ?int $userId = null): Request { - return (new TelemetryRequest($request, new TelemetryHeader)) + return (new TrackerRequest($request, new TrackerHeader)) ->userId($userId) ->ip() ->traceId() @@ -40,27 +40,27 @@ function telemetry(Request $request, ?int $userId = null): Request } // For the first call -telemetry($request, $user->id); +tracker($request, $user->id); // For subsequent services -telemetry($request); +tracker($request); ``` ### Custom Headers ```php -use DragonCode\Telemetry\TelemetryHeader; -use DragonCode\Telemetry\TelemetryRequest; +use DragonCode\RequestTracker\TrackerHeader; +use DragonCode\RequestTracker\TrackerRequest; use Symfony\Component\HttpFoundation\Request; /** @var Request $request */ $request = /* ... */; -$telemetry = new TelemetryRequest($request, new TelemetryHeader); +$tracker = new TrackerRequest($request, new TrackerHeader); -function telemetry(Request $request, ?int $userId = null): Request +function tracker(Request $request, ?int $userId = null): Request { - return (new TelemetryRequest($request, new TelemetryHeader)) + return (new TrackerRequest($request, new TrackerHeader)) ->userId($userId) ->ip() ->traceId() @@ -70,7 +70,7 @@ function telemetry(Request $request, ?int $userId = null): Request ``` ```php -$item = telemetry($request); +$item = tracker($request); return $item->headers->get('Some-Header'); // 1234 ``` @@ -78,7 +78,7 @@ return $item->headers->get('Some-Header'); // 1234 ```php $request->headers->set('Some-Header', 'qwerty'); -$item = telemetry($request); +$item = tracker($request); return $item->headers->get('Some-Header'); // qwerty ``` @@ -86,9 +86,9 @@ return $item->headers->get('Some-Header'); // qwerty ### Custom Header Names ```php -use DragonCode\Telemetry\TelemetryHeader; +use DragonCode\RequestTracker\TrackerHeader; -return new TelemetryHeader( +return new TrackerHeader( userId: 'Some-User-Id', ip: 'Some-IP', traceId: 'Some-Trace-Id', @@ -100,12 +100,12 @@ return new TelemetryHeader( This package is licensed under the [MIT License](LICENSE). -[badge_downloads]: https://img.shields.io/packagist/dt/dragon-code/telemetry.svg?style=flat-square +[badge_downloads]: https://img.shields.io/packagist/dt/dragon-code/request-tracker.svg?style=flat-square -[badge_license]: https://img.shields.io/packagist/l/dragon-code/telemetry.svg?style=flat-square +[badge_license]: https://img.shields.io/packagist/l/dragon-code/request-tracker.svg?style=flat-square -[badge_stable]: https://img.shields.io/github/v/release/TheDragonCode/telemetry?label=packagist&style=flat-square +[badge_stable]: https://img.shields.io/github/v/release/TheDragonCode/request-tracker?label=packagist&style=flat-square [link_license]: LICENSE -[link_packagist]: https://packagist.org/packages/dragon-code/telemetry +[link_packagist]: https://packagist.org/packages/dragon-code/request-tracker diff --git a/composer.json b/composer.json index 9116585..5d03eea 100644 --- a/composer.json +++ b/composer.json @@ -1,6 +1,6 @@ { - "name": "dragon-code/telemetry", - "description": "End-to-end telemetry of inter-service communication", + "name": "dragon-code/request-tracker", + "description": "Request tracking across microservices", "license": "MIT", "type": "library", "authors": [ @@ -23,7 +23,7 @@ "minimum-stability": "stable", "autoload": { "psr-4": { - "DragonCode\\Telemetry\\": "src/" + "DragonCode\\RequestTracker\\": "src/" } }, "autoload-dev": { diff --git a/src/TelemetryHeader.php b/src/TelemetryHeader.php deleted file mode 100644 index 42ab036..0000000 --- a/src/TelemetryHeader.php +++ /dev/null @@ -1,14 +0,0 @@ -userId)->toBe('X-Telemetry-User-Id') - ->and($header->ip)->toBe('X-Telemetry-Ip') - ->and($header->traceId)->toBe('X-Telemetry-Trace-Id'); + expect($header->userId)->toBe('X-Tracker-User-Id') + ->and($header->ip)->toBe('X-Tracker-Ip') + ->and($header->traceId)->toBe('X-Tracker-Trace-Id'); }); it('accepts custom header names', function () { - $header = new TelemetryHeader( + $header = new TrackerHeader( userId : 'Some-User-Id', ip : 'Some-IP', traceId: 'Some-Trace-Id', diff --git a/tests/Unit/Request/CustomTest.php b/tests/Unit/Request/CustomTest.php index 9000595..7237257 100644 --- a/tests/Unit/Request/CustomTest.php +++ b/tests/Unit/Request/CustomTest.php @@ -2,16 +2,16 @@ declare(strict_types=1); -use DragonCode\Telemetry\TelemetryHeader; -use DragonCode\Telemetry\TelemetryRequest; +use DragonCode\RequestTracker\TrackerHeader; +use DragonCode\RequestTracker\TrackerRequest; use Symfony\Component\HttpFoundation\Request; it('sets header from callback when header is absent and casts ints to strings', function () { $headerName = 'Some-Header'; $request = makeRequest(); - $header = new TelemetryHeader; - $telemetry = new TelemetryRequest($request, $header); + $header = new TrackerHeader; + $telemetry = new TrackerRequest($request, $header); $telemetry->custom($headerName, function (Request $req) { expect($req)->toBeInstanceOf(Request::class); @@ -28,8 +28,8 @@ $request = makeRequest([$headerName => 'qwerty']); $called = false; - $header = new TelemetryHeader; - $telemetry = new TelemetryRequest($request, $header); + $header = new TrackerHeader; + $telemetry = new TrackerRequest($request, $header); $telemetry->custom($headerName, function () use (&$called) { $called = true; // must remain false if existing header is used diff --git a/tests/Unit/Request/GetRequestTest.php b/tests/Unit/Request/GetRequestTest.php index 12db7f1..aa026d9 100644 --- a/tests/Unit/Request/GetRequestTest.php +++ b/tests/Unit/Request/GetRequestTest.php @@ -2,13 +2,13 @@ declare(strict_types=1); -use DragonCode\Telemetry\TelemetryHeader; -use DragonCode\Telemetry\TelemetryRequest; +use DragonCode\RequestTracker\TrackerHeader; +use DragonCode\RequestTracker\TrackerRequest; it('returns the same Request instance via getRequest()', function () { - $header = new TelemetryHeader; + $header = new TrackerHeader; $request = makeRequest(); - $telemetry = new TelemetryRequest($request, $header); + $telemetry = new TrackerRequest($request, $header); expect($telemetry->getRequest())->toBe($request); }); diff --git a/tests/Unit/Request/IpTest.php b/tests/Unit/Request/IpTest.php index 7926f6d..1c0f337 100644 --- a/tests/Unit/Request/IpTest.php +++ b/tests/Unit/Request/IpTest.php @@ -2,26 +2,26 @@ declare(strict_types=1); -use DragonCode\Telemetry\TelemetryHeader; -use DragonCode\Telemetry\TelemetryRequest; +use DragonCode\RequestTracker\TrackerHeader; +use DragonCode\RequestTracker\TrackerRequest; it('gets ip with correct precedence and sets header via ip()', function () { - $header = new TelemetryHeader; + $header = new TrackerHeader; // 1) If telemetry header exists, it wins $request = makeRequest([$header->ip => '203.0.113.10']); - $telemetry = new TelemetryRequest($request, $header); + $telemetry = new TrackerRequest($request, $header); expect($telemetry->getIp())->toBe('203.0.113.10'); // 2) Else HTTP_X_REAL_IP (non-standard header name checked by the class) $request = makeRequest(); $request->headers->set('HTTP_X_REAL_IP', '198.51.100.20'); - $telemetry = new TelemetryRequest($request, $header); + $telemetry = new TrackerRequest($request, $header); expect($telemetry->getIp())->toBe('198.51.100.20'); // 3) Else client ip (REMOTE_ADDR) $request = makeRequest([], ['REMOTE_ADDR' => '192.0.2.30']); - $telemetry = new TelemetryRequest($request, $header); + $telemetry = new TrackerRequest($request, $header); expect($telemetry->getIp())->toBe('192.0.2.30'); // 4) ip() without argument sets header from getIp() diff --git a/tests/Unit/Request/TrackIdTest.php b/tests/Unit/Request/TrackIdTest.php index 67278c7..2ff6462 100644 --- a/tests/Unit/Request/TrackIdTest.php +++ b/tests/Unit/Request/TrackIdTest.php @@ -2,21 +2,21 @@ declare(strict_types=1); -use DragonCode\Telemetry\TelemetryHeader; -use DragonCode\Telemetry\TelemetryRequest; +use DragonCode\RequestTracker\TrackerHeader; +use DragonCode\RequestTracker\TrackerRequest; use Ramsey\Uuid\Uuid; it('gets or sets trace id, generating a UUID v4 when absent', function () { - $header = new TelemetryHeader; + $header = new TrackerHeader; // 1) If header exists, return it $request = makeRequest([$header->traceId => 'trace-123']); - $telemetry = new TelemetryRequest($request, $header); + $telemetry = new TrackerRequest($request, $header); expect($telemetry->getTraceId())->toBe('trace-123'); // 2) When absent, generate UUID v4 $request = makeRequest(); - $telemetry = new TelemetryRequest($request, $header); + $telemetry = new TrackerRequest($request, $header); $generated = $telemetry->getTraceId(); expect(Uuid::isValid($generated))->toBeTrue() ->and(Uuid::fromString($generated)->getVersion())->toBe(4); diff --git a/tests/Unit/Request/UserIdTest.php b/tests/Unit/Request/UserIdTest.php index 16bacde..24683c7 100644 --- a/tests/Unit/Request/UserIdTest.php +++ b/tests/Unit/Request/UserIdTest.php @@ -2,34 +2,34 @@ declare(strict_types=1); -use DragonCode\Telemetry\TelemetryHeader; -use DragonCode\Telemetry\TelemetryRequest; +use DragonCode\RequestTracker\TrackerHeader; +use DragonCode\RequestTracker\TrackerRequest; it('sets and gets user id with string and int, falling back to existing header or 0', function () { - $header = new TelemetryHeader; + $header = new TrackerHeader; // 1) Explicit string $request = makeRequest(); - $telemetry = new TelemetryRequest($request, $header); + $telemetry = new TrackerRequest($request, $header); $telemetry->userId('42'); expect($request->headers->get($header->userId))->toBe('42') ->and($telemetry->getUserId())->toBe('42'); // 2) Explicit int should be cast to string $request = makeRequest(); - $telemetry = new TelemetryRequest($request, $header); + $telemetry = new TrackerRequest($request, $header); $telemetry->userId(7); expect($request->headers->get($header->userId))->toBe('7'); // 3) Fallback to existing header when null $request = makeRequest([$header->userId => '555']); - $telemetry = new TelemetryRequest($request, $header); + $telemetry = new TrackerRequest($request, $header); $telemetry->userId(null); expect($request->headers->get($header->userId))->toBe('555') ->and($telemetry->getUserId())->toBe('555'); // 4) getUserId() returns '0' when nothing present $request = makeRequest(); - $telemetry = new TelemetryRequest($request, $header); + $telemetry = new TrackerRequest($request, $header); expect($telemetry->getUserId())->toBe('0'); });