Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions .github/ISSUE_TEMPLATE/bug_report.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
name: Bug Report
description: Report an Issue or Bug with the Laravel Telemetry Package
description: Report an Issue or Bug with the Laravel Request Tracker Package
labels: [ "bug" ]

body:
Expand All @@ -23,9 +23,9 @@ body:
validations:
required: true
- type: input
id: laravel-telemetry-version
id: laravel-request-tracker-version
attributes:
label: Laravel Telemetry Version
label: Laravel Request Tracker Version
description: What version of our Package are you running? Please be as specific as possible
placeholder: 1.0.0
- type: input
Expand Down
26 changes: 13 additions & 13 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,45 +1,45 @@
# 🪢 Laravel Telemetry
# 🪢 Laravel Request Tracker

![the dragon code laravel telemetry](https://preview.dragon-code.pro/the%20dragon%20code/telemetry.svg?brand=laravel&mode=auto)
![the dragon code laravel request tracker](https://preview.dragon-code.pro/the%20dragon%20code/request-tracker.svg?brand=laravel&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.
Laravel adapter for dragon-code/request-tracker to trace inter-service request chains.

## Installation

You can install the **Laravel Telemetry** package via [Composer](https://getcomposer.org):
You can install the **Laravel Request Tracker** package via [Composer](https://getcomposer.org):

```Bash
composer require dragon-code/laravel-telemetry
composer require dragon-code/laravel-request-tracker
```

You can publish the config file with:

```bash
php artisan vendor:publish --tag="telemetry"
php artisan vendor:publish --tag="tracker"
```

## Basic Usage

Register the middleware:

```php
use DragonCode\LaravelTracker\Http\Middleware\TelemetryMiddleware;
use DragonCode\LaravelRequestTracker\Http\Middleware\RequestTrackerMiddleware;
use Illuminate\Foundation\Configuration\Middleware;

->withMiddleware(function (Middleware $middleware): void {
$middleware->prepend(TelemetryMiddleware::class);
$middleware->prepend(RequestTrackerMiddleware::class);
})
```

That's all 🙂

## How It Works

The middleware monitors telemetry headers in incoming requests and, when present,
The middleware monitors request tracker headers in incoming requests and, when present,
automatically injects them into the application context.

This makes it possible to build chains of inter-service requests with filtering by an identifier.
Expand All @@ -49,12 +49,12 @@ This makes it possible to build chains of inter-service requests with filtering
This package is licensed under the [MIT License](LICENSE).


[badge_downloads]: https://img.shields.io/packagist/dt/dragon-code/laravel-telemetry.svg?style=flat-square
[badge_downloads]: https://img.shields.io/packagist/dt/dragon-code/laravel-request-tracker.svg?style=flat-square

[badge_license]: https://img.shields.io/packagist/l/dragon-code/laravel-telemetry.svg?style=flat-square
[badge_license]: https://img.shields.io/packagist/l/dragon-code/laravel-request-tracker.svg?style=flat-square

[badge_stable]: https://img.shields.io/github/v/release/TheDragonCode/laravel-telemetry?label=packagist&style=flat-square
[badge_stable]: https://img.shields.io/github/v/release/TheDragonCode/laravel-request-tracker?label=packagist&style=flat-square

[link_license]: LICENSE

[link_packagist]: https://packagist.org/packages/dragon-code/laravel-telemetry
[link_packagist]: https://packagist.org/packages/dragon-code/laravel-request-tracker
10 changes: 5 additions & 5 deletions composer.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "dragon-code/laravel-telemetry",
"description": "End-to-end telemetry of inter-service communication",
"name": "dragon-code/laravel-request-tracker",
"description": "Laravel adapter for dragon-code/request-tracker to trace inter-service request chains",
"license": "MIT",
"type": "library",
"authors": [
Expand All @@ -11,7 +11,7 @@
],
"require": {
"php": "^8.2",
"dragon-code/telemetry": "^1.0",
"dragon-code/request-tracker": "^1.1",
"illuminate/http": "^11.0 || ^12.0",
"illuminate/support": "^11.0 || ^12.0"
},
Expand All @@ -25,7 +25,7 @@
"minimum-stability": "stable",
"autoload": {
"psr-4": {
"DragonCode\\LaravelTracker\\": "src/"
"DragonCode\\LaravelRequestTracker\\": "src/"
}
},
"autoload-dev": {
Expand All @@ -43,7 +43,7 @@
"extra": {
"laravel": {
"providers": [
"DragonCode\\LaravelTracker\\LaravelTelemetryServiceProvider"
"DragonCode\\LaravelRequestTracker\\LaravelRequestTrackerServiceProvider"
]
}
},
Expand Down
13 changes: 6 additions & 7 deletions config/telemetry.php → config/request-tracker.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,10 @@

/*
|--------------------------------------------------------------------------
| Laravel Telemetry — configuration
| Laravel Request Tracker
|--------------------------------------------------------------------------
|
| Here you can configure the behavior of the telemetry collection package.
| Here you can configure the behavior of the request tracking package.
| The file reads your code at runtime and is not cached separately.
| If necessary, publish the configuration file and adjust the values to
| your needs.
Expand All @@ -26,7 +26,7 @@
|
*/
'context' => [
'key' => 'telemetry',
'key' => 'tracker',
],

/*
Expand All @@ -41,14 +41,13 @@
|
*/
'headers' => [

// Authenticated user's identifier (if any)
'user_id' => 'X-Telemetry-User-Id',
'user_id' => 'X-Tracker-User-Id',

// Client IP address captured on ingress
'ip' => 'X-Telemetry-Ip',
'ip' => 'X-Tracker-Ip',

// Request trace identifier (trace/span)
'trace_id' => 'X-Telemetry-Trace-Id',
'trace_id' => 'X-Tracker-Trace-Id',
],
];
69 changes: 69 additions & 0 deletions src/Http/Middleware/RequestTrackerMiddleware.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
<?php

declare(strict_types=1);

namespace DragonCode\LaravelRequestTracker\Http\Middleware;

use Closure;
use DragonCode\RequestTracker\TrackerHeader;
use DragonCode\RequestTracker\TrackerRequest;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Context;
use Symfony\Component\HttpFoundation\Response;

use function config;

class RequestTrackerMiddleware
{
public function handle(Request $request, Closure $next): Response
{
$tracker = $this->tracker($request);

$this->trace($tracker);
$this->context($tracker);

return $this->modify($tracker, $next);
}

protected function modify(TrackerRequest $tracker, Closure $next): Response
{
return $next(
$tracker->getRequest()
);
}

protected function trace(TrackerRequest $tracker): void
{
$tracker->userId($tracker->getRequest()?->user()?->getKey());
$tracker->ip();
$tracker->traceId();
}

protected function tracker(Request $request): TrackerRequest
{
return new TrackerRequest($request, $this->headers());
}

protected function headers(): TrackerHeader
{
return new TrackerHeader(
userId : config()?->string('request-tracker.headers.user_id'),
ip : config()?->string('request-tracker.headers.ip'),
traceId: config()?->string('request-tracker.headers.trace_id'),
);
}

protected function context(TrackerRequest $request): void
{
Context::add($this->key(), [
'userId' => $request->getUserId(),
'ip' => $request->getIp(),
'traceId' => $request->getTraceId(),
]);
}

protected function key(): string
{
return config('request-tracker.context.key');
}
}
69 changes: 0 additions & 69 deletions src/Http/Middleware/TelemetryMiddleware.php

This file was deleted.

22 changes: 22 additions & 0 deletions src/LaravelRequestTrackerServiceProvider.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
<?php

declare(strict_types=1);

namespace DragonCode\LaravelRequestTracker;

use Illuminate\Support\ServiceProvider;

class LaravelRequestTrackerServiceProvider extends ServiceProvider
{
public function boot(): void
{
$this->publishes([
__DIR__ . '/../config/request-tracker.php' => $this->app->configPath('request-tracker.php'),
], ['config', 'tracker']);
}

public function register(): void
{
$this->mergeConfigFrom(__DIR__ . '/../config/request-tracker.php', 'request-tracker');
}
}
22 changes: 0 additions & 22 deletions src/LaravelTelemetryServiceProvider.php

This file was deleted.

Loading