Skip to content

Commit

Permalink
WHISTLE-626: dialyzer updates and makefile update
Browse files Browse the repository at this point in the history
  • Loading branch information
James Aimonetti committed Feb 17, 2012
1 parent 4fc71d7 commit ccb7fb9
Show file tree
Hide file tree
Showing 10 changed files with 137 additions and 131 deletions.
10 changes: 5 additions & 5 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
DIALYZER = dialyzer
REBAR = rebar

DIRS = lib/whistle-1.0.0 lib/whistle_couch-1.0.0 lib/whistle_amqp-1.0.0 lib/whistle_number_manager-1.0.0 ecallmgr whistle_apps

all: app

app: deps
app:
@$(REBAR) compile

deps:
Expand All @@ -25,10 +27,8 @@ build-plt:
@$(DIALYZER) --build_plt --output_plt .platform_dialyzer.plt \
--apps kernel stdlib sasl inets crypto public_key ssl

dialyze:
@$(DIALYZER) --src ecallmgr/src/ --src whistle_apps/src/ --src lib/whistle-1.0.0/src/ \
--src lib/whistle_couch-1.0.0/src/ --src lib/whistle_amqp-1.0.0/src/ \
--src lib/whistle_number_manager-1.0.0/src/ \
dialyze:
@$(DIALYZER) $(foreach DIR,$(DIRS),--src $(DIR)/src) \
--plt .platform_dialyzer.plt --no_native \
-Werror_handling -Wrace_conditions -Wunmatched_returns # -Wunderspecs

Expand Down
2 changes: 2 additions & 0 deletions ecallmgr/src/ecallmgr_amqp_pool.erl
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,8 @@ authn_req(Prop, Timeout) ->
,{request, Prop, fun wapi_authn:publish_req/1, get(callid), Timeout}
,Timeout).

-spec authz_req/1 :: (proplist() | wh_json:json_object()) -> {'ok', wh_json:json_object()}.
-spec authz_req/2 :: (proplist() | wh_json:json_object(), pos_integer()) -> {'ok', wh_json:json_object()}.
authz_req(Prop) ->
authz_req(Prop, ?DEFAULT_TIMEOUT).
authz_req(Prop, Timeout) ->
Expand Down
29 changes: 15 additions & 14 deletions ecallmgr/src/ecallmgr_amqp_pool_worker.erl
Original file line number Diff line number Diff line change
Expand Up @@ -55,14 +55,15 @@ start_link() ->
stop(Srv) ->
gen_listener:stop(Srv).

-spec start_req/7 :: (pid(), proplist(), fun(), ne_binary(), {pid(), reference()}, pid() | atom(), non_neg_integer()) -> 'ok'.
start_req(Srv, Prop, ApiFun, CallId, From, Parent, Timeout) when is_integer(Timeout) ->
-spec start_req/7 :: (pid(), wh_json:json_object(), fun(), ne_binary(), {pid(), reference()}, pid() | atom(), pos_integer()) -> 'ok'.
start_req(Srv, Prop, ApiFun, CallId, From, Parent, Timeout) when is_integer(Timeout) and Timeout > 0->
JObj = case wh_json:is_json_object(Prop) of
true -> Prop;
false -> wh_json:from_list(Prop)
end,
JObj1 = wh_json:set_value(<<"Server-ID">>, gen_listener:queue_name(Srv)
,wh_json:set_value(<<"Call-ID">>, CallId, JObj)),
JObj1 = wh_json:set_values([{<<"Server-ID">>, gen_listener:queue_name(Srv)}
,{<<"Call-ID">>, CallId}
], JObj),
PubFun = fun() -> put(callid, CallId), ApiFun(JObj1) end,
gen_listener:cast(Srv, {employed, From, Parent, PubFun, CallId, Timeout}).

Expand Down Expand Up @@ -128,7 +129,7 @@ handle_cast({employed, {Pid, _}=From, Parent, PubFun, CallId, Timeout}, #state{s
catch
E:R ->
?LOG("publish fun ~s: ~p", [E,R]),
erlang:cancel_timer(ReqRef),
_ = erlang:cancel_timer(ReqRef),
ecallmgr_amqp_pool:worker_free(Parent, self(), 0),
{noreply, State}
end;
Expand All @@ -137,8 +138,8 @@ handle_cast({response_recv, JObj}, #state{status=busy, from=From, parent=Parent,
Elapsed = timer:now_diff(erlang:now(), Start),
?LOG("received response after ~b ms, returning to pool ~p", [Elapsed div 1000, Parent]),

erlang:demonitor(Ref, [flush]),
erlang:cancel_timer(ReqRef),
_ = erlang:demonitor(Ref, [flush]),
_ = erlang:cancel_timer(ReqRef),
gen_server:reply(From, {ok, JObj}),

ecallmgr_amqp_pool:worker_free(Parent, self(), Elapsed),
Expand All @@ -163,8 +164,8 @@ handle_cast({response_recv, JObj}, State) ->
handle_info({'DOWN', Ref, process, Pid, _Info}, #state{status=busy, ref=Ref, parent=Parent, req_ref=ReqRef}) ->
?LOG_END("requestor (~w) down, giving up on task", [Pid]),

erlang:demonitor(Ref, [flush]),
erlang:cancel_timer(ReqRef),
_ = erlang:demonitor(Ref, [flush]),
_ = erlang:cancel_timer(ReqRef),

ecallmgr_amqp_pool:worker_free(Parent, self(), 0),
{noreply, #state{}};
Expand All @@ -176,8 +177,8 @@ handle_info({timeout, ReqRef, req_timeout}, #state{status=busy, from=From, paren
Elapsed = timer:now_diff(erlang:now(), Start),
?LOG("received response after ~b ms, returning to pool ~p", [Elapsed div 1000, Parent]),

erlang:demonitor(Ref, [flush]),
erlang:cancel_timer(ReqRef),
_ = erlang:demonitor(Ref, [flush]),
_ = erlang:cancel_timer(ReqRef),

gen_server:reply(From, {error, timeout}),

Expand All @@ -191,16 +192,16 @@ handle_info(req_timeout, #state{status=busy, from=From, parent=Parent, ref=Ref
Elapsed = timer:now_diff(erlang:now(), Start),
?LOG("received response after ~b ms, returning to pool ~p", [Elapsed div 1000, Parent]),

erlang:demonitor(Ref, [flush]),
erlang:cancel_timer(ReqRef),
_ = erlang:demonitor(Ref, [flush]),
_ = erlang:cancel_timer(ReqRef),

gen_server:reply(From, {error, timeout}),

ecallmgr_amqp_pool:worker_free(Parent, self(), Elapsed),
{noreply, #state{}};

handle_info(_Info, State) ->
?LOG("Unhandled message: ~p", [_Info]),
?LOG("unhandled message: ~p", [_Info]),
{noreply, State}.

handle_event(_JObj, _State) ->
Expand Down
7 changes: 5 additions & 2 deletions ecallmgr/src/ecallmgr_app.erl
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,17 @@
%% Helper macro for declaring children of supervisor
-define(CHILD(I, Type, Ref, Args), {Ref, {I, start_link, [{Ref, Args}]}, permanent, 5000, Type, [I]}).

-define(PIDFILE, [code:priv_dir(ecallmgr), "/ecallmgr.pid"]).
-define(PIDFILE, "/ecallmgr.pid").

%% ===================================================================
%% Application callbacks
%% ===================================================================

start(_StartType, _StartArgs) ->
wh_util:write_pid(?PIDFILE),
_ = case code:priv_dir(ecallmgr) of
{error, _} -> ok;
Prefix -> wh_util:write_pid([Prefix, ?PIDFILE])
end,
ecallmgr:start_link().

stop(_State) ->
Expand Down
6 changes: 3 additions & 3 deletions ecallmgr/src/ecallmgr_authz.erl
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
%% otherwise, the call is not authorized
-spec default/0 :: () -> {boolean(), []}.
default() ->
case ecallmgr_util:get_setting(authz_default, <<"deny">>) of
case ecallmgr_util:get_setting(<<"authz_default">>, <<"deny">>) of
{ok, <<"allow">>} -> {true, []};
_ -> {false, []}
end.
Expand Down Expand Up @@ -86,15 +86,15 @@ authorize_loop(JObj) ->

{authz_win, From, Ref} ->
wapi_authz:publish_win(wh_json:get_value(<<"Server-ID">>, JObj), wh_json:delete_key(<<"Event-Name">>, JObj)),
?LOG("Sent authz_win, nice"),
?LOG("sent authz_win, nice"),

From ! {authz_win_sent, Ref},

authorize_loop(JObj);

_ -> authorize_loop(JObj)
after ?AUTHZ_LOOP_TIMEOUT ->
?LOG_SYS("Going down from timeout")
?LOG_SYS("going down from timeout")
end.

-spec request/3 :: (ne_binary(), ne_binary(), proplist()) -> proplist().
Expand Down
30 changes: 16 additions & 14 deletions ecallmgr/src/ecallmgr_call_command.erl
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
-type io_device() :: pid() | fd().
-type file_stream_state() :: {'undefined' | io_device(), binary()}.

-spec exec_cmd/4 :: (atom(), ne_binary(), wh_json:json_object(), pid()) -> 'ok' | 'timeout' | {'error', 'invalid_callid' | 'failed'}.
-spec exec_cmd/4 :: (atom(), ne_binary(), wh_json:json_object(), pid()) -> 'ok' | 'timeout' | {'error', ne_binary()}.
exec_cmd(Node, UUID, JObj, ControlPID) ->
DestID = wh_json:get_value(<<"Call-ID">>, JObj),
App = wh_json:get_value(<<"Application-Name">>, JObj),
Expand Down Expand Up @@ -48,10 +48,9 @@ exec_cmd(Node, UUID, JObj, ControlPID) ->
%% the FS ESL via mod_erlang_event
%% @end
%%--------------------------------------------------------------------
-spec get_fs_app/4 :: (atom(), ne_binary(), wh_json:json_object(), ne_binary()) -> {binary(), binary() | 'noop'}
-spec get_fs_app/4 :: (atom(), ne_binary(), wh_json:json_object(), ne_binary()) -> {ne_binary(), ne_binary() | 'noop'}
| {'return', 'ok'}
| {'error', binary()}
| {'error', binary(), binary()}.
| {'error', ne_binary()}.
get_fs_app(_Node, _UUID, JObj, <<"noop">>) ->
case wapi_dialplan:noop_v(JObj) of
false ->
Expand Down Expand Up @@ -280,7 +279,9 @@ get_fs_app(Node, UUID, JObj, <<"bridge">>) ->
put(callid, UUID),
S ! {self(), (catch get_bridge_endpoint(EP))}
end)
|| {_, EP} <- props:unique(KeyedEPs)]
|| {_, EP} <- props:unique(KeyedEPs)
,wh_json:is_json_object(EP)
]
], D =/= ""],

Generators = [fun(DP) ->
Expand All @@ -295,7 +296,7 @@ get_fs_app(Node, UUID, JObj, <<"bridge">>) ->
,fun(DP) ->
case wh_json:get_value(<<"Ringback">>, JObj) of
undefined ->
{ok, RBSetting} = ecallmgr_util:get_setting(default_ringback, <<"%(2000,4000,440,480)">>),
{ok, RBSetting} = ecallmgr_util:get_setting(<<"default_ringback">>, <<"%(2000,4000,440,480)">>),
[{"application", "set ringback=" ++ wh_util:to_list(RBSetting)}|DP];
Ringback ->
Stream = ecallmgr_util:media_path(Ringback, extant, UUID),
Expand Down Expand Up @@ -335,10 +336,11 @@ get_fs_app(Node, UUID, JObj, <<"bridge">>) ->
end
end
,fun(DP) ->
case wh_json:get_value(<<"Custom-Channel-Vars">>, JObj) of
{struct, Props} ->
CCVs = wh_json:get_value(<<"Custom-Channel-Vars">>, JObj),
case wh_json:is_json_object(CCVs) of
true ->
[{"application", <<"set ", Var/binary, "=", (wh_util:to_binary(V))/binary>>}
|| {K, V} <- Props,
|| {K, V} <- wh_json:to_proplist(CCVs),
(Var = props:get_value(K, ?SPECIAL_CHANNEL_VARS)) =/= undefined
] ++ DP;
_ ->
Expand Down Expand Up @@ -656,9 +658,9 @@ send_cmd(Node, UUID, AppName, Args) ->
%%--------------------------------------------------------------------
-spec create_masquerade_event/2 :: (ne_binary(), ne_binary()) -> ne_binary().
create_masquerade_event(Application, EventName) ->
wh_util:to_list(<<"event Event-Name=CUSTOM,Event-Subclass=whistle::masquerade"
,",whistle_event_name=", EventName/binary
,",whistle_application_name=", Application/binary>>).
<<"event Event-Name=CUSTOM,Event-Subclass=whistle::masquerade"
,",whistle_event_name=", EventName/binary
,",whistle_application_name=", Application/binary>>.

%%--------------------------------------------------------------------
%% @private
Expand Down Expand Up @@ -694,7 +696,7 @@ stream_over_amqp(Node, UUID, File, JObj, Headers) ->
Q ->
Q
end,
amqp_stream(DestQ, fun stream_file/1, {undefined, File}, Headers, 1),
_ = amqp_stream(DestQ, fun stream_file/1, {undefined, File}, Headers, 1),
send_store_call_event(Node, UUID, <<"complete">>).

%%--------------------------------------------------------------------
Expand Down Expand Up @@ -883,7 +885,7 @@ send_fetch_call_event(Node, UUID, JObj) ->
%% @doc
%% @end
%%--------------------------------------------------------------------
-spec send_store_call_event/3 :: (atom(), ne_binary(), wh_json:json_object()) -> 'ok'.
-spec send_store_call_event/3 :: (atom(), ne_binary(), wh_json:json_object() | ne_binary()) -> 'ok'.
send_store_call_event(Node, UUID, MediaTransResults) ->
Timestamp = wh_util:to_binary(wh_util:current_tstamp()),
Prop = try
Expand Down
26 changes: 12 additions & 14 deletions lib/whistle-1.0.0/src/gen_listener.erl
Original file line number Diff line number Diff line change
Expand Up @@ -96,23 +96,23 @@ behaviour_info(_) ->
-define(CALLBACK_TIMEOUT_MSG, callback_timeout).

%% API functions for requesting data from the gen_listener
-spec queue_name/1 :: (pid() | atom()) -> {'ok', binary()} | {'error', atom()}.
-spec queue_name/1 :: (pid()) -> {'ok', binary()} | {'error', atom()}.
queue_name(Srv) ->
gen_server:call(Srv, queue_name).

responders(Srv) ->
gen_server:call(Srv, responders).

%% API functions that mirror gen_server:call,cast,reply
-spec call/2 :: (pid() | atom(), term()) -> term().
-spec call/2 :: (pid(), term()) -> term().
call(Name, Request) ->
gen_server:call(Name, Request).

-spec call/3 :: (pid() | atom(), term(), 'infinity' | non_neg_integer()) -> term().
-spec call/3 :: (pid(), term(), 'infinity' | non_neg_integer()) -> term().
call(Name, Request, Timeout) ->
gen_server:call(Name, Request, Timeout).

-spec cast/2 :: (pid() | atom(), term()) -> 'ok'.
-spec cast/2 :: (pid(), term()) -> 'ok'.
cast(Name, Request) ->
gen_server:cast(Name, Request).

Expand All @@ -125,34 +125,32 @@ reply(From, Msg) ->
start_link(Module, Params, InitArgs) ->
gen_server:start_link(?MODULE, [Module, Params, InitArgs], []).

-spec stop/1 :: (pid() | atom()) -> 'ok'.
stop(Srv) when is_atom(Srv) ->
stop(whereis(Srv));
-spec stop/1 :: (pid()) -> 'ok'.
stop(Srv) when is_pid(Srv) ->
gen_server:cast(Srv, stop).

-spec add_responder/3 :: (pid() | atom(), responder_callback_mod(), responder_callback_mapping() | responder_callback_mappings()) -> 'ok'.
-spec add_responder/3 :: (pid(), responder_callback_mod(), responder_callback_mapping() | responder_callback_mappings()) -> 'ok'.
add_responder(Srv, Responder, Key) when not is_list(Key) ->
add_responder(Srv, Responder, [Key]);
add_responder(Srv, Responder, [{_,_}|_] = Keys) ->
gen_server:cast(Srv, {add_responder, Responder, Keys}).

-spec rm_responder/2 :: (pid() | atom(), responder_callback_mod()) -> 'ok'.
-spec rm_responder/3 :: (pid() | atom(), responder_callback_mod(), responder_callback_mappings()) -> 'ok'.
-spec rm_responder/2 :: (pid(), responder_callback_mod()) -> 'ok'.
-spec rm_responder/3 :: (pid(), responder_callback_mod(), responder_callback_mappings()) -> 'ok'.
rm_responder(Srv, Responder) ->
rm_responder(Srv, Responder, []). %% empty list removes all
rm_responder(Srv, Responder, {_,_}=Key) ->
rm_responder(Srv, Responder, [Key]);
rm_responder(Srv, Responder, Keys) ->
gen_server:cast(Srv, {rm_responder, Responder, Keys}).

-spec add_binding/2 :: (pid() | atom(), binding() | ne_binary() | atom()) -> 'ok'.
-spec add_binding/2 :: (pid(), binding() | ne_binary() | atom()) -> 'ok'.
add_binding(Srv, {Binding, Props}) ->
gen_server:cast(Srv, {add_binding, Binding, Props});
add_binding(Srv, Binding) when is_binary(Binding) orelse is_atom(Binding) ->
gen_server:cast(Srv, {add_binding, wh_util:to_binary(Binding), []}).

-spec add_binding/3 :: (pid() | atom(), ne_binary() | atom(), wh_proplist()) -> 'ok'.
-spec add_binding/3 :: (pid(), ne_binary() | atom(), wh_proplist()) -> 'ok'.
add_binding(Srv, Binding, Props) when is_binary(Binding) orelse is_atom(Binding) ->
gen_server:cast(Srv, {add_binding, Binding, Props}).

Expand All @@ -171,11 +169,11 @@ rm_queue(Srv, ?NE_BINARY = QueueName) ->
other_queues(Srv) ->
gen_server:call(Srv, other_queues).

-spec rm_binding/2 :: (pid() | atom(), binding()) -> 'ok'.
-spec rm_binding/2 :: (pid(), binding()) -> 'ok'.
rm_binding(Srv, Binding) ->
gen_server:cast(Srv, {rm_binding, Binding}).

-spec rm_binding/3 :: (pid() | atom(), binding(), wh_proplist()) -> 'ok'.
-spec rm_binding/3 :: (pid(), binding(), wh_proplist()) -> 'ok'.
rm_binding(Srv, Binding, []) ->
gen_server:cast(Srv, {rm_binding, Binding});
rm_binding(Srv, Binding, Props) ->
Expand Down
12 changes: 6 additions & 6 deletions lib/whistle-1.0.0/src/wh_alert.erl
Original file line number Diff line number Diff line change
Expand Up @@ -90,21 +90,21 @@ info(Msg, Args) ->
debug(Msg, Args) ->
gen_server:cast(?MODULE, #alert{level=debug, msg=Msg, args=Args}).

-spec format/1 :: (#alert{} | msg()) -> ok.
-spec format/1 :: (#alert{} | msg()) -> 'ok'.
format(Msg) ->
format(#alert{section=sys, req_id=erlang:get(callid), module=?MODULE, line=?LINE, pid=self(), msg=Msg}).

-spec format/2 :: (atom() | msg(), msg() | list()) -> ok.
-spec format/2 :: (atom() | msg(), msg() | list()) -> 'ok'.
format(Level, Msg) when is_atom(Level) ->
gen_server:cast(?MODULE, #alert{section=sys, req_id=erlang:get(callid), module=?MODULE, line=?LINE, pid=self(), level=Level, msg=Msg});
format(Msg, Args) ->
gen_server:cast(?MODULE, #alert{section=sys, req_id=erlang:get(callid), module=?MODULE, line=?LINE, pid=self(), msg=Msg, args=Args}).

-spec format/3 :: (atom(), list(), msg()) -> ok.
-spec format/3 :: (atom(), list(), msg()) -> 'ok'.
format(Section, [ReqId, Module, Line, Pid], Msg) ->
gen_server:cast(?MODULE, #alert{section=Section, req_id=ReqId, module=Module, line=Line, pid=Pid, msg=Msg}).

-spec format/4 :: (atom(), list(), atom() | msg(), msg() | list()) -> ok.
-spec format/4 :: (atom(), list(), atom() | msg(), msg() | list()) -> 'ok'.
format(Section, [undefined|_]=Defaults, undefined, Msg) ->
format(Section, Defaults, ?LOG_SYSTEM_ID, Msg);
format(Section, [ReqId|_]=Defaults, undefined, Msg) ->
Expand All @@ -114,7 +114,7 @@ format(Section, [ReqId, Module, Line, Pid], Level, Msg) when is_atom(Level) ->
format(Section, [ReqId, Module, Line, Pid], Msg, Args) ->
gen_server:cast(?MODULE,#alert{section=Section, req_id=ReqId, module=Module, line=Line, pid=Pid, msg=Msg, args=Args}).

-spec format/5 :: (atom(), list(), undefined | atom() | binary(), msg(), list()) -> ok.
-spec format/5 :: (atom(), list(), undefined | atom() | binary(), msg(), list()) -> 'ok'.
format(Section, [undefined | _]=Defaults, undefined, Msg, Args) ->
format(Section, Defaults, ?LOG_SYSTEM_ID, Msg, Args);
format(Section, [ReqId | _]=Defaults, undefined, Msg, Args) ->
Expand All @@ -124,7 +124,7 @@ format(Section, [ReqId, Module, Line, Pid], Level, Msg, Args) when is_atom(Level
format(Section, [_, Module, Line, Pid], ReqId, Msg, Args) ->
gen_server:cast(?MODULE,#alert{section=Section, req_id=ReqId, module=Module, line=Line, pid=Pid, msg=Msg, args=Args}).

-spec format/6 :: (atom(), list(), atom(), undefined | binary(), msg(), list()) -> ok.
-spec format/6 :: (atom(), list(), atom(), undefined | binary(), msg(), list()) -> 'ok'.
format(Section, [undefined | _]=Defaults, Level, undefined, Msg, Args) ->
format(Section, Defaults, Level, ?LOG_SYSTEM_ID, Msg, Args);
format(Section, [ReqId | _]=Defaults, Level, undefined, Msg, Args) ->
Expand Down
Loading

0 comments on commit ccb7fb9

Please sign in to comment.