feat: add Lumen support
This commit is contained in:
parent
6e874128e8
commit
70790933e1
3 changed files with 30 additions and 64 deletions
|
@ -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]
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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, []);
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Add table
Reference in a new issue