Merge bcb1f9cebf
into a581a2b145
This commit is contained in:
commit
a1f935bb8a
8 changed files with 75 additions and 59 deletions
|
@ -18,6 +18,8 @@ composer require superbalist/laravel-prometheus-exporter
|
||||||
```
|
```
|
||||||
|
|
||||||
Register the service provider in app.php
|
Register the service provider in app.php
|
||||||
|
|
||||||
|
#### Laravel
|
||||||
```php
|
```php
|
||||||
'providers' => [
|
'providers' => [
|
||||||
// ...
|
// ...
|
||||||
|
@ -33,6 +35,11 @@ Register the facade in app.php
|
||||||
]
|
]
|
||||||
```
|
```
|
||||||
|
|
||||||
|
#### Lumen
|
||||||
|
```php
|
||||||
|
$app->register(Superbalist\LaravelPrometheusExporter\LumenPrometheusServiceProvider::class);
|
||||||
|
```
|
||||||
|
|
||||||
## Configuration
|
## Configuration
|
||||||
|
|
||||||
The package has a default configuration which uses the following environment variables.
|
The package has a default configuration which uses the following environment variables.
|
||||||
|
|
25
src/LumenPrometheusServiceProvider.php
Normal file
25
src/LumenPrometheusServiceProvider.php
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Superbalist\LaravelPrometheusExporter;
|
||||||
|
|
||||||
|
class LumenPrometheusServiceProvider extends PrometheusServiceProvider
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Publish files.
|
||||||
|
*/
|
||||||
|
protected function publishFiles()
|
||||||
|
{
|
||||||
|
// do nothing
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Load routes.
|
||||||
|
*/
|
||||||
|
protected function loadRoutes()
|
||||||
|
{
|
||||||
|
$this->app->router
|
||||||
|
->group(['namespace' => 'Superbalist\LaravelPrometheusExporter'], function ($router) {
|
||||||
|
require __DIR__ . '/lumen_routes.php';
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
|
@ -2,40 +2,25 @@
|
||||||
|
|
||||||
namespace Superbalist\LaravelPrometheusExporter;
|
namespace Superbalist\LaravelPrometheusExporter;
|
||||||
|
|
||||||
use Illuminate\Contracts\Routing\ResponseFactory;
|
use Illuminate\Http\Response;
|
||||||
use Illuminate\Routing\Controller;
|
use Illuminate\Routing\Controller;
|
||||||
use Prometheus\RenderTextFormat;
|
use Prometheus\RenderTextFormat;
|
||||||
|
|
||||||
class MetricsController extends Controller
|
class MetricsController extends Controller
|
||||||
{
|
{
|
||||||
/**
|
|
||||||
* @var ResponseFactory
|
|
||||||
*/
|
|
||||||
protected $responseFactory;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var PrometheusExporter
|
* @var PrometheusExporter
|
||||||
*/
|
*/
|
||||||
protected $prometheusExporter;
|
protected $prometheusExporter;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param ResponseFactory $responseFactory
|
|
||||||
* @param PrometheusExporter $prometheusExporter
|
* @param PrometheusExporter $prometheusExporter
|
||||||
*/
|
*/
|
||||||
public function __construct(ResponseFactory $responseFactory, PrometheusExporter $prometheusExporter)
|
public function __construct(PrometheusExporter $prometheusExporter)
|
||||||
{
|
{
|
||||||
$this->responseFactory = $responseFactory;
|
|
||||||
$this->prometheusExporter = $prometheusExporter;
|
$this->prometheusExporter = $prometheusExporter;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @return ResponseFactory
|
|
||||||
*/
|
|
||||||
public function getResponseFactory()
|
|
||||||
{
|
|
||||||
return $this->responseFactory;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return PrometheusExporter
|
* @return PrometheusExporter
|
||||||
*/
|
*/
|
||||||
|
@ -59,6 +44,6 @@ class MetricsController extends Controller
|
||||||
$renderer = new RenderTextFormat();
|
$renderer = new RenderTextFormat();
|
||||||
$result = $renderer->render($metrics);
|
$result = $renderer->render($metrics);
|
||||||
|
|
||||||
return $this->responseFactory->make($result, 200, ['Content-Type' => RenderTextFormat::MIME_TYPE]);
|
return Response::create($result, 200, ['Content-Type' => RenderTextFormat::MIME_TYPE]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,12 +14,11 @@ class PrometheusServiceProvider extends ServiceProvider
|
||||||
*/
|
*/
|
||||||
public function boot()
|
public function boot()
|
||||||
{
|
{
|
||||||
$this->publishes([
|
$this->publishFiles();
|
||||||
__DIR__ . '/../config/prometheus.php' => config_path('prometheus.php'),
|
$this->loadRoutes();
|
||||||
]);
|
|
||||||
|
|
||||||
if (config('prometheus.metrics_route_enabled')) {
|
if (config('prometheus.metrics_route_enabled')) {
|
||||||
$this->loadRoutesFrom(__DIR__ . '/routes.php');
|
$this->loadRoutes();
|
||||||
}
|
}
|
||||||
|
|
||||||
$exporter = $this->app->make(PrometheusExporter::class); /* @var PrometheusExporter $exporter */
|
$exporter = $this->app->make(PrometheusExporter::class); /* @var PrometheusExporter $exporter */
|
||||||
|
@ -29,6 +28,24 @@ class PrometheusServiceProvider extends ServiceProvider
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Publish files.
|
||||||
|
*/
|
||||||
|
protected function publishFiles()
|
||||||
|
{
|
||||||
|
$this->publishes([
|
||||||
|
__DIR__ . '/../config/prometheus.php' => config_path('prometheus.php'),
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Load routes.
|
||||||
|
*/
|
||||||
|
protected function loadRoutes()
|
||||||
|
{
|
||||||
|
$this->loadRoutesFrom(__DIR__ . '/laravel_routes.php');
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Register bindings in the container.
|
* Register bindings in the container.
|
||||||
*/
|
*/
|
||||||
|
|
7
src/laravel_routes.php
Normal file
7
src/laravel_routes.php
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
Route::get(config('prometheus.metrics_route_path'), [
|
||||||
|
'as' => config('prometheus.metrics_route_name'),
|
||||||
|
'middleware' => config('prometheus.metrics_route_middleware'),
|
||||||
|
'uses' => \Superbalist\LaravelPrometheusExporter\MetricsController::class . '@getMetrics',
|
||||||
|
]);
|
7
src/lumen_routes.php
Normal file
7
src/lumen_routes.php
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
$router->get(config('prometheus.metrics_route_path'), [
|
||||||
|
'as' => config('prometheus.metrics_route_name'),
|
||||||
|
'middleware' => config('prometheus.metrics_route_middleware'),
|
||||||
|
'uses' => 'MetricsController@getMetrics'
|
||||||
|
]);
|
|
@ -1,17 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
/** @var \Illuminate\Routing\Route $route */
|
|
||||||
$route = Route::get(
|
|
||||||
config('prometheus.metrics_route_path'),
|
|
||||||
\Superbalist\LaravelPrometheusExporter\MetricsController::class . '@getMetrics'
|
|
||||||
);
|
|
||||||
|
|
||||||
if ($name = config('prometheus.metrics_route_name')) {
|
|
||||||
$route->name($name);
|
|
||||||
}
|
|
||||||
|
|
||||||
$middleware = config('prometheus.metrics_route_middleware');
|
|
||||||
|
|
||||||
if ($middleware) {
|
|
||||||
$route->middleware($middleware);
|
|
||||||
}
|
|
|
@ -2,8 +2,6 @@
|
||||||
|
|
||||||
namespace Tests;
|
namespace Tests;
|
||||||
|
|
||||||
use Illuminate\Contracts\Routing\ResponseFactory;
|
|
||||||
use Illuminate\Http\Response;
|
|
||||||
use Mockery;
|
use Mockery;
|
||||||
use PHPUnit\Framework\TestCase;
|
use PHPUnit\Framework\TestCase;
|
||||||
use Prometheus\RenderTextFormat;
|
use Prometheus\RenderTextFormat;
|
||||||
|
@ -14,35 +12,22 @@ class MetricsControllerTest extends TestCase
|
||||||
{
|
{
|
||||||
public function testConstruct()
|
public function testConstruct()
|
||||||
{
|
{
|
||||||
$responseFactory = Mockery::mock(ResponseFactory::class);
|
|
||||||
$exporter = Mockery::mock(PrometheusExporter::class);
|
$exporter = Mockery::mock(PrometheusExporter::class);
|
||||||
$controller = new MetricsController($responseFactory, $exporter);
|
$controller = new MetricsController($exporter);
|
||||||
$this->assertSame($responseFactory, $controller->getResponseFactory());
|
|
||||||
$this->assertSame($exporter, $controller->getPrometheusExporter());
|
$this->assertSame($exporter, $controller->getPrometheusExporter());
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testGetMetrics()
|
public function testGetMetrics()
|
||||||
{
|
{
|
||||||
$response = Mockery::mock(Response::class);
|
|
||||||
|
|
||||||
$responseFactory = Mockery::mock(ResponseFactory::class);
|
|
||||||
$responseFactory->shouldReceive('make')
|
|
||||||
->once()
|
|
||||||
->withArgs([
|
|
||||||
"\n",
|
|
||||||
200,
|
|
||||||
['Content-Type' => RenderTextFormat::MIME_TYPE],
|
|
||||||
])
|
|
||||||
->andReturn($response);
|
|
||||||
|
|
||||||
$exporter = Mockery::mock(PrometheusExporter::class);
|
$exporter = Mockery::mock(PrometheusExporter::class);
|
||||||
$exporter->shouldReceive('export')
|
$exporter->shouldReceive('export')
|
||||||
->once()
|
->once()
|
||||||
->andReturn([]);
|
->andReturn([]);
|
||||||
|
|
||||||
$controller = new MetricsController($responseFactory, $exporter);
|
$controller = new MetricsController($exporter);
|
||||||
|
|
||||||
$r = $controller->getMetrics();
|
$response = $controller->getMetrics();
|
||||||
$this->assertSame($response, $r);
|
$this->assertSame(200, $response->getStatusCode());
|
||||||
|
$this->assertSame(RenderTextFormat::MIME_TYPE, $response->headers->get('Content-Type'));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue