nsg_crowd_lib.erl 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  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 = fake_users:imagionary_users(),
  12. [ begin
  13. {Id,Name,Surname} = lists:nth(N,ImagioUsers),
  14. U = #user{ username = Id,
  15. id = Id,
  16. names = Name,
  17. surnames = Surname,
  18. birth={1981,9,29} }, kvs:put(U) end || N <- lists:seq(A, B) ].
  19. virtual_users() ->
  20. case kvs:get(user,"maxim@synrc.com") of
  21. {aborted,_} -> kvs:join(), kvs:init_db(),
  22. create_users(1,100), kvs:put(#user{id="maxim@synrc.com"});
  23. {ok,_} -> skip end,
  24. AllUsers = fake_users:imagionary_users(),
  25. F = fun({UserId,_,_}, Acc) ->
  26. User = auth_server:get_user_info_by_user_id(UserId),
  27. case User of
  28. {error,_} -> Acc;
  29. _ -> [UserId | Acc]
  30. end
  31. end,
  32. lists:usort(lists:foldl(F, [], AllUsers)).
  33. random_users(Num, AllUsers) ->
  34. AllUsersNum = length(AllUsers),
  35. random_users(Num, [], AllUsers, AllUsersNum).
  36. random_users(0, Acc, _AllUsers, _AllUsersNum) -> Acc;
  37. random_users(N, Acc, AllUsers, AllUsersNum) ->
  38. User = lists:nth(crypto:rand_uniform(1, AllUsersNum + 1), AllUsers),
  39. case lists:member(User, Acc) of
  40. false -> random_users(N - 1, [User | Acc], AllUsers, AllUsersNum);
  41. true -> random_users(N, Acc, AllUsers, AllUsersNum)
  42. end.