Current section
Files
Jump to
Current section
Files
src/load_test_lager.erl
-module(load_test_lager).
-define(PRINT_MSG(Format, Args), io:format(Format, Args)).
-define(DEBUG_MSG(Format, Args), lager:debug(Format, Args)).
-define(INFO_MSG(Format, Args), lager:info(Format, Args)).
-define(WARNING_MSG(Format, Args), lager:warning(Format, Args)).
-define(ERROR_MSG(Format, Args), lager:error(Format, Args)).
% stacktrace
-ifdef(OTP_RELEASE). %% this implies 21 or higher
-define(EXCEPTION(Class, Reason, Stacktrace), Class:Reason:Stacktrace).
-define(GET_STACK(Stacktrace), Stacktrace).
-else.
-define(EXCEPTION(Class, Reason, _), Class:Reason).
-define(GET_STACK(_), erlang:get_stacktrace()).
-endif.
-export([
bench/2
]).
bench(Number, Concurrency) ->
application:ensure_all_started(lager),
gen_event:delete_handler(lager_event, lager_console_backend, []),
ok = lager:set_loglevel(lager_file_backend, "log/applog.log", warning),
Self = self(),
List = lists:seq(1, Concurrency),
LoopNumbers = Number div Concurrency,
Fun = fun() ->
try
?INFO_MSG("hello world", [])
catch
?EXCEPTION(Class, Error, Stack) ->
io:format("received error class: ~p error: ~p stack: ~p ~n", [Class, Error, ?GET_STACK(Stack)])
end
end,
A = os:timestamp(),
Pids = [spawn_link(fun() -> loop(LoopNumbers, Fun), Self ! {self(), done} end) || _ <- List],
[receive {Pid, done} -> ok end || Pid <- Pids],
B = os:timestamp(),
print(Number, A, B).
print(Num, A, B) ->
Microsecs = timer:now_diff(B, A),
Time = Microsecs div Num,
PerSec = case Time of
0 ->
"N/A";
_ ->
1000000 div Time
end,
io:format("### ~p ms ~p req/sec ~n", [Microsecs div 1000, PerSec]).
loop(0, _Fun) ->
ok;
loop(Nr, Fun) ->
Fun(),
loop(Nr-1, Fun).