-module(rumConfig). -include("eRum.hrl"). -export([ init/0 , initSink/1 , get/1 , get/2 , set/2 , global_get/1 , global_get/2 , global_set/2 , cleanup/0 ]). -define(TBL, lager_config). -define(GLOBAL, '_global'). %% For multiple sinks, the key is now the registered event name and the old key as a tuple. %% {{lager_event, loglevel}, Value} instead of {loglevel, Value} init() -> initSink(?RumDefSink), %% Need to be able to find the `lager_handler_watcher' for all handlers insert_new({?GLOBAL, handlers}, []), ok. initSink(Sink) -> %% use insert_new here so that if we're in an appup we don't mess anything up until lager is completely started, allow all messages to go through insert_new({Sink, loglevel}, {element(2, rumUtil:config_to_mask(debug)), []}). global_get(Key) -> global_get(Key, undefined). global_get(Key, Default) -> get({?GLOBAL, Key}, Default). global_set(Key, Value) -> set({?GLOBAL, Key}, Value). get({_Sink, _Key} = FullKey) -> get(FullKey, undefined); get(Key) -> get({?RumDefSink, Key}, undefined). get({Sink, Key}, Default) -> lookup({Sink, Key}, Default); get(Key, Default) -> get({?RumDefSink, Key}, Default). set({Sink, Key}, Value) -> insert({Sink, Key}, Value); set(Key, Value) -> set({?RumDefSink, Key}, Value). insert(Key, Value) -> persistent_term:put({?TBL, Key}, Value). insert_new(Key, Value) -> try persistent_term:get({?TBL, Key}) of _Value -> false catch error:badarg -> insert(Key, Value), true end. lookup(Key, Default) -> try persistent_term:get({?TBL, Key}) of Value -> Value catch error:badarg -> Default end. cleanup() -> [persistent_term:erase(K) || {{?TBL, _} = K, _} <- persistent_term:get()].