nsg_crowd_lib.erl 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. %%% -------------------------------------------------------------------
  2. %%% Author : Sergei Polkovnikov <serge.polkovnikov@gmail.com>
  3. %%% Description : The library with functions for generation random lists
  4. %%% of the virtual users
  5. %%% Created : Mar 25, 2013
  6. %%% -------------------------------------------------------------------
  7. -module(nsg_crowd_lib).
  8. -include_lib("kvs/include/user.hrl").
  9. -compile(export_all).
  10. create_users(A,B) ->
  11. ImagioUsers = nsm_auth:imagionary_users(),
  12. [ begin U = #user{username = nsm_auth:ima_gio(N,ImagioUsers),
  13. id = nsm_auth:ima_gio(N,ImagioUsers),
  14. birth={1981,9,29}
  15. }, kvs:put(U) end || N <- lists:seq(A, B) ].
  16. virtual_users() ->
  17. case kvs:get(user,"maxim@synrc.com") of
  18. {aborted,_} -> kvs:join(), kvs:init_db(),
  19. create_users(1,100), kvs:put(#user{id="maxim@synrc.com"});
  20. {ok,_} -> skip end,
  21. {_, AllUsers} = lists:unzip(nsm_auth:imagionary_users()),
  22. F = fun(UserId, Acc) ->
  23. User = auth_server:get_user_info_by_user_id(UserId),
  24. case User of
  25. {ok, _} -> [UserId | Acc];
  26. {error,_} -> Acc
  27. end
  28. end,
  29. lists:usort(lists:foldl(F, [], AllUsers)).
  30. random_users(Num, AllUsers) ->
  31. AllUsersNum = length(AllUsers),
  32. random_users(Num, [], AllUsers, AllUsersNum).
  33. random_users(0, Acc, _AllUsers, _AllUsersNum) -> Acc;
  34. random_users(N, Acc, AllUsers, AllUsersNum) ->
  35. User = list_to_binary(lists:nth(crypto:rand_uniform(1, AllUsersNum + 1), AllUsers)),
  36. case lists:member(User, Acc) of
  37. false -> random_users(N - 1, [User | Acc], AllUsers, AllUsersNum);
  38. true -> random_users(N, Acc, AllUsers, AllUsersNum)
  39. end.