From 31eaa993ebeaa52879a9c607c607649c812fcb77 Mon Sep 17 00:00:00 2001 From: Daniil Zobov Date: Tue, 14 Apr 2020 14:52:48 +0300 Subject: [PATCH 1/5] lumen support --- src/LaravelPrometheusServiceProvider.php | 26 ++++++++++++++++++++++++ src/LumenPrometheusServiceProvider.php | 17 ++++++++++++++++ src/PrometheusServiceProvider.php | 15 +++++++------- src/laravel_routes.php | 7 +++++++ src/lumen_routes.php | 7 +++++++ 5 files changed, 65 insertions(+), 7 deletions(-) create mode 100644 src/LaravelPrometheusServiceProvider.php create mode 100644 src/LumenPrometheusServiceProvider.php create mode 100644 src/laravel_routes.php create mode 100644 src/lumen_routes.php diff --git a/src/LaravelPrometheusServiceProvider.php b/src/LaravelPrometheusServiceProvider.php new file mode 100644 index 0000000..9719662 --- /dev/null +++ b/src/LaravelPrometheusServiceProvider.php @@ -0,0 +1,26 @@ +publishes([ + __DIR__ . '/../config/prometheus.php' => config_path('prometheus.php'), + ]); + + parent::boot(); + } + + /** + * Load routes. + */ + protected function loadRoutes() + { + $this->loadRoutesFrom(__DIR__ . '/laravel_routes.php'); + } +} diff --git a/src/LumenPrometheusServiceProvider.php b/src/LumenPrometheusServiceProvider.php new file mode 100644 index 0000000..7ecfb3b --- /dev/null +++ b/src/LumenPrometheusServiceProvider.php @@ -0,0 +1,17 @@ +app->router + ->group(['namespace' => 'Superbalist\LaravelPrometheusExporter'], function ($router) { + require __DIR__ . '/lumen_routes.php'; + }); + } +} diff --git a/src/PrometheusServiceProvider.php b/src/PrometheusServiceProvider.php index 4b189f5..cf7bf95 100644 --- a/src/PrometheusServiceProvider.php +++ b/src/PrometheusServiceProvider.php @@ -7,19 +7,17 @@ use Illuminate\Support\ServiceProvider; use Prometheus\CollectorRegistry; use Prometheus\Storage\Adapter; -class PrometheusServiceProvider extends ServiceProvider +abstract class PrometheusServiceProvider extends ServiceProvider { /** * Perform post-registration booting of services. */ public function boot() { - $this->publishes([ - __DIR__ . '/../config/prometheus.php' => config_path('prometheus.php'), - ]); + $this->mergeConfigFrom(__DIR__ . '/../config/prometheus.php', 'prometheus'); if (config('prometheus.metrics_route_enabled')) { - $this->loadRoutesFrom(__DIR__ . '/routes.php'); + $this->loadRoutes(); } $exporter = $this->app->make(PrometheusExporter::class); /* @var PrometheusExporter $exporter */ @@ -29,13 +27,16 @@ class PrometheusServiceProvider extends ServiceProvider } } + /** + * Load routes. + */ + abstract protected function loadRoutes(); + /** * Register bindings in the container. */ public function register() { - $this->mergeConfigFrom(__DIR__ . '/../config/prometheus.php', 'prometheus'); - $this->app->singleton(PrometheusExporter::class, function ($app) { $adapter = $app['prometheus.storage_adapter']; $prometheus = new CollectorRegistry($adapter); 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' +]); From 4b056b8c1e599675feabccb8fe50c31f89a56e07 Mon Sep 17 00:00:00 2001 From: Daniil Zobov Date: Tue, 14 Apr 2020 16:15:28 +0300 Subject: [PATCH 2/5] update tests --- README.md | 9 ++++++- ...rovider.php => LaravelServiceProvider.php} | 2 +- ...eProvider.php => LumenServiceProvider.php} | 2 +- src/MetricsController.php | 21 +++------------- src/routes.php | 17 ------------- tests/MetricsControllerTest.php | 25 ++++--------------- 6 files changed, 18 insertions(+), 58 deletions(-) rename src/{LaravelPrometheusServiceProvider.php => LaravelServiceProvider.php} (86%) rename src/{LumenPrometheusServiceProvider.php => LumenServiceProvider.php} (82%) delete mode 100644 src/routes.php diff --git a/README.md b/README.md index 63c2ceb..827d6c5 100644 --- a/README.md +++ b/README.md @@ -18,10 +18,12 @@ composer require superbalist/laravel-prometheus-exporter ``` Register the service provider in app.php + +#### Laravel ```php 'providers' => [ // ... - Superbalist\LaravelPrometheusExporter\PrometheusServiceProvider::class, + Superbalist\LaravelPrometheusExporter\LaravelServiceProvider::class, ] ``` @@ -33,6 +35,11 @@ Register the facade in app.php ] ``` +#### Lumen +```php +$app->register(Superbalist\LaravelPrometheusExporter\LumenServiceProvider::class); +``` + ## Configuration The package has a default configuration which uses the following environment variables. diff --git a/src/LaravelPrometheusServiceProvider.php b/src/LaravelServiceProvider.php similarity index 86% rename from src/LaravelPrometheusServiceProvider.php rename to src/LaravelServiceProvider.php index 9719662..9f9f398 100644 --- a/src/LaravelPrometheusServiceProvider.php +++ b/src/LaravelServiceProvider.php @@ -2,7 +2,7 @@ namespace Superbalist\LaravelPrometheusExporter; -class LaravelPrometheusServiceProvider extends PrometheusServiceProvider +class LaravelServiceProvider extends PrometheusServiceProvider { /** * Perform post-registration booting of services. diff --git a/src/LumenPrometheusServiceProvider.php b/src/LumenServiceProvider.php similarity index 82% rename from src/LumenPrometheusServiceProvider.php rename to src/LumenServiceProvider.php index 7ecfb3b..bb47e58 100644 --- a/src/LumenPrometheusServiceProvider.php +++ b/src/LumenServiceProvider.php @@ -2,7 +2,7 @@ namespace Superbalist\LaravelPrometheusExporter; -class LumenPrometheusServiceProvider extends PrometheusServiceProvider +class LumenServiceProvider extends PrometheusServiceProvider { /** * Load routes. 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/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')); } } From eff4294d5aa59f371843d35bf979411354da2869 Mon Sep 17 00:00:00 2001 From: Daniil Zobov Date: Tue, 14 Apr 2020 16:28:44 +0300 Subject: [PATCH 3/5] fixes --- README.md | 4 +-- src/LaravelServiceProvider.php | 26 ----------------- ...php => LumenPrometheusServiceProvider.php} | 10 ++++++- src/PrometheusServiceProvider.php | 29 +++++++++++++++++-- 4 files changed, 37 insertions(+), 32 deletions(-) delete mode 100644 src/LaravelServiceProvider.php rename src/{LumenServiceProvider.php => LumenPrometheusServiceProvider.php} (65%) diff --git a/README.md b/README.md index 827d6c5..73a16b7 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,7 @@ Register the service provider in app.php ```php 'providers' => [ // ... - Superbalist\LaravelPrometheusExporter\LaravelServiceProvider::class, + Superbalist\LaravelPrometheusExporter\PrometheusServiceProvider::class, ] ``` @@ -37,7 +37,7 @@ Register the facade in app.php #### Lumen ```php -$app->register(Superbalist\LaravelPrometheusExporter\LumenServiceProvider::class); +$app->register(Superbalist\LaravelPrometheusExporter\LumenPrometheusServiceProvider::class); ``` ## Configuration diff --git a/src/LaravelServiceProvider.php b/src/LaravelServiceProvider.php deleted file mode 100644 index 9f9f398..0000000 --- a/src/LaravelServiceProvider.php +++ /dev/null @@ -1,26 +0,0 @@ -publishes([ - __DIR__ . '/../config/prometheus.php' => config_path('prometheus.php'), - ]); - - parent::boot(); - } - - /** - * Load routes. - */ - protected function loadRoutes() - { - $this->loadRoutesFrom(__DIR__ . '/laravel_routes.php'); - } -} diff --git a/src/LumenServiceProvider.php b/src/LumenPrometheusServiceProvider.php similarity index 65% rename from src/LumenServiceProvider.php rename to src/LumenPrometheusServiceProvider.php index bb47e58..86510e0 100644 --- a/src/LumenServiceProvider.php +++ b/src/LumenPrometheusServiceProvider.php @@ -2,8 +2,16 @@ namespace Superbalist\LaravelPrometheusExporter; -class LumenServiceProvider extends PrometheusServiceProvider +class LumenPrometheusServiceProvider extends PrometheusServiceProvider { + /** + * Publish files. + */ + protected function publishFiles() + { + // do nothing + } + /** * Load routes. */ diff --git a/src/PrometheusServiceProvider.php b/src/PrometheusServiceProvider.php index cf7bf95..3ae9197 100644 --- a/src/PrometheusServiceProvider.php +++ b/src/PrometheusServiceProvider.php @@ -7,14 +7,16 @@ use Illuminate\Support\ServiceProvider; use Prometheus\CollectorRegistry; use Prometheus\Storage\Adapter; -abstract class PrometheusServiceProvider extends ServiceProvider +class PrometheusServiceProvider extends ServiceProvider { /** * Perform post-registration booting of services. */ public function boot() { - $this->mergeConfigFrom(__DIR__ . '/../config/prometheus.php', 'prometheus'); + $this->publishFiles(); + $this->mergeConfigs(); + $this->loadRoutes(); if (config('prometheus.metrics_route_enabled')) { $this->loadRoutes(); @@ -27,10 +29,31 @@ abstract class PrometheusServiceProvider extends ServiceProvider } } + /** + * Merge configs. + */ + protected function mergeConfigs() + { + $this->mergeConfigFrom(__DIR__ . '/../config/prometheus.php', 'prometheus'); + } + + /** + * Publish files. + */ + protected function publishFiles() + { + $this->publishes([ + __DIR__ . '/../config/prometheus.php' => config_path('prometheus.php'), + ]); + } + /** * Load routes. */ - abstract protected function loadRoutes(); + protected function loadRoutes() + { + $this->loadRoutesFrom(__DIR__ . '/laravel_routes.php'); + } /** * Register bindings in the container. From 0806d177e6da0132828426448c0bd16af259fbb3 Mon Sep 17 00:00:00 2001 From: Daniil Zobov Date: Tue, 14 Apr 2020 16:30:08 +0300 Subject: [PATCH 4/5] remove mergeConfigs --- src/PrometheusServiceProvider.php | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/src/PrometheusServiceProvider.php b/src/PrometheusServiceProvider.php index 3ae9197..23bb772 100644 --- a/src/PrometheusServiceProvider.php +++ b/src/PrometheusServiceProvider.php @@ -15,7 +15,6 @@ class PrometheusServiceProvider extends ServiceProvider public function boot() { $this->publishFiles(); - $this->mergeConfigs(); $this->loadRoutes(); if (config('prometheus.metrics_route_enabled')) { @@ -29,14 +28,6 @@ class PrometheusServiceProvider extends ServiceProvider } } - /** - * Merge configs. - */ - protected function mergeConfigs() - { - $this->mergeConfigFrom(__DIR__ . '/../config/prometheus.php', 'prometheus'); - } - /** * Publish files. */ @@ -60,6 +51,8 @@ class PrometheusServiceProvider extends ServiceProvider */ public function register() { + $this->mergeConfigFrom(__DIR__ . '/../config/prometheus.php', 'prometheus'); + $this->app->singleton(PrometheusExporter::class, function ($app) { $adapter = $app['prometheus.storage_adapter']; $prometheus = new CollectorRegistry($adapter); From bcb1f9cebf6fc42cffada4f0263f9f419782e57f Mon Sep 17 00:00:00 2001 From: Daniil Zobov Date: Tue, 22 Dec 2020 19:20:51 +0300 Subject: [PATCH 5/5] Update composer.json --- composer.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/composer.json b/composer.json index 6cac986..aba64e1 100644 --- a/composer.json +++ b/composer.json @@ -10,8 +10,8 @@ ], "require": { "php": ">=5.6.0", - "illuminate/support": "^5.3 || ^6.0 || ^7.0", - "illuminate/routing": "^5.3 || ^6.0 || ^7.0", + "illuminate/support": "^5.3 || ^6.0 || ^7.0 || ^8.0", + "illuminate/routing": "^5.3 || ^6.0 || ^7.0 || ^8.0", "jimdo/prometheus_client_php": "^0.9.0" }, "autoload": {