From df2441c6315de4b245e1faf5b72517c5199fe179 Mon Sep 17 00:00:00 2001 From: Magnus Ahltorp Date: Fri, 17 Mar 2017 01:24:44 +0100 Subject: Added benchmark reporting. --- statusserver/src/statusserver.erl | 50 ++++++++++++++++++++++++++++++++++----- 1 file changed, 44 insertions(+), 6 deletions(-) (limited to 'statusserver/src/statusserver.erl') diff --git a/statusserver/src/statusserver.erl b/statusserver/src/statusserver.erl index 81fcd7a..ca11e7c 100644 --- a/statusserver/src/statusserver.erl +++ b/statusserver/src/statusserver.erl @@ -7,6 +7,7 @@ -export([request/4]). -define(APPURL_PLOP_STATUS, "plop/v1/status"). +-define(APPURL_PLOP_BENCH, "plop/v1/bench"). request(post, ?APPURL_PLOP_STATUS, Service, Input) -> case (catch mochijson2:decode(Input)) of @@ -22,7 +23,23 @@ request(post, ?APPURL_PLOP_STATUS, Service, Input) -> end, Entries) end, success({[{result, <<"ok">>}]}); -request(get, "", "status", Input) -> +request(post, ?APPURL_PLOP_BENCH, Service, Input) -> + case (catch mochijson2:decode(Input)) of + {error, E} -> + html("bad input:", E); + Entries when is_list(Entries) -> + lists:foreach(fun ({struct, PropList}) -> + Target = proplists:get_value(<<"target">>, PropList), + Source = proplists:get_value(<<"source">>, PropList), + Tag = proplists:get_value(<<"tag">>, PropList), + Seq = proplists:get_value(<<"seq">>, PropList), + Starttime = proplists:get_value(<<"starttime">>, PropList), + Elapsed = proplists:get_value(<<"elapsed">>, PropList), + add_bench(Service, Source, Target, Tag, Seq, Starttime, Elapsed) + end, Entries) + end, + success({[{result, <<"ok">>}]}); +request(get, "", "status", _Input) -> Now = plop_compat:monotonic_time(millisecond), Variables = [{struct, [ {service, list_to_binary(Service)}, @@ -32,6 +49,16 @@ request(get, "", "status", Input) -> {status, Status}, {age, (Now - Timestamp) / 1000} ]} || {{Service, Source, Target, Variable}, Status, Timestamp} <- get_status()], + success({[{result, Variables}]}); +request(get, "", "bench", _Input) -> + Variables = [{struct, [ + {service, list_to_binary(Service)}, + {source, Source}, + {target, Target}, + {tag, Tag}, + {starttime, Starttime}, + {elapsed, Elapsed} + ]} || {{Service, Source, Target, Tag, _Seq, _Starttime}, Starttime, Elapsed} <- get_bench()], success({[{result, Variables}]}). @@ -47,25 +74,36 @@ html(Text, Input) -> "~n", [Text, Input])}. -define(STATUSDB_TABLE, statusserver_statusdb). +-define(BENCHDB_TABLE, statusserver_benchdb). init_module() -> - create_statusdb(). + create_table(?STATUSDB_TABLE), + create_table(?BENCHDB_TABLE). -create_statusdb() -> - case ets:info(?STATUSDB_TABLE) of +create_table(Table) -> + case ets:info(Table) of undefined -> ok; _ -> - ets:delete(?STATUSDB_TABLE) + ets:delete(Table) end, - ets:new(?STATUSDB_TABLE, [set, public, named_table]). + ets:new(Table, [set, public, named_table]). get_status() -> [E || [E] <- ets:match(?STATUSDB_TABLE, '$1')]. +get_bench() -> + [E || [E] <- ets:match(?BENCHDB_TABLE, '$1')]. + set_status(Service, Source, Target, Variable, Status) -> lager:info("status: ~p ~p ~p ~p ~p", [Service, Source, Target, Variable, Status]), Timestamp = plop_compat:monotonic_time(millisecond), true = ets:insert(?STATUSDB_TABLE, {{Service, Source, Target, Variable}, Status, Timestamp}), ok. + +add_bench(Service, Source, Target, Tag, Seq, Starttime, Elapsed) -> + lager:info("bench: ~p ~p ~p ~p ~p ~p ~p", [Service, Source, Target, Tag, Seq, Starttime, Elapsed]), + true = ets:insert(?BENCHDB_TABLE, + {{Service, Source, Target, Tag, Seq, Starttime}, Starttime, Elapsed}), + ok. -- cgit v1.1