From de3dde8187ceefdeb787eb835a6e36e80528de6f Mon Sep 17 00:00:00 2001 From: Mariano Guerra Date: Fri, 30 Oct 2015 11:35:36 +0100 Subject: [PATCH] expose metrics as rest resource --- apps/tanodb/src/tanodb_app.erl | 3 ++- apps/tanodb/src/tanodb_http_metrics.erl | 35 +++++++++++++++++++++++++ apps/tanodb/src/tanodb_metrics.erl | 2 +- 3 files changed, 38 insertions(+), 2 deletions(-) create mode 100644 apps/tanodb/src/tanodb_http_metrics.erl diff --git a/apps/tanodb/src/tanodb_app.erl b/apps/tanodb/src/tanodb_app.erl index b1c3eee..c044674 100644 --- a/apps/tanodb/src/tanodb_app.erl +++ b/apps/tanodb/src/tanodb_app.erl @@ -29,7 +29,8 @@ stop(_State) -> routes() -> [ - {"/ping", tanodb_http_ping, []} + {"/ping", tanodb_http_ping, []}, + {"/metrics", tanodb_http_metrics, []} ]. init_http() -> diff --git a/apps/tanodb/src/tanodb_http_metrics.erl b/apps/tanodb/src/tanodb_http_metrics.erl new file mode 100644 index 0000000..ae6b6b2 --- /dev/null +++ b/apps/tanodb/src/tanodb_http_metrics.erl @@ -0,0 +1,35 @@ +-module(tanodb_http_metrics). + +-export([init/3, terminate/3]). + +-ignore_xref([init/3, terminate/3]). + +-export([rest_init/2, + rest_terminate/2, + allowed_methods/2, + content_types_provided/2, + to_json/2]). + +-ignore_xref([rest_init/2, + rest_terminate/2, + allowed_methods/2, + content_types_provided/2, + to_json/2]). + +-record(state, {}). + +init(_, _Req, _Opts) -> {upgrade, protocol, cowboy_rest}. +rest_init(Req, _Opts) -> {ok, Req, #state{}}. + +allowed_methods(Req, State) -> {[<<"GET">>], Req, State}. + +content_types_provided(Req, State) -> + {[{{<<"application">>, <<"json">>, '*'}, to_json}], Req, State}. + +to_json(Req, State) -> + Metrics = tanodb_metrics:all(), + Response = tanodb_json:encode(Metrics), + {Response, Req, State}. + +rest_terminate(_Req, _State) -> ok. +terminate(_Reason, _Req, _State) -> ok. diff --git a/apps/tanodb/src/tanodb_metrics.erl b/apps/tanodb/src/tanodb_metrics.erl index 44207fb..d9990df 100644 --- a/apps/tanodb/src/tanodb_metrics.erl +++ b/apps/tanodb/src/tanodb_metrics.erl @@ -3,7 +3,7 @@ -export([core_ping/0]). --define(ENDPOINTS, [<<"ping">>]). +-define(ENDPOINTS, [<<"ping">>, <<"metrics">>]). -define(METRIC_CORE_PING, [tanodb, core, ping]). all() ->