Current section
Files
Jump to
Current section
Files
src/prometheus_cowboy1_handler.erl
%% @doc
%% Cowboy2 handler for exporting prometheus metrics.
%% @end
-module(prometheus_cowboy1_handler).
%% -behaviour(cowboy_http_handler).
-export([init/3,
handle/2,
terminate/3]).
%% ===================================================================
%% cowboy_http_handler callbacks
%% ===================================================================
init(_Transport, Request, Opts) ->
{ok, Request, Opts}.
handle(Request0, State) ->
{Method, Request} = cowboy_req:method(Request0),
{ok, Response} = gen_response(Method, Request),
{ok, Response, State}.
terminate(_Reason, _Request, _State) ->
ok.
%% ===================================================================
%% Private functions
%% ===================================================================
gen_response(<<"GET">>, Request) ->
{Registry0, _} = cowboy_req:binding(registry, Request, <<"default">>),
case prometheus_registry:exists(Registry0) of
false ->
cowboy_req:reply(404, [], <<"Unknown Registry">>, Request);
Registry ->
gen_metrics_response(Registry, Request)
end;
gen_response(_, Request) ->
Request.
gen_metrics_response(Registry, Request) ->
URI = true,
GetHeader = fun (Name, Default) ->
{Value, _} = cowboy_req:header(iolist_to_binary(Name),
Request, Default),
Value
end,
{Code, RespHeaders, Body} = prometheus_http_impl:reply(
#{path => URI,
headers => GetHeader,
registry => Registry,
standalone => false}),
Headers = prometheus_cowboy:to_cowboy_headers(RespHeaders),
cowboy_req:reply(Code, Headers, Body, Request).