From 542e51841213a1258da4c72573cd289a59b05da3 Mon Sep 17 00:00:00 2001 From: Daniel Finke Date: Tue, 16 Jun 2020 20:47:27 +0000 Subject: [PATCH] [4.3] Many dialyzer fixes for acdc (#6590) --- applications/acdc/src/acdc.hrl | 12 ++++----- applications/acdc/src/acdc_agent_fsm.erl | 15 +++++------ applications/acdc/src/acdc_agent_listener.erl | 25 ++++++++++--------- .../acdc/src/acdc_announcements_sup.erl | 2 +- applications/acdc/src/acdc_maintenance.erl | 2 +- applications/acdc/src/acdc_queue_fsm.erl | 2 +- applications/acdc/src/acdc_stats.erl | 4 +-- applications/acdc/src/acdc_util.erl | 2 +- applications/acdc/src/kapi_acdc_agent.erl | 2 +- applications/acdc/src/kapi_acdc_stats.erl | 16 ++++++------ core/kazoo_stdlib/src/kz_types.erl | 4 +++ 11 files changed, 45 insertions(+), 41 deletions(-) diff --git a/applications/acdc/src/acdc.hrl b/applications/acdc/src/acdc.hrl index f436632fb95..ef14088a566 100644 --- a/applications/acdc/src/acdc.hrl +++ b/applications/acdc/src/acdc.hrl @@ -11,10 +11,11 @@ -define(CACHE_NAME, 'acdc_cache'). --define(ABANDON_TIMEOUT, 'member_timeout'). --define(ABANDON_EXIT, 'member_exit'). --define(ABANDON_HANGUP, 'member_hangup'). --define(ABANDON_EMPTY, 'member_exit_empty'). +-define(ABANDON_TIMEOUT, <<"member_timeout">>). +-define(ABANDON_EXIT, <<"member_exit">>). +-define(ABANDON_HANGUP, <<"member_hangup">>). +-define(ABANDON_EMPTY, <<"member_exit_empty">>). +-define(ABANDON_INTERNAL_ERROR, <<"INTERNAL ERROR">>). -define(PRESENCE_GREEN, <<"terminated">>). -define(PRESENCE_RED_FLASH, <<"early">>). @@ -34,9 +35,6 @@ -define(DESTROYED_CHANNEL_REG(AcctId, User), {'p', 'l', {'destroyed_channel', AcctId, User}}). -define(DESTROYED_CHANNEL(CallId, HangupCause), {'call_down', CallId, HangupCause}). --type abandon_reason() :: ?ABANDON_TIMEOUT | ?ABANDON_EXIT | - ?ABANDON_HANGUP. - -type deliveries() :: [gen_listener:basic_deliver()]. -type announcements_pids() :: #{kz_term:ne_binary() => pid()}. diff --git a/applications/acdc/src/acdc_agent_fsm.erl b/applications/acdc/src/acdc_agent_fsm.erl index 283169c8e74..2ed7da15487 100644 --- a/applications/acdc/src/acdc_agent_fsm.erl +++ b/applications/acdc/src/acdc_agent_fsm.erl @@ -1573,7 +1573,7 @@ call_id(JObj) -> end. %% returns time left in seconds --spec time_left(reference() | 'false' | kz_term:api_integer()) -> kz_term:api_integer(). +-spec time_left(kz_term:api_reference() | 'false' | timeout()) -> timeout() | 'undefined'. time_left(Ref) when is_reference(Ref) -> time_left(erlang:read_timer(Ref)); time_left('false') -> 'undefined'; @@ -1783,7 +1783,7 @@ convert_to_endpoint(EPDoc) -> ], Call = kapps_call:exec(Setters, kapps_call:new()), - case kz_endpoint:build(kz_doc:id(EPDoc), [], Call) of + case kz_endpoint:build(kz_doc:id(EPDoc), kz_json:new(), Call) of {'ok', EP} -> EP; {'error', _} -> 'undefined' end. @@ -1899,7 +1899,7 @@ notify(Url, 'get', Data) -> ,[], 'get', <<>>, [] ). --spec notify(iolist(), kz_term:proplist(), 'get' | 'post', binary(), kz_term:proplist()) -> 'ok'. +-spec notify(kz_term:ne_binary(), kz_term:proplist(), 'get' | 'post', binary(), kz_term:proplist()) -> 'ok'. notify(Uri, Headers, Method, Body, Opts) -> Options = [{'connect_timeout', 200} ,{'timeout', 1000} @@ -1927,13 +1927,14 @@ recording_url(JObj) -> Url -> Url end. --spec uri(kz_term:ne_binary(), iolist()) -> iolist(). +-spec uri(kz_term:ne_binary(), iolist()) -> kz_term:ne_binary(). uri(URI, QueryString) -> + QueryBinary = kz_term:to_binary(QueryString), case kz_http_util:urlsplit(URI) of {Scheme, Host, Path, <<>>, Fragment} -> - kz_http_util:urlunsplit({Scheme, Host, Path, QueryString, Fragment}); + kz_http_util:urlunsplit({Scheme, Host, Path, QueryBinary, Fragment}); {Scheme, Host, Path, QS, Fragment} -> - kz_http_util:urlunsplit({Scheme, Host, Path, <>, Fragment}) + kz_http_util:urlunsplit({Scheme, Host, Path, <>, Fragment}) end. -spec apply_state_updates(state()) -> kz_types:handle_fsm_ret(state()). @@ -2021,7 +2022,7 @@ handle_resume(#state{agent_listener=AgentListener acdc_agent_listener:presence_update(AgentListener, ?PRESENCE_GREEN), {'next_state', 'ready', State#state{pause_ref='undefined'}}. --spec handle_pause(integer(), state()) -> kz_types:handle_fsm_ret(state()). +-spec handle_pause(timeout(), state()) -> kz_types:handle_fsm_ret(state()). handle_pause(Timeout, #state{agent_listener=AgentListener}=State) -> acdc_agent_listener:presence_update(AgentListener, ?PRESENCE_RED_FLASH), Ref = start_pause_timer(Timeout), diff --git a/applications/acdc/src/acdc_agent_listener.erl b/applications/acdc/src/acdc_agent_listener.erl index 4d9fdcac1c4..1f05cdafb6d 100644 --- a/applications/acdc/src/acdc_agent_listener.erl +++ b/applications/acdc/src/acdc_agent_listener.erl @@ -71,7 +71,7 @@ ,msg_queue_id :: kz_term:api_ne_binary() % the AMQP Queue ID of the ACDc Queue process ,agent_id :: kz_term:api_ne_binary() ,acct_db :: kz_term:api_ne_binary() - ,acct_id :: kz_term:api_ne_binary() + ,acct_id :: kz_term:api_binary() ,fsm_pid :: kz_term:api_pid() ,agent_queues = [] :: kz_term:ne_binaries() ,last_connect :: kz_time:now() | 'undefined' % last connection @@ -1203,28 +1203,28 @@ recording_format() -> -spec agent_id(agent()) -> kz_term:api_binary(). agent_id(Agent) -> - case kz_json:is_json_object(Agent) of - 'true' -> kz_doc:id(Agent); - 'false' -> kapps_call:owner_id(Agent) + case is_thief(Agent) of + 'true' -> kapps_call:owner_id(Agent); + 'false' -> kz_doc:id(Agent) end. -spec account_id(agent()) -> kz_term:api_binary(). account_id(Agent) -> - case kz_json:is_json_object(Agent) of - 'true' -> find_account_id(Agent); - 'false' -> kapps_call:account_id(Agent) + case is_thief(Agent) of + 'true' -> kapps_call:account_id(Agent); + 'false' -> find_account_id(Agent) end. --spec account_db(agent()) -> kz_term:api_binary(). +-spec account_db(agent()) -> kz_term:api_ne_binary(). account_db(Agent) -> - case kz_json:is_json_object(Agent) of - 'true' -> kz_doc:account_db(Agent); - 'false' -> kapps_call:account_db(Agent) + case is_thief(Agent) of + 'true' -> kapps_call:account_db(Agent); + 'false' -> kz_doc:account_db(Agent) end. -spec record_calls(agent()) -> boolean(). record_calls(Agent) -> - kz_json:is_json_object(Agent) + not is_thief(Agent) andalso kz_json:is_true(<<"record_calls">>, Agent, 'false'). -spec is_thief(agent()) -> boolean(). @@ -1243,6 +1243,7 @@ stop_agent_leg(ACallId, ACtrlQ) -> lager:debug("sending hangup to ~s: ~s", [ACallId, ACtrlQ]), kapi_dialplan:publish_command(ACtrlQ, Command). +-spec find_account_id(kz_json:object()) -> kz_term:api_ne_binary(). find_account_id(JObj) -> case kz_doc:account_id(JObj) of 'undefined' -> kz_util:format_account_id(kz_doc:account_db(JObj), 'raw'); diff --git a/applications/acdc/src/acdc_announcements_sup.erl b/applications/acdc/src/acdc_announcements_sup.erl index 7af86d784f7..afa202407c8 100644 --- a/applications/acdc/src/acdc_announcements_sup.erl +++ b/applications/acdc/src/acdc_announcements_sup.erl @@ -51,7 +51,7 @@ maybe_start_announcements(Manager, Call, Props) -> %% @doc Stop an announcements child process %% @end %%------------------------------------------------------------------------------ --spec stop_announcements(pid()) -> 'ok' | {'error', atom()}. +-spec stop_announcements(pid()) -> kz_types:sup_terminatechild_ret(). stop_announcements(Pid) -> supervisor:terminate_child(?SERVER, Pid). diff --git a/applications/acdc/src/acdc_maintenance.erl b/applications/acdc/src/acdc_maintenance.erl index 0b17920a5b7..26413cac341 100644 --- a/applications/acdc/src/acdc_maintenance.erl +++ b/applications/acdc/src/acdc_maintenance.erl @@ -302,7 +302,7 @@ flush_call_stat(CallId) -> acdc_stats:call_abandoned(kz_json:get_value(<<"Account-ID">>, Call) ,kz_json:get_value(<<"Queue-ID">>, Call) ,CallId - ,'INTERNAL_ERROR' + ,?ABANDON_INTERNAL_ERROR ), io:format("setting call to 'abandoned'~n", []) end. diff --git a/applications/acdc/src/acdc_queue_fsm.erl b/applications/acdc/src/acdc_queue_fsm.erl index 89a997be636..fff1c0b768b 100644 --- a/applications/acdc/src/acdc_queue_fsm.erl +++ b/applications/acdc/src/acdc_queue_fsm.erl @@ -191,7 +191,7 @@ cdr_url(ServerRef) -> init([WorkerSup, MgrPid, AccountId, QueueId]) -> kz_util:put_callid(<<"statem_", QueueId/binary, "_", (kz_term:to_binary(self()))/binary>>), - webseq:start(?WSD_ID), + _ = webseq:start(?WSD_ID), webseq:reg_who(?WSD_ID, self(), iolist_to_binary([<<"qFSM">>, pid_to_list(self())])), AccountDb = kz_util:format_account_db(AccountId), diff --git a/applications/acdc/src/acdc_stats.erl b/applications/acdc/src/acdc_stats.erl index 74407622db7..e7fb616d74c 100644 --- a/applications/acdc/src/acdc_stats.erl +++ b/applications/acdc/src/acdc_stats.erl @@ -83,7 +83,7 @@ call_waiting(AccountId, QueueId, CallId, CallerIdName, CallerIdNumber, CallerPri call_state_change(AccountId, 'waiting', Prop), 'ok' = kz_amqp_worker:cast(Prop, fun kapi_acdc_stats:publish_call_waiting/1). --spec call_abandoned(kz_term:ne_binary(), kz_term:ne_binary(), kz_term:ne_binary(), atom()) -> 'ok'. +-spec call_abandoned(kz_term:ne_binary(), kz_term:ne_binary(), kz_term:ne_binary(), kz_term:ne_binary()) -> 'ok'. call_abandoned(AccountId, QueueId, CallId, Reason) -> Prop = props:filter_undefined( [{<<"Account-ID">>, AccountId} @@ -1012,7 +1012,7 @@ update_call_stat(Id, Updates, Props) -> call_state_change(AccountId, Status, Prop) -> Body = kz_json:normalize(kz_json:from_list([{<<"Event">>, <<"call_status_change">>} - ,{<<"Status">>, Status} + ,{<<"Status">>, kz_term:to_binary(Status)} | Prop ])), kz_edr:event(?APP_NAME, ?APP_VERSION, 'ok', 'info', Body, AccountId). diff --git a/applications/acdc/src/acdc_util.erl b/applications/acdc/src/acdc_util.erl index 39ef7c5cc69..7d43e9f208f 100644 --- a/applications/acdc/src/acdc_util.erl +++ b/applications/acdc/src/acdc_util.erl @@ -82,7 +82,7 @@ send_cdr(Url, JObj, Retries) -> end. %% Returns the list of agents configured for the queue --spec agents_in_queue(kz_term:ne_binary(), kz_term:ne_binary()) -> kz_json:path(). +-spec agents_in_queue(kz_term:ne_binary(), kz_term:ne_binary()) -> kz_json:objects(). agents_in_queue(AcctDb, QueueId) -> case kz_datamgr:get_results(AcctDb, <<"queues/agents_listing">> ,[{'startkey', [QueueId]} diff --git a/applications/acdc/src/kapi_acdc_agent.erl b/applications/acdc/src/kapi_acdc_agent.erl index 94a7dde137b..d829f65d388 100644 --- a/applications/acdc/src/kapi_acdc_agent.erl +++ b/applications/acdc/src/kapi_acdc_agent.erl @@ -567,7 +567,7 @@ unbind_q(Q, {AcctId, AgentId, Status}, 'undefined') -> _ = kz_amqp_util:unbind_q_from_kapps(Q, sync_req_routing_key(AcctId, AgentId)), kz_amqp_util:unbind_q_from_kapps(Q, stats_req_routing_key(AcctId)); unbind_q(Q, {_, AgentId, _}=Ids, ['member_connect_win'|T]) -> - kz_amqp_util:unbind_q_from_kapps(Q, member_connect_win_routing_key(AgentId)), + _ = kz_amqp_util:unbind_q_from_kapps(Q, member_connect_win_routing_key(AgentId)), unbind_q(Q, Ids, T); unbind_q(Q, {AcctId, AgentId, Status}=Ids, ['status'|T]) -> _ = kz_amqp_util:unbind_q_from_kapps(Q, agent_status_routing_key(AcctId, AgentId, Status)), diff --git a/applications/acdc/src/kapi_acdc_stats.erl b/applications/acdc/src/kapi_acdc_stats.erl index dac356b02f2..f9460c272ff 100644 --- a/applications/acdc/src/kapi_acdc_stats.erl +++ b/applications/acdc/src/kapi_acdc_stats.erl @@ -657,21 +657,21 @@ unbind_q(Q, Props) -> unbind_q(Q, AcctId, QID, AID, props:get_value('restrict_to', Props)). unbind_q(Q, AcctId, QID, AID, 'undefined') -> - kz_amqp_util:unbind_q_from_kapps(Q, call_stat_routing_key(AcctId, QID)), - kz_amqp_util:unbind_q_from_kapps(Q, status_stat_routing_key(AcctId, AID)), - kz_amqp_util:unbind_q_from_kapps(Q, query_call_stat_routing_key(AcctId, QID)), - kz_amqp_util:unbind_q_from_kapps(Q, query_status_stat_routing_key(AcctId, AID)); + _ = kz_amqp_util:unbind_q_from_kapps(Q, call_stat_routing_key(AcctId, QID)), + _ = kz_amqp_util:unbind_q_from_kapps(Q, status_stat_routing_key(AcctId, AID)), + _ = kz_amqp_util:unbind_q_from_kapps(Q, query_call_stat_routing_key(AcctId, QID)), + _ = kz_amqp_util:unbind_q_from_kapps(Q, query_status_stat_routing_key(AcctId, AID)); unbind_q(Q, AcctId, QID, AID, ['call_stat'|L]) -> - kz_amqp_util:unbind_q_from_kapps(Q, call_stat_routing_key(AcctId, QID)), + _ = kz_amqp_util:unbind_q_from_kapps(Q, call_stat_routing_key(AcctId, QID)), unbind_q(Q, AcctId, QID, AID, L); unbind_q(Q, AcctId, QID, AID, ['status_stat'|L]) -> - kz_amqp_util:unbind_q_from_kapps(Q, status_stat_routing_key(AcctId, AID)), + _ = kz_amqp_util:unbind_q_from_kapps(Q, status_stat_routing_key(AcctId, AID)), unbind_q(Q, AcctId, QID, AID, L); unbind_q(Q, AcctId, QID, AID, ['query_call_stat'|L]) -> - kz_amqp_util:unbind_q_from_kapps(Q, query_call_stat_routing_key(AcctId, QID)), + _ = kz_amqp_util:unbind_q_from_kapps(Q, query_call_stat_routing_key(AcctId, QID)), unbind_q(Q, AcctId, QID, AID, L); unbind_q(Q, AcctId, QID, AID, ['query_status_stat'|L]) -> - kz_amqp_util:unbind_q_from_kapps(Q, query_status_stat_routing_key(AcctId, AID)), + _ = kz_amqp_util:unbind_q_from_kapps(Q, query_status_stat_routing_key(AcctId, AID)), unbind_q(Q, AcctId, QID, AID, L); unbind_q(Q, AcctId, QID, AID, [_|L]) -> unbind_q(Q, AcctId, QID, AID, L); diff --git a/core/kazoo_stdlib/src/kz_types.erl b/core/kazoo_stdlib/src/kz_types.erl index e1b5b1565d1..4e341a2e075 100644 --- a/core/kazoo_stdlib/src/kz_types.erl +++ b/core/kazoo_stdlib/src/kz_types.erl @@ -31,6 +31,8 @@ -type sup_startchild_ret() :: {'ok', sup_child_id()} | {'ok', sup_child_id(), any()} | {'error', sup_startchild_err()}. +-type sup_terminatechild_err() :: 'not_found' | 'simple_one_for_one'. +-type sup_terminatechild_ret() :: 'ok' | {'error', sup_terminatechild_err()}. -type sup_deletechild_err() :: 'running' | 'restarting' | 'not_found' | 'simple_one_for_one'. -type sup_deletechild_ret() :: 'ok' | {'error', sup_deletechild_err()}. @@ -138,6 +140,8 @@ ,sup_child_id/0 ,sup_startchild_err/0 ,sup_startchild_ret/0 + ,sup_terminatechild_err/0 + ,sup_terminatechild_ret/0 ,sup_deletechild_err/0 ,sup_deletechild_ret/0 ,startlink_err/0