PHP code example of artprima / prometheus-metrics-bundle
1. Go to this page and download the library: Download artprima/prometheus-metrics-bundle library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
artprima / prometheus-metrics-bundle example snippets
// app/AppKernel.php
// ...
class AppKernel extends Kernel
{
public function registerBundles()
{
$bundles = [
// ...
new Artprima\PrometheusMetricsBundle\ArtprimaPrometheusMetricsBundle(),
];
// ...
}
// ...
}
declare(strict_types=1);
namespace App\Metrics;
use Artprima\PrometheusMetricsBundle\Metrics\RequestMetricsCollectorInterface;
use Artprima\PrometheusMetricsBundle\Metrics\TerminateMetricsCollectorInterface;
use Prometheus\CollectorRegistry;
use Symfony\Component\HttpKernel\Event\RequestEvent;
use Symfony\Component\HttpKernel\Event\TerminateEvent;
/**
* Class MyMetricsCollector.
*/
class MyMetricsCollector implements RequestMetricsCollectorInterface, TerminateMetricsCollectorInterface
{
/**
* @var string
*/
private $namespace;
/**
* @var CollectorRegistry
*/
private $collectionRegistry;
public function init(string $namespace, CollectorRegistry $collectionRegistry): void
{
$this->namespace = $namespace;
$this->collectionRegistry = $collectionRegistry;
}
private function incRequestsTotal(?string $method = null, ?string $route = null): void
{
$counter = $this->collectionRegistry->getOrRegisterCounter(
$this->namespace,
'http_requests_total',
'total request count',
['action']
);
$counter->inc(['all']);
if (null !== $method && null !== $route) {
$counter->inc([sprintf('%s-%s', $method, $route)]);
}
}
private function incResponsesTotal(?string $method = null, ?string $route = null): void
{
$counter = $this->collectionRegistry->getOrRegisterCounter(
$this->namespace,
'http_responses_total',
'total response count',
['action']
);
$counter->inc(['all']);
if (null !== $method && null !== $route) {
$counter->inc([sprintf('%s-%s', $method, $route)]);
}
}
// called on the `kernel.request` event
public function collectRequest(RequestEvent $event): void
{
$request = $event->getRequest();
$requestMethod = $request->getMethod();
$requestRoute = $request->attributes->get('_route');
// do not track "OPTIONS" requests
if ('OPTIONS' === $requestMethod) {
return;
}
$this->incRequestsTotal($requestMethod, $requestRoute);
}
// called on the `kernel.terminate` event
public function collectResponse(TerminateEvent $event): void
{
$response = $event->getResponse();
$request = $event->getRequest();
$requestMethod = $request->getMethod();
$requestRoute = $request->attributes->get('_route');
$this->incResponsesTotal($requestMethod, $requestRoute);
}
}
declare(strict_types=1);
namespace App\Metrics;
use Artprima\PrometheusMetricsBundle\StorageFactory\StorageFactoryInterface;
use Prometheus\Storage\Adapter;
class DummyFactory implements StorageFactoryInterface
{
public function getName(): string
{
return 'dummy';
}
public function create(array $options): Adapter
{
return new Dummy($options);
}
}
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.