|  | %%% Copyright (c) 2007- Facebook | 
|  | %%% Distributed under the Thrift Software License | 
|  | %%% | 
|  | %%% See accompanying file LICENSE or visit the Thrift site at: | 
|  | %%% http://developers.facebook.com/thrift/ | 
|  |  | 
|  | -module(thrift). | 
|  |  | 
|  | -export([start/0, stop/0, config/1, config/2, reconfig/1]). | 
|  |  | 
|  | -include("thrift.hrl"). | 
|  |  | 
|  | %%% | 
|  | %%% behavior definition | 
|  | %%% | 
|  |  | 
|  | start() -> | 
|  | application:start(thrift). | 
|  |  | 
|  | stop() -> | 
|  | application:stop(thrift). | 
|  |  | 
|  | %%% | 
|  | %%% configuration | 
|  | %%% | 
|  |  | 
|  | config(Item) -> | 
|  | config(?MODULE, Item). | 
|  |  | 
|  | config(App, Item) -> | 
|  | case application:get_env(App, Item) of | 
|  | {ok, Value} -> | 
|  | Value; | 
|  | undefined -> | 
|  | ?ERROR("configuration for ~p is unavailable", [Item]), | 
|  | unconfigured_item, | 
|  | exit({missing_config, App, Item}) | 
|  | end. | 
|  |  | 
|  | reconfig(Config) -> | 
|  | BFName = filename:basename(Config, ".config"), | 
|  | FName  = filename:join(filename:dirname(Config), | 
|  | BFName ++ ".config"), | 
|  |  | 
|  | case file:consult(FName) of | 
|  | {error, R={_,_,_}} -> | 
|  | {error, file_error, file:format_error(R)}; | 
|  | {error, Posix} -> | 
|  | {error, file_error, Posix}; | 
|  | {ok, [List]} when is_list(List) -> | 
|  | reconfig1(List) | 
|  | end. | 
|  |  | 
|  | reconfig1([]) -> | 
|  | ok; | 
|  | reconfig1([{App, List}|Tl]) -> | 
|  | reconfig2(List, App, 0), | 
|  | reconfig1(Tl). | 
|  |  | 
|  | reconfig2([], App, Count) -> | 
|  | ?INFO("application ~p reconfigured: ~p keys updated", [App, Count]), | 
|  | ok; | 
|  | reconfig2([{Par, Val}|Tl], App, Count) -> | 
|  | application:set_env(App, Par, Val), | 
|  | reconfig2(Tl, App, Count+1). |