diff --git a/README.md b/README.md index 63c2ceb..73a16b7 100644 --- a/README.md +++ b/README.md @@ -18,6 +18,8 @@ composer require superbalist/laravel-prometheus-exporter ``` Register the service provider in app.php + +#### Laravel ```php 'providers' => [ // ... @@ -33,6 +35,11 @@ Register the facade in app.php ] ``` +#### Lumen +```php +$app->register(Superbalist\LaravelPrometheusExporter\LumenPrometheusServiceProvider::class); +``` + ## Configuration The package has a default configuration which uses the following environment variables. diff --git a/src/LumenPrometheusServiceProvider.php b/src/LumenPrometheusServiceProvider.php new file mode 100644 index 0000000..86510e0 --- /dev/null +++ b/src/LumenPrometheusServiceProvider.php @@ -0,0 +1,25 @@ +app->router + ->group(['namespace' => 'Superbalist\LaravelPrometheusExporter'], function ($router) { + require __DIR__ . '/lumen_routes.php'; + }); + } +} diff --git a/src/MetricsController.php b/src/MetricsController.php index a481479..11d10ac 100644 --- a/src/MetricsController.php +++ b/src/MetricsController.php @@ -2,40 +2,25 @@ namespace Superbalist\LaravelPrometheusExporter; -use Illuminate\Contracts\Routing\ResponseFactory; +use Illuminate\Http\Response; use Illuminate\Routing\Controller; use Prometheus\RenderTextFormat; class MetricsController extends Controller { - /** - * @var ResponseFactory - */ - protected $responseFactory; - /** * @var PrometheusExporter */ protected $prometheusExporter; /** - * @param ResponseFactory $responseFactory * @param PrometheusExporter $prometheusExporter */ - public function __construct(ResponseFactory $responseFactory, PrometheusExporter $prometheusExporter) + public function __construct(PrometheusExporter $prometheusExporter) { - $this->responseFactory = $responseFactory; $this->prometheusExporter = $prometheusExporter; } - /** - * @return ResponseFactory - */ - public function getResponseFactory() - { - return $this->responseFactory; - } - /** * @return PrometheusExporter */ @@ -59,6 +44,6 @@ class MetricsController extends Controller $renderer = new RenderTextFormat(); $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]); } } diff --git a/src/PrometheusServiceProvider.php b/src/PrometheusServiceProvider.php index 4b189f5..23bb772 100644 --- a/src/PrometheusServiceProvider.php +++ b/src/PrometheusServiceProvider.php @@ -14,12 +14,11 @@ class PrometheusServiceProvider extends ServiceProvider */ public function boot() { - $this->publishes([ - __DIR__ . '/../config/prometheus.php' => config_path('prometheus.php'), - ]); + $this->publishFiles(); + $this->loadRoutes(); if (config('prometheus.metrics_route_enabled')) { - $this->loadRoutesFrom(__DIR__ . '/routes.php'); + $this->loadRoutes(); } $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. */ diff --git a/src/laravel_routes.php b/src/laravel_routes.php new file mode 100644 index 0000000..e1f4669 --- /dev/null +++ b/src/laravel_routes.php @@ -0,0 +1,7 @@ + config('prometheus.metrics_route_name'), + 'middleware' => config('prometheus.metrics_route_middleware'), + 'uses' => \Superbalist\LaravelPrometheusExporter\MetricsController::class . '@getMetrics', +]); diff --git a/src/lumen_routes.php b/src/lumen_routes.php new file mode 100644 index 0000000..9889829 --- /dev/null +++ b/src/lumen_routes.php @@ -0,0 +1,7 @@ +get(config('prometheus.metrics_route_path'), [ + 'as' => config('prometheus.metrics_route_name'), + 'middleware' => config('prometheus.metrics_route_middleware'), + 'uses' => 'MetricsController@getMetrics' +]); diff --git a/src/routes.php b/src/routes.php deleted file mode 100644 index 58ad631..0000000 --- a/src/routes.php +++ /dev/null @@ -1,17 +0,0 @@ -name($name); -} - -$middleware = config('prometheus.metrics_route_middleware'); - -if ($middleware) { - $route->middleware($middleware); -} diff --git a/tests/MetricsControllerTest.php b/tests/MetricsControllerTest.php index 00f1420..6750616 100644 --- a/tests/MetricsControllerTest.php +++ b/tests/MetricsControllerTest.php @@ -2,8 +2,6 @@ namespace Tests; -use Illuminate\Contracts\Routing\ResponseFactory; -use Illuminate\Http\Response; use Mockery; use PHPUnit\Framework\TestCase; use Prometheus\RenderTextFormat; @@ -14,35 +12,22 @@ class MetricsControllerTest extends TestCase { public function testConstruct() { - $responseFactory = Mockery::mock(ResponseFactory::class); $exporter = Mockery::mock(PrometheusExporter::class); - $controller = new MetricsController($responseFactory, $exporter); - $this->assertSame($responseFactory, $controller->getResponseFactory()); + $controller = new MetricsController($exporter); $this->assertSame($exporter, $controller->getPrometheusExporter()); } 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->shouldReceive('export') ->once() ->andReturn([]); - $controller = new MetricsController($responseFactory, $exporter); + $controller = new MetricsController($exporter); - $r = $controller->getMetrics(); - $this->assertSame($response, $r); + $response = $controller->getMetrics(); + $this->assertSame(200, $response->getStatusCode()); + $this->assertSame(RenderTextFormat::MIME_TYPE, $response->headers->get('Content-Type')); } }