[skip ci] fix(gateway): perf optimisations
This commit is contained in:
parent
d843d6f3f8
commit
fd59bc219c
@ -130,7 +130,19 @@ filter_sessions_for_event(Event, FinalData, SessionIdOpt, Sessions, UpdatedState
|
|||||||
)
|
)
|
||||||
end;
|
end;
|
||||||
false ->
|
false ->
|
||||||
guild_sessions:filter_sessions_exclude_session(Sessions, SessionIdOpt)
|
FilteredSessions = guild_sessions:filter_sessions_exclude_session(
|
||||||
|
Sessions, SessionIdOpt
|
||||||
|
),
|
||||||
|
case Event of
|
||||||
|
guild_member_add ->
|
||||||
|
[
|
||||||
|
{Sid, SessionData}
|
||||||
|
|| {Sid, SessionData} <- FilteredSessions,
|
||||||
|
maps:get(bot, SessionData, false) =:= true
|
||||||
|
];
|
||||||
|
_ ->
|
||||||
|
FilteredSessions
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end.
|
end.
|
||||||
|
|
||||||
@ -1149,9 +1161,17 @@ filter_sessions_for_event_guild_wide_goes_to_all_sessions_test() ->
|
|||||||
S2 = #{session_id => <<"s2">>, user_id => 11, pid => self()},
|
S2 = #{session_id => <<"s2">>, user_id => 11, pid => self()},
|
||||||
Sessions = #{<<"s1">> => S1, <<"s2">> => S2},
|
Sessions = #{<<"s1">> => S1, <<"s2">> => S2},
|
||||||
State = #{sessions => Sessions, data => #{<<"members">> => #{}}},
|
State = #{sessions => Sessions, data => #{<<"members">> => #{}}},
|
||||||
Result = filter_sessions_for_event(guild_member_add, #{}, undefined, Sessions, State),
|
Result = filter_sessions_for_event(guild_update, #{}, undefined, Sessions, State),
|
||||||
?assertEqual(2, length(Result)).
|
?assertEqual(2, length(Result)).
|
||||||
|
|
||||||
|
filter_sessions_for_event_guild_member_add_bots_only_test() ->
|
||||||
|
S1 = #{session_id => <<"s1">>, user_id => 10, pid => self(), bot => false},
|
||||||
|
S2 = #{session_id => <<"s2">>, user_id => 11, pid => self(), bot => true},
|
||||||
|
Sessions = #{<<"s1">> => S1, <<"s2">> => S2},
|
||||||
|
State = #{sessions => Sessions, data => #{<<"members">> => #{}}},
|
||||||
|
Result = filter_sessions_for_event(guild_member_add, #{}, undefined, Sessions, State),
|
||||||
|
?assertEqual([{<<"s2">>, S2}], Result).
|
||||||
|
|
||||||
extract_channel_id_message_create_uses_channel_id_field_test() ->
|
extract_channel_id_message_create_uses_channel_id_field_test() ->
|
||||||
Data = #{<<"channel_id">> => <<"42">>},
|
Data = #{<<"channel_id">> => <<"42">>},
|
||||||
?assertEqual(42, extract_channel_id(message_create, Data)).
|
?assertEqual(42, extract_channel_id(message_create, Data)).
|
||||||
|
|||||||
@ -373,12 +373,9 @@ get_sorted_members_for_list(ListId, State) ->
|
|||||||
Data = maps:get(data, State, #{}),
|
Data = maps:get(data, State, #{}),
|
||||||
Members = guild_data_index:member_values(Data),
|
Members = guild_data_index:member_values(Data),
|
||||||
FilteredMembers = guild_member_list_common:filter_members_for_list(ListId, Members, State),
|
FilteredMembers = guild_member_list_common:filter_members_for_list(ListId, Members, State),
|
||||||
lists:sort(
|
Decorated = [{guild_member_list_common:get_member_sort_key(M), M} || M <- FilteredMembers],
|
||||||
fun(A, B) ->
|
Sorted = lists:sort(fun({KeyA, _}, {KeyB, _}) -> KeyA =< KeyB end, Decorated),
|
||||||
guild_member_list_common:get_member_sort_key(A) =< guild_member_list_common:get_member_sort_key(B)
|
[M || {_, M} <- Sorted].
|
||||||
end,
|
|
||||||
FilteredMembers
|
|
||||||
).
|
|
||||||
|
|
||||||
-spec build_full_items(list_id(), guild_state(), [map()]) -> [list_item()].
|
-spec build_full_items(list_id(), guild_state(), [map()]) -> [list_item()].
|
||||||
build_full_items(ListId, State, SortedMembers) ->
|
build_full_items(ListId, State, SortedMembers) ->
|
||||||
|
|||||||
@ -228,6 +228,11 @@ get_cache_stats() ->
|
|||||||
|
|
||||||
-spec do_handle_message_create(map(), state()) -> state().
|
-spec do_handle_message_create(map(), state()) -> state().
|
||||||
do_handle_message_create(Params, State) ->
|
do_handle_message_create(Params, State) ->
|
||||||
|
spawn(fun() -> run_eligibility_and_dispatch(Params, State) end),
|
||||||
|
State.
|
||||||
|
|
||||||
|
-spec run_eligibility_and_dispatch(map(), state()) -> ok.
|
||||||
|
run_eligibility_and_dispatch(Params, State) ->
|
||||||
MessageData = maps:get(message_data, Params),
|
MessageData = maps:get(message_data, Params),
|
||||||
UserIds = maps:get(user_ids, Params),
|
UserIds = maps:get(user_ids, Params),
|
||||||
GuildId = maps:get(guild_id, Params),
|
GuildId = maps:get(guild_id, Params),
|
||||||
@ -274,7 +279,7 @@ do_handle_message_create(Params, State) ->
|
|||||||
),
|
),
|
||||||
case EligibleUsers of
|
case EligibleUsers of
|
||||||
[] ->
|
[] ->
|
||||||
State;
|
ok;
|
||||||
_ ->
|
_ ->
|
||||||
push_dispatcher:enqueue_send_notifications(
|
push_dispatcher:enqueue_send_notifications(
|
||||||
EligibleUsers,
|
EligibleUsers,
|
||||||
@ -286,5 +291,5 @@ do_handle_message_create(Params, State) ->
|
|||||||
ChannelName,
|
ChannelName,
|
||||||
State
|
State
|
||||||
),
|
),
|
||||||
State
|
ok
|
||||||
end.
|
end.
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user