feat: add Lumen support

This commit is contained in:
smokills 2020-09-15 22:08:18 +02:00
parent 6e874128e8
commit 70790933e1
3 changed files with 30 additions and 64 deletions

View file

@ -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]
);
}
}

View file

@ -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, []);

View file

@ -1,17 +1,12 @@
<?php
/** @var \Illuminate\Routing\Route $route */
$route = Route::get(
config('prometheus.metrics_route_path'),
\Superbalist\LaravelPrometheusExporter\MetricsController::class . '@getMetrics'
);
/** @var \Illuminate\Routing\Route|\Laravel\Lumen\Routing\Router $route */
$route = app('router');
if ($name = config('prometheus.metrics_route_name')) {
$route->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);