Current section
Files
Jump to
Current section
Files
src/prometheus_cowboy2_handler.erl
%% @doc
%% Cowboy2 handler for exporting prometheus metrics.
%% @end
-module(prometheus_cowboy2_handler).
%% -behaviour(cowboy_handler).
-export([
init/2,
terminate/3
]).
%% ===================================================================
%% cowboy_handler callbacks
%% ===================================================================
init(Req, _Opts) ->
handle(Req).
terminate(_Reason, _Req, _State) ->
ok.
%% ===================================================================
%% Private functions
%% ===================================================================
handle(Request) ->
Method = cowboy_req:method(Request),
Request1 = gen_response(Method, Request),
{ok, Request1, undefined}.
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) ->
cowboy_req:header(iolist_to_binary(Name),
Request, Default)
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, maps:from_list(Headers), Body, Request).