From 70790933e19b52e53547313941070ae528e62047 Mon Sep 17 00:00:00 2001 From: smokills Date: Tue, 15 Sep 2020 22:08:18 +0200 Subject: [PATCH] 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);