summaryrefslogtreecommitdiff
path: root/statusserver/src/statusserver.erl
diff options
context:
space:
mode:
authorMagnus Ahltorp <map@kth.se>2017-03-17 01:24:44 +0100
committerLinus Nordberg <linus@nordu.net>2017-06-27 14:17:28 +0200
commitdf2441c6315de4b245e1faf5b72517c5199fe179 (patch)
tree868a0ffb98f511c7558aae05fded1c4ee5ad23c5 /statusserver/src/statusserver.erl
parent5eecd85c8e9e9b52527859917cba0b68608b8c33 (diff)
Added benchmark reporting.
Diffstat (limited to 'statusserver/src/statusserver.erl')
-rw-r--r--statusserver/src/statusserver.erl50
1 files changed, 44 insertions, 6 deletions
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) ->
"</body></html>~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.