Skip to content

Commit

Permalink
KAZOO-5136 cache searches (#2847)
Browse files Browse the repository at this point in the history
* KAZOO-5136 add query_id to search options

* KAZOO-5136 shortcut converters

* KAZOO-5136 allow adding ets tables without hair to ets manager

* KAZOO-5136 WIP

* KAZOO-5136 update media server connected time

this is off topic but will help debug ecallmgr disconnects

* KAZOO-5136 whitespaces

* KAZOO-5136 revert not related updated

* KAZOO-5136 use provider max

* KAZOO-5136 whitespaces

* KAZOO-5136 update

* KAZOO-5136 missing test file

* KAZOO-5136 make fmt

* KAZOO-5136 knm_managed should set discovery

* KAZOO-5136 WIP

* KAZOO-5136 move kapi_search

* KAZOO-5136 refactor

* KAZOO-5136 fix build checks

* KAZOO-5136 revert converter change

* KAZOO-5136 declare exchanges

* KAZOO-5136 formatting

* KAZOO-5136 fix tests

* KAZOO-5136 sync declare exchanges

* KAZOO-5136 fomat and cleanup
  • Loading branch information
lazedo authored and k-anderson committed Dec 2, 2016
1 parent d513a81 commit 6523afe
Show file tree
Hide file tree
Showing 18 changed files with 1,000 additions and 212 deletions.
2 changes: 1 addition & 1 deletion applications/crossbar/priv/api/swagger.json
Expand Up @@ -10382,7 +10382,7 @@
"type": "boolean"
},
"max_search_quantity": {
"default": 120,
"default": 500,
"description": "number_manager.bandwidth2 max search quantity",
"type": "integer"
},
Expand Down
Expand Up @@ -29,7 +29,7 @@
"type": "boolean"
},
"max_search_quantity": {
"default": 120,
"default": 500,
"description": "number_manager.bandwidth2 max search quantity",
"type": "integer"
},
Expand Down
21 changes: 21 additions & 0 deletions applications/crossbar/src/crossbar_app.erl
Expand Up @@ -22,6 +22,7 @@
%%--------------------------------------------------------------------
-spec start(application:start_type(), any()) -> startapp_ret().
start(_StartType, _StartArgs) ->
declare_exchanges(),
_ = kapps_maintenance:bind('migrate', 'crossbar_maintenance', 'migrate'),
_ = kapps_maintenance:bind({'refresh_account', <<"*">>}, 'crossbar_util', 'descendants_count'),
crossbar_sup:start_link().
Expand All @@ -38,3 +39,23 @@ stop(_State) ->
_ = cowboy:stop_listener('api_resource_ssl'),
_ = crossbar_bindings:flush(),
'ok'.

%%--------------------------------------------------------------------
%% @private
%% @doc Ensures that all exchanges used are declared
%%--------------------------------------------------------------------
-spec declare_exchanges() -> 'ok'.
declare_exchanges() ->
_ = kapi_acdc_agent:declare_exchanges(),
_ = kapi_acdc_stats:declare_exchanges(),
_ = kapi_money:declare_exchanges(),
_ = kapi_conference:declare_exchanges(),
_ = kapi_notifications:declare_exchanges(),
_ = kapi_presence:declare_exchanges(),
_ = kapi_registration:declare_exchanges(),
_ = kapi_resource:declare_exchanges(),
_ = kapi_switch:declare_exchanges(),
_ = kapi_sysconf:declare_exchanges(),
_ = kapi_call:declare_exchanges(),
_ = kapi_dialplan:declare_exchanges(),
kapi_self:declare_exchanges().
20 changes: 0 additions & 20 deletions applications/crossbar/src/crossbar_init.erl
Expand Up @@ -51,7 +51,6 @@ api_version_constraint(NotVersion) ->
-spec start_link() -> startlink_ret().
start_link() ->
kz_util:put_callid(?LOG_SYSTEM_ID),
_ = declare_exchanges(),

Dispatch = cowboy_router:compile(crossbar_routes()),

Expand Down Expand Up @@ -159,25 +158,6 @@ stop_mod_version(Version, Mod) ->
'false'
end.

%%--------------------------------------------------------------------
%% @private
%% @doc Ensures that all exchanges used are declared
%%--------------------------------------------------------------------
-spec declare_exchanges() -> 'ok'.
declare_exchanges() ->
_ = kapi_acdc_agent:declare_exchanges(),
_ = kapi_acdc_stats:declare_exchanges(),
_ = kapi_money:declare_exchanges(),
_ = kapi_conference:declare_exchanges(),
_ = kapi_notifications:declare_exchanges(),
_ = kapi_presence:declare_exchanges(),
_ = kapi_registration:declare_exchanges(),
_ = kapi_resource:declare_exchanges(),
_ = kapi_switch:declare_exchanges(),
_ = kapi_sysconf:declare_exchanges(),
_ = kapi_call:declare_exchanges(),
_ = kapi_dialplan:declare_exchanges(),
kapi_self:declare_exchanges().

%%--------------------------------------------------------------------
%% @private
Expand Down
21 changes: 16 additions & 5 deletions applications/crossbar/src/modules_v2/cb_phone_numbers_v2.erl
Expand Up @@ -597,18 +597,29 @@ maybe_find_numbers(Context) ->
-spec find_numbers(cb_context:context(), ne_binary(), ne_binary()) -> cb_context:context().
find_numbers(Context, AccountId, ResellerId) ->
QS = cb_context:query_string(Context),
Country = kz_json:get_ne_value(?COUNTRY, QS, ?KNM_DEFAULT_COUNTRY),
Prefix = kz_util:remove_white_spaces(kz_json:get_ne_value(?PREFIX, QS)),
Offset = kz_json:get_integer_value(?OFFSET, QS, 0),
Token = cb_context:auth_token(Context),
HashKey = <<AccountId/binary, "-", Token/binary>>,
Hash = kz_base64url:encode(crypto:hash(sha, HashKey)),
QueryId = list_to_binary([Country, "-", Prefix, "-", Hash]),
Dialcode = knm_util:prefix_for_country(Country),
NormalizedPrefix = <<Dialcode/binary, Prefix/binary>>,
Options = props:filter_undefined(
[{'quantity', max(1, kz_json:get_integer_value(?QUANTITY, QS, 1))}
,{'prefix', kz_json:get_ne_value(?PREFIX, QS)}
,{'country', kz_json:get_ne_value(?COUNTRY, QS, ?KNM_DEFAULT_COUNTRY)}
,{'offset', kz_json:get_integer_value(?OFFSET, QS, 0)}
,{'prefix', Prefix}
,{'normalized_prefix', NormalizedPrefix}
,{'country', Country}
,{'dialcode', Dialcode}
,{'offset', Offset}
,{'account_id', AccountId}
,{'reseller_id', ResellerId}
,{'query_id', QueryId}
]),
OnSuccess =
fun(C) ->
lager:debug("carriers find: ~p", [Options]),
Found = knm_carriers:find(knm_carriers:prefix(Options), Options),
Found = knm_search:find(Options),
cb_context:setters(C
,[{fun cb_context:set_resp_data/2, Found}
,{fun cb_context:set_resp_status/2, 'success'}
Expand Down
13 changes: 9 additions & 4 deletions applications/ecallmgr/src/ecallmgr_fs_nodes.erl
Expand Up @@ -593,8 +593,9 @@ maybe_add_node(NodeName, Cookie, Options, #state{self=Srv, nodes=Nodes}) ->
_ = maybe_start_node_pinger(Node),
E;
'ok' ->
gen_server:cast(Srv, {'update_node', Node#node{connected='true'}}),
'ok'
gen_server:cast(Srv, {'update_node', Node#node{started=kz_util:current_tstamp()
,connected='true'
}})
end
end.

Expand All @@ -621,7 +622,9 @@ handle_nodeup(#node{}=Node, #state{self=Srv}) ->
_ = maybe_start_node_pinger(Node),
'ok';
'ok' ->
gen_server:cast(Srv, {'update_node', NewNode#node{connected='true'}})
gen_server:cast(Srv, {'update_node', NewNode#node{started=kz_util:current_tstamp()
,connected='true'
}})
end.

-spec handle_nodedown(fs_node(), state()) -> 'ok'.
Expand All @@ -635,7 +638,9 @@ handle_nodedown(#node{node=NodeName}=Node, #state{self=Srv}) ->
_ = maybe_start_node_pinger(Node),
'ok';
'ok' ->
gen_server:cast(Srv, {'update_node', Node#node{connected='true'}})
gen_server:cast(Srv, {'update_node', Node#node{started=kz_util:current_tstamp()
,connected='true'
}})
end.

-spec maybe_connect_to_node(fs_node()) -> 'ok' | {'error', any()}.
Expand Down
11 changes: 10 additions & 1 deletion core/kazoo_amqp/src/kz_amqp_connection.erl
Expand Up @@ -49,7 +49,7 @@ get_connection(Srv) ->

-spec new_exchange(pid(), kz_amqp_exchange()) -> 'ok'.
new_exchange(Srv, Exchange) ->
gen_server:cast(Srv, {'new_exchange', Exchange}).
gen_server:call(Srv, {'new_exchange', Exchange}).

-spec create_prechannel(pid()) -> 'ok'.
create_prechannel(Srv) ->
Expand Down Expand Up @@ -99,6 +99,15 @@ handle_call('get_connection', _, Connection) ->
{'reply', Connection, Connection};
handle_call('stop', _, Connection) ->
{'stop', 'normal', 'ok', disconnected(Connection)};
handle_call({'new_exchange', _}
,_From
,#kz_amqp_connection{available='false'}=Connection) ->
{'reply', 'ok', Connection};
handle_call({'new_exchange', Exchange}
,_From
,#kz_amqp_connection{available='true'}=Connection) ->
_ = declare_exchanges(Connection, [Exchange]),
{'reply', 'ok', Connection};
handle_call(_Msg, _From, Connection) ->
{'reply', {'error', 'not_implemented'}, Connection}.

Expand Down
14 changes: 13 additions & 1 deletion core/kazoo_amqp/src/kz_amqp_history.erl
Expand Up @@ -107,7 +107,7 @@ get(Consumer) ->

-spec add_exchange(kz_amqp_exchange()) -> 'ok'.
add_exchange(#'exchange.declare'{}=Exchange) ->
gen_server:cast(?SERVER, {'add_exchange', Exchange}).
gen_server:call(?SERVER, {'add_exchange', Exchange}).

-spec list_exchanges() -> kz_amqp_exchanges().
list_exchanges() ->
Expand Down Expand Up @@ -200,6 +200,18 @@ handle_call('list_exchanges', {Connection, _}, #state{exchanges=Exchanges
_Ref = monitor('process', Connection),
{'reply', [Exchange || {_, Exchange} <- dict:to_list(Exchanges)]
,State#state{connections=sets:add_element(Connection, Connections)}};
handle_call({'add_exchange', #'exchange.declare'{exchange=Name}=Exchange}
, _From
,#state{exchanges=Exchanges
,connections=Connections}=State) ->
case dict:find(Name, Exchanges) of
'error' ->
_ = [(catch kz_amqp_connection:new_exchange(Connection, Exchange))
|| Connection <- sets:to_list(Connections)
],
{'reply', 'ok', State#state{exchanges=dict:store(Name, Exchange, Exchanges)}};
{'ok', _Exits} -> {'reply', 'ok', State}
end;
handle_call(_Msg, _From, State) ->
{'reply', {'error', 'not_implemented'}, State}.

Expand Down
9 changes: 8 additions & 1 deletion core/kazoo_etsmgr/src/kazoo_etsmgr_srv.erl
Expand Up @@ -76,7 +76,8 @@ start_link(Name, Opts) ->
valid_options(Opts) ->
(TID = props:get_value('table_id', Opts)) =/= 'undefined'
andalso is_atom(TID)
andalso is_function(props:get_value('find_me_function', Opts), 0).
andalso is_function(props:get_value('find_me_function', Opts), 0)
orelse props:is_defined('local', Opts).

%%%===================================================================
%%% gen_server callbacks
Expand Down Expand Up @@ -189,6 +190,12 @@ handle_info({'ETS-TRANSFER', Tbl, Pid, _Data}, #state{table_id=Tbl
lager:debug("ets table ~p transferred back to ourselves", [Tbl]),
send_give_away_retry(Tbl),
{'noreply', State#state{give_away_pid='undefined'}};
handle_info({'give_away', Tbl}, #state{table_id=Tbl
,give_away_pid='undefined'
,find_me_fun='undefined'
}=State) ->
lager:debug("no find_me_fun, ets table ~p will live here", [Tbl]),
{'noreply', State};
handle_info({'give_away', Tbl}, #state{table_id=Tbl
,give_away_pid='undefined'
,find_me_fun=F
Expand Down
@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<SearchResult>
<ResultCount>2</ResultCount>
<TelephoneNumberList>
<TelephoneNumber>9733705112</TelephoneNumber>
<TelephoneNumber>9733705183</TelephoneNumber>
</TelephoneNumberList>
</SearchResult>

0 comments on commit 6523afe

Please sign in to comment.