First you have to register the Inspector instance inside the application container in order to make the monitoring agent available within the application.
Consider to use to store your project's INGESTION KEY:
$container->set('inspector', function () {
$configuration = new \Inspector\Slim\Configuration('INSPECTOR_INGESTION_KEY');
return new \Inspector\Inspector($configuration);
});
If you are using a Slim 4 skeleton you can add a new container definition in app/dependencies.php file:
use DI\ContainerBuilder;
use Psr\Container\ContainerInterface;
return function (ContainerBuilder $containerBuilder) {
$containerBuilder->addDefinitions([
// Other services definitions...
'inspector' => function (ContainerInterface $container) {
$configuration = new \Inspector\Slim\Configuration('INSPECTOR_INGESTION_KEY');
return new \Inspector\Inspector($configuration);
}
]);
}
Attach the middleware
To monitor all the incoming HTTP traffic you can attach the middleware globally:
$app->get('/home', function () {
// do something...
})->add(\Inspector\Slim\WebRequestMonitoring::class);
Test that everything works
$app->get('/test', function () {
throw new \Exception('My First Exception.');
});
You should receive your first notification in a few seconds.
Add Segments
You can add segments to the transaction's timeline from route functions:
$app->get('/', function (Request $request, Response $response) {
/*
* Retrieve the inspector instance from the container.
*/
$this->get('inspector')->addSegment(function () {
// your code here...
sleep(1);
}, 'sleep');
return $response;
});
If your routes are organized using controllers you need to inject the container in the controller constructor in order to retrieve the inspector agent later during execution:
namespace App\Controllers;
use Psr\Container\ContainerInterface;
use Psr\Http\Message\ResponseInterface as Response;
use Psr\Http\Message\ServerRequestInterface as Request;
class TestRouteController
{
protected $container;
/**
* Inject the container to retrieve the inspector instance later.
*/
public function __construct(ContainerInterface $container)
{
$this->container = $container;
}
public function __invoke(Request $request, Response $response)
{
// Use the inspector instance from the container.
$this->container->get('inspector')->addSegment(function () {
// your code here...
sleep(1);
}, 'sleep');
$response->getBody()->write('Test route.');
return $response;
}
}
You can get an INSPECTOR_INGESTION_KEY creating a new project in your account.