From 70790933e19b52e53547313941070ae528e62047 Mon Sep 17 00:00:00 2001 From: smokills Date: Tue, 15 Sep 2020 22:08:18 +0200 Subject: [PATCH 1/2] feat: add Lumen support --- src/MetricsController.php | 53 ++++++------------------------- src/PrometheusServiceProvider.php | 20 ++++++++---- src/routes.php | 21 +++++------- 3 files changed, 30 insertions(+), 64 deletions(-) diff --git a/src/MetricsController.php b/src/MetricsController.php index a481479..fafae37 100644 --- a/src/MetricsController.php +++ b/src/MetricsController.php @@ -2,63 +2,28 @@ namespace Superbalist\LaravelPrometheusExporter; -use Illuminate\Contracts\Routing\ResponseFactory; 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) - { - $this->responseFactory = $responseFactory; - $this->prometheusExporter = $prometheusExporter; - } - - /** - * @return ResponseFactory - */ - public function getResponseFactory() - { - return $this->responseFactory; - } - - /** - * @return PrometheusExporter - */ - public function getPrometheusExporter() - { - return $this->prometheusExporter; - } - /** * GET /metrics * * The route path is configurable in the prometheus.metrics_route_path config var, or the * PROMETHEUS_METRICS_ROUTE_PATH env var. * + * @param PrometheusExporter $prometheusExporter * @return \Symfony\Component\HttpFoundation\Response */ - public function getMetrics() + public function getMetrics(PrometheusExporter $prometheusExporter) { - $metrics = $this->prometheusExporter->export(); - - $renderer = new RenderTextFormat(); - $result = $renderer->render($metrics); - - return $this->responseFactory->make($result, 200, ['Content-Type' => RenderTextFormat::MIME_TYPE]); + return response()->make( + (new RenderTextFormat)->render( + $prometheusExporter->export() + ), + 200, + ['Content-Type' => RenderTextFormat::MIME_TYPE] + ); } } diff --git a/src/PrometheusServiceProvider.php b/src/PrometheusServiceProvider.php index 4b189f5..a1760e3 100644 --- a/src/PrometheusServiceProvider.php +++ b/src/PrometheusServiceProvider.php @@ -14,18 +14,23 @@ class PrometheusServiceProvider extends ServiceProvider */ public function boot() { - $this->publishes([ - __DIR__ . '/../config/prometheus.php' => config_path('prometheus.php'), - ]); + if (function_exists('config_path')) { + $this->publishes([ + __DIR__ . '/../config/prometheus.php' => config_path('prometheus.php'), + ]); + } if (config('prometheus.metrics_route_enabled')) { $this->loadRoutesFrom(__DIR__ . '/routes.php'); } - $exporter = $this->app->make(PrometheusExporter::class); /* @var PrometheusExporter $exporter */ + /* @var PrometheusExporter $exporter */ + $exporter = $this->app->make(PrometheusExporter::class); + foreach (config('prometheus.collectors') as $class) { - $collector = $this->app->make($class); - $exporter->registerCollector($collector); + $exporter->registerCollector( + $this->app->make($class) + ); } } @@ -48,7 +53,8 @@ class PrometheusServiceProvider extends ServiceProvider }); $this->app->bind(Adapter::class, function ($app) { - $factory = $app['prometheus.storage_adapter_factory']; /** @var StorageAdapterFactory $factory */ + $factory = $app['prometheus.storage_adapter_factory']; + /** @var StorageAdapterFactory $factory */ $driver = config('prometheus.storage_adapter'); $configs = config('prometheus.storage_adapters'); $config = Arr::get($configs, $driver, []); diff --git a/src/routes.php b/src/routes.php index 58ad631..90f3c29 100644 --- a/src/routes.php +++ b/src/routes.php @@ -1,17 +1,12 @@ name($name); -} +$params = array_filter([ + 'uses' => \Superbalist\LaravelPrometheusExporter\MetricsController::class . '@getMetrics', + 'as' => config('prometheus.metrics_route_name'), + 'middleware' => config('prometheus.metrics_route_middleware'), +]); -$middleware = config('prometheus.metrics_route_middleware'); - -if ($middleware) { - $route->middleware($middleware); -} +$route->get(config('prometheus.metrics_route_path'), $params); From 31159258cba3c55fedef6b88f217b8f3ee5ff6eb Mon Sep 17 00:00:00 2001 From: smokills Date: Wed, 30 Sep 2020 18:33:31 +0200 Subject: [PATCH 2/2] feat: update documentation --- README.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/README.md b/README.md index 63c2ceb..c1b25e2 100644 --- a/README.md +++ b/README.md @@ -17,6 +17,8 @@ This package is a wrapper bridging [jimdo/prometheus_client_php](https://github. composer require superbalist/laravel-prometheus-exporter ``` +## Laravel + Register the service provider in app.php ```php 'providers' => [ @@ -33,6 +35,19 @@ Register the facade in app.php ] ``` +## Lumen +Register the service provider in boostrap/app.php +```php +$app->register(Superbalist\LaravelPrometheusExporter\PrometheusServiceProvider::class); +``` + +If you want to register the facade, in boostrap/app, replece the line with `$app->withFacades();` with the following: +```php +$app->withFacades(true, [ + Superbalist\LaravelPrometheusExporter\PrometheusFacade::class => 'Prometheus', +]); +``` + ## Configuration The package has a default configuration which uses the following environment variables.