From 6dd40fbe73e5b338db2aeeb69f080ca07e725b6a Mon Sep 17 00:00:00 2001 From: Daniel Finke Date: Sun, 31 May 2020 19:59:52 +0000 Subject: [PATCH] PISTON-893: acdc_agent_listener doesn't need route.req, don't bind it --- applications/acdc/src/acdc_agent_fsm.erl | 63 +++++++------------ applications/acdc/src/acdc_agent_listener.erl | 17 ----- 2 files changed, 23 insertions(+), 57 deletions(-) diff --git a/applications/acdc/src/acdc_agent_fsm.erl b/applications/acdc/src/acdc_agent_fsm.erl index 0839ec00243..6a031ab4a94 100644 --- a/applications/acdc/src/acdc_agent_fsm.erl +++ b/applications/acdc/src/acdc_agent_fsm.erl @@ -579,7 +579,7 @@ ready('cast', {'member_connect_win', JObj, 'same_node'}, #state{agent_listener=A lager:debug("trying to ring agent ~s to connect to caller in queue ~s", [AgentId, QueueId]), - case get_endpoints(OrigEPs, AgentListener, Call, AgentId, QueueId) of + case get_endpoints(OrigEPs, Call, AgentId, QueueId) of {'error', 'no_endpoints'} -> lager:info("agent ~s has no endpoints assigned; logging agent out", [AgentId]), acdc_agent_stats:agent_logged_out(AccountId, AgentId), @@ -628,7 +628,7 @@ ready('cast', {'member_connect_win', JObj, 'different_node'}, #state{agent_liste RecordingUrl = recording_url(JObj), %% Only start monitoring if the agent can actually take the call - case get_endpoints(OrigEPs, AgentListener, Call, AgentId, QueueId) of + case get_endpoints(OrigEPs, Call, AgentId, QueueId) of {'error', 'no_endpoints'} -> lager:info("agent ~s has no endpoints assigned; logging agent out", [AgentId]), {'next_state', 'paused', State}; @@ -1445,7 +1445,7 @@ handle_event('load_endpoints', StateName, #state{agent_id=AgentId %% Inform us of things with us as owner catch gproc:reg(?OWNER_UPDATE_REG(AccountId, AgentId)), - case get_endpoints([], AgentListener, Call, AgentId, 'undefined') of + case get_endpoints([], Call, AgentId, 'undefined') of {'error', 'no_endpoints'} -> {'next_state', StateName, State}; {'ok', EPs} -> {'next_state', StateName, State#state{endpoints=EPs}}; {'error', E} -> {'stop', E, State} @@ -1467,34 +1467,31 @@ handle_info({'member_connect_win', _, 'different_node'}, StateName, State) -> handle_info({'endpoint_edited', EP}, StateName, #state{endpoints=EPs ,account_id=AccountId ,agent_id=AgentId - ,agent_listener=AgentListener }=State) -> EPId = kz_doc:id(EP), case kz_json:get_value(<<"owner_id">>, EP) of AgentId -> lager:debug("device ~s edited, we're the owner, maybe adding it", [EPId]), - {'next_state', StateName, State#state{endpoints=maybe_add_endpoint(EPId, EP, EPs, AccountId, AgentListener)}, 'hibernate'}; + {'next_state', StateName, State#state{endpoints=maybe_add_endpoint(EPId, EP, EPs, AccountId)}, 'hibernate'}; _OwnerId -> lager:debug("device ~s edited, owner now ~s, maybe removing it", [EPId, _OwnerId]), - {'next_state', StateName, State#state{endpoints=maybe_remove_endpoint(EPId, EPs, AccountId, AgentListener)}, 'hibernate'} + {'next_state', StateName, State#state{endpoints=maybe_remove_endpoint(EPId, EPs, AccountId)}, 'hibernate'} end; handle_info({'endpoint_deleted', EP}, StateName, #state{endpoints=EPs ,account_id=AccountId - ,agent_listener=AgentListener }=State) -> EPId = kz_doc:id(EP), lager:debug("device ~s deleted, maybe removing it", [EPId]), - {'next_state', StateName, State#state{endpoints=maybe_remove_endpoint(EPId, EPs, AccountId, AgentListener)}, 'hibernate'}; + {'next_state', StateName, State#state{endpoints=maybe_remove_endpoint(EPId, EPs, AccountId)}, 'hibernate'}; handle_info({'endpoint_created', EP}, StateName, #state{endpoints=EPs ,account_id=AccountId ,agent_id=AgentId - ,agent_listener=AgentListener }=State) -> EPId = kz_doc:id(EP), case kz_json:get_value(<<"owner_id">>, EP) of AgentId -> lager:debug("device ~s created, we're the owner, maybe adding it", [EPId]), - {'next_state', StateName, State#state{endpoints=maybe_add_endpoint(EPId, EP, EPs, AccountId, AgentListener)}, 'hibernate'}; + {'next_state', StateName, State#state{endpoints=maybe_add_endpoint(EPId, EP, EPs, AccountId)}, 'hibernate'}; _OwnerId -> lager:debug("device ~s created, owner is ~s, maybe ignoring", [EPId, _OwnerId]), @@ -1502,7 +1499,7 @@ handle_info({'endpoint_created', EP}, StateName, #state{endpoints=EPs 'undefined' -> {'next_state', StateName, State}; _ -> lager:debug("device ~s created, we're a hotdesk user, maybe adding it", [EPId]), - {'next_state', StateName, State#state{endpoints=maybe_add_endpoint(EPId, EP, EPs, AccountId, AgentListener)}, 'hibernate'} + {'next_state', StateName, State#state{endpoints=maybe_add_endpoint(EPId, EP, EPs, AccountId)}, 'hibernate'} end end; handle_info(?NEW_CHANNEL_FROM(_CallId), StateName, State) -> @@ -1761,60 +1758,46 @@ find_endpoint_id(EP) -> find_endpoint_id(EP, 'undefined') -> kz_json:get_value(<<"Endpoint-ID">>, EP); find_endpoint_id(_EP, EPId) -> EPId. --spec monitor_endpoint(kz_json:object(), kz_term:ne_binary(), kz_types:server_ref()) -> any(). -monitor_endpoint('undefined', _, _) -> 'ok'; -monitor_endpoint(EP, AccountId, AgentListener) -> +-spec monitor_endpoint(kz_json:api_object(), kz_term:ne_binary()) -> any(). +monitor_endpoint('undefined', _) -> 'ok'; +monitor_endpoint(EP, AccountId) -> Username = find_username(EP), - - %% Bind for outbound call requests - acdc_agent_listener:add_endpoint_bindings(AgentListener - ,kz_endpoint:get_sip_realm(EP, AccountId) - ,find_username(EP) - ), - %% Inform us of device changes catch gproc:reg(?ENDPOINT_UPDATE_REG(AccountId, find_endpoint_id(EP))), catch gproc:reg(?NEW_CHANNEL_REG(AccountId, Username)), catch gproc:reg(?DESTROYED_CHANNEL_REG(AccountId, Username)). --spec unmonitor_endpoint(kz_json:object(), kz_term:ne_binary(), kz_types:server_ref()) -> any(). -unmonitor_endpoint(EP, AccountId, AgentListener) -> +-spec unmonitor_endpoint(kz_json:object(), kz_term:ne_binary()) -> any(). +unmonitor_endpoint(EP, AccountId) -> Username = find_username(EP), - - %% Bind for outbound call requests - acdc_agent_listener:remove_endpoint_bindings(AgentListener - ,kz_endpoint:get_sip_realm(EP, AccountId) - ,find_username(EP) - ), - %% Inform us of device changes catch gproc:unreg(?ENDPOINT_UPDATE_REG(AccountId, find_endpoint_id(EP))), catch gproc:unreg(?NEW_CHANNEL_REG(AccountId, Username)), catch gproc:unreg(?DESTROYED_CHANNEL_REG(AccountId, Username)). --spec maybe_add_endpoint(kz_term:ne_binary(), kz_json:object(), kz_json:objects(), kz_term:ne_binary(), kz_types:server_ref()) -> any(). -maybe_add_endpoint(EPId, EP, EPs, AccountId, AgentListener) -> +-spec maybe_add_endpoint(kz_term:ne_binary(), kz_json:object(), kz_json:objects(), kz_term:ne_binary()) -> any(). +maybe_add_endpoint(EPId, EP, EPs, AccountId) -> case lists:partition(fun(E) -> find_endpoint_id(E) =:= EPId end, EPs) of {[], _} -> lager:debug("endpoint ~s not in our list, adding it", [EPId]), - [begin monitor_endpoint(EP, AccountId, AgentListener), EP end | EPs]; + [begin monitor_endpoint(EP, AccountId), EP end | EPs]; {_, _} -> EPs end. --spec maybe_remove_endpoint(kz_term:ne_binary(), kz_json:objects(), kz_term:ne_binary(), kz_types:server_ref()) -> kz_json:objects(). -maybe_remove_endpoint(EPId, EPs, AccountId, AgentListener) -> +-spec maybe_remove_endpoint(kz_term:ne_binary(), kz_json:objects(), kz_term:ne_binary()) -> kz_json:objects(). +maybe_remove_endpoint(EPId, EPs, AccountId) -> case lists:partition(fun(EP) -> find_endpoint_id(EP) =:= EPId end, EPs) of {[], _} -> EPs; %% unknown endpoint {[RemoveEP], EPs1} -> lager:debug("endpoint ~s in our list, removing it", [EPId]), - _ = unmonitor_endpoint(RemoveEP, AccountId, AgentListener), + _ = unmonitor_endpoint(RemoveEP, AccountId), EPs1 end. --spec get_endpoints(kz_json:objects(), kz_types:server_ref(), kapps_call:call(), kz_term:api_binary(), kz_term:api_binary()) -> +-spec get_endpoints(kz_json:objects(), kapps_call:call(), kz_term:api_binary(), kz_term:api_binary()) -> {'ok', kz_json:objects()} | {'error', any()}. -get_endpoints(OrigEPs, AgentListener, Call, AgentId, QueueId) -> +get_endpoints(OrigEPs, Call, AgentId, QueueId) -> case catch acdc_util:get_endpoints(Call, AgentId) of [] -> {'error', 'no_endpoints'}; @@ -1822,8 +1805,8 @@ get_endpoints(OrigEPs, AgentListener, Call, AgentId, QueueId) -> AccountId = kapps_call:account_id(Call), {Add, Rm} = changed_endpoints(OrigEPs, EPs), - _ = [monitor_endpoint(EP, AccountId, AgentListener) || EP <- Add], - _ = [unmonitor_endpoint(EP, AccountId, AgentListener) || EP <- Rm], + _ = [monitor_endpoint(EP, AccountId) || EP <- Add], + _ = [unmonitor_endpoint(EP, AccountId) || EP <- Rm], {'ok', [kz_json:set_value([<<"Custom-Channel-Vars">>, <<"Queue-ID">>], QueueId, EP) || EP <- EPs]}; {'EXIT', E} -> diff --git a/applications/acdc/src/acdc_agent_listener.erl b/applications/acdc/src/acdc_agent_listener.erl index 768cc394927..bfe859b9311 100644 --- a/applications/acdc/src/acdc_agent_listener.erl +++ b/applications/acdc/src/acdc_agent_listener.erl @@ -34,7 +34,6 @@ ,rm_acdc_queue/2 ,call_status_req/1, call_status_req/2 ,fsm_started/2 - ,add_endpoint_bindings/3, remove_endpoint_bindings/3 ,outbound_call_id/2 ,remove_cdr_urls/2 ,logout_agent/1 @@ -309,22 +308,6 @@ call_status_req(Srv, CallId) -> fsm_started(Srv, FSM) -> gen_listener:cast(Srv, {'fsm_started', FSM}). --spec add_endpoint_bindings(pid(), kz_term:ne_binary(), kz_term:api_ne_binary()) -> 'ok'. -add_endpoint_bindings(_Srv, _Realm, 'undefined') -> - lager:debug("ignoring adding endpoint bindings for undefined user @ ~s", [_Realm]); -add_endpoint_bindings(Srv, Realm, User) -> - lager:debug("adding route bindings to ~p for endpoint ~s@~s", [Srv, User, Realm]), - gen_listener:add_binding(Srv, 'route', [{'realm', Realm} - ,{'user', User} - ]). - --spec remove_endpoint_bindings(pid(), kz_term:ne_binary(), kz_term:ne_binary()) -> 'ok'. -remove_endpoint_bindings(Srv, Realm, User) -> - lager:debug("removing route bindings to ~p for endpoint ~s@~s", [Srv, User, Realm]), - gen_listener:rm_binding(Srv, 'route', [{'realm', Realm} - ,{'user', User} - ]). - -spec remove_cdr_urls(pid(), kz_term:ne_binary()) -> 'ok'. remove_cdr_urls(Srv, CallId) -> gen_listener:cast(Srv, {'remove_cdr_urls', CallId}).