X-Git-Url: http://git.euphorik.ch/?p=euphorik.git;a=blobdiff_plain;f=modules%2Ferl%2Feuphorik_test.erl;h=2cbc1ec5d898b73124a2aa10c2eca3323ea1a507;hp=c1bf49b3b9517a1af547b1085e48a761b728d4f0;hb=e290f3af3f37ca377712b02460da8b3c4ce02d3d;hpb=efae3fc07564a2a29b24f8c87b6d8f6658b873a0 diff --git a/modules/erl/euphorik_test.erl b/modules/erl/euphorik_test.erl index c1bf49b..2cbc1ec 100644 --- a/modules/erl/euphorik_test.erl +++ b/modules/erl/euphorik_test.erl @@ -22,6 +22,7 @@ -module(euphorik_test). -export([ + bench_write_minichat/1, start/2, stop/1, bench_get_messages/0, @@ -34,6 +35,7 @@ -define(INTERVALLE_MIN, 2). -define(INTERVALLE_MAX, 5). + % N est le nombre d'utilisateur % M est le nombre de message que chaque utilisateur va poster start(N, M) -> @@ -55,7 +57,7 @@ start(N, M) -> stop(Pids) -> lists:foreach(fun(Pid) -> exit(Pid, kill) end, Pids). - +% des trucs qui trainent bench_get_messages() -> T = [ {page,"chat"}, @@ -67,8 +69,6 @@ bench_get_messages() -> {conversations,{array,[]}} ], moyenne_temps(euphorik_protocole, wait_event, [T], 20). - - bench_get_messages_avec_2_conversations() -> T = [ {page,"chat"}, @@ -91,8 +91,6 @@ bench_get_messages_avec_2_conversations() -> ]}} ], moyenne_temps(euphorik_protocole, wait_event, [T], 20). - - moyenne_temps(Module, Fun, Args, N) -> moyenne_temps(Module, Fun, Args, N, N, 0). moyenne_temps(_, _, _, 0, Total, Temps_acc) -> @@ -129,9 +127,9 @@ mot_rand(L, Mot) -> % Tire au hasard de 0 à 3 messages sur les 10 derniers postés, renvoie une liste de int() % répartition : % 0 : 0.1 -% 1 : 0.7 -% 2 : 0.15 -% 3 : 0.05 +% 1 : 0.95 +% 2 : 0.04 +% 3 : 0.01 messages_id_rand() -> R = random:uniform(), if R =< 0.1 -> @@ -139,9 +137,9 @@ messages_id_rand() -> true -> Messages = lists:map(fun(#minichat{id = Id}) -> Id end, euphorik_bd:messages(8)), if - R > 0.1 andalso R =< 0.8 -> + R > 0.1 andalso R =< 0.95 -> tire_element_rand(1, Messages); - R > 0.8 andalso R =< 0.95 -> + R > 0.95 andalso R =< 0.99 -> tire_element_rand(2, Messages); true -> tire_element_rand(3, Messages) @@ -170,9 +168,8 @@ loop(User_id, M) -> % attend un temp aléatoire compris entre INTERVALLE_MIN sec et INTERVALLE_MAX sec timer:sleep(1000 * (random:uniform(?INTERVALLE_MAX - ?INTERVALLE_MIN + 1) + ?INTERVALLE_MIN - 1)), % poste un message aléatoire par une personne aléatoire répondant à des messages aléatoires - {Message, Repond_a} = {message_rand(), messages_id_rand()}, - %{Message, Repond_a} = {"blablablablablabla", []}, - io:format("~p poste ~p et repond a ~w~n", [User_id, Message, Repond_a]), + {Message, Repond_a} = {message_rand(), messages_id_rand()}, + % io:format("~p poste ~p et repond a ~w~n", [User_id, Message, Repond_a]), case euphorik_bd:nouveau_message(Message, User_id, Repond_a) of {erreur, E} -> io:format("~p : erreur : ~p~n", [User_id, E]), @@ -181,4 +178,35 @@ loop(User_id, M) -> loop(User_id, M - 1) end. + +% Permet de tester la vitesse d'écriture en fonction de la +% taille de la BD +% voir : http://erlang.org/pipermail/erlang-questions/2008-October/038697.html +bench_write_minichat(Filename) -> + Times = bench_write_minichat(1, []), + {ok, File} = file:open(Filename, [write]), + lists:foreach( + fun({Id, Time}) -> + io:format(File, "~w ~w~n", [Id, Time]) + end, + Times + ), + file:close(File). +bench_write_minichat(100000, Temps) -> Temps; +bench_write_minichat(N, Temps) -> + {T, _} = timer:tc(mnesia, transaction, [fun() -> + Id = mnesia:dirty_update_counter(counter, minichat, 1), + mnesia:write(#minichat{ + id = Id, + auteur_id = random:uniform(10000), + date = now(), + pseudo = "Test", + contenu = "Blabla blabla bla.", + racine_id = random:uniform(10000) + }) + end]), + bench_write_minichat(N + 1, if N rem 500 =:= 0 -> [{N, T} | Temps]; true -> Temps end). + + + \ No newline at end of file