diff options
Diffstat (limited to 'apps/dreki/src/dreki_app.erl')
-rw-r--r-- | apps/dreki/src/dreki_app.erl | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/apps/dreki/src/dreki_app.erl b/apps/dreki/src/dreki_app.erl new file mode 100644 index 0000000..a1259a7 --- /dev/null +++ b/apps/dreki/src/dreki_app.erl @@ -0,0 +1,81 @@ +%%%------------------------------------------------------------------- +%% @doc dreki public API +%% @end +%%%------------------------------------------------------------------- + +-module(dreki_app). +-behaviour(application). + +-include_lib("kernel/include/logger.hrl"). + +-export([start/2, stop/1]). + +start(Type, Args) -> + ok = before_start(Type, Args), + case dreki_sup:start_link() of + {ok, Pid} -> + ok = after_start(), + {ok, Pid}; + Error -> + Error + end. + +stop(_State) -> + dreki_tasks:stop(), + ok. + +%% internal functions + +before_start(Type, Args) -> + logger:set_application_level(dreki, debug), + logger:set_application_level(dreki_web, debug), + logger:set_application_level(partisan, info), + logger:set_application_level(plum_db, info), + ?LOG_NOTICE(#{message => "Dreki starting...."}), + application:stop(partisan), + ok = dreki_config:init(Args), + ok = dreki_plum:before_start(), + ok = maybe_create_mnesia(), + {ok, _} = mnesia_rocksdb:register(), + ok = dreki_urn:start(), + {ok, _} = dreki_world_dns:start(), + ?LOG_NOTICE(#{message => "Pre-Start done"}), + ok = dreki_plum:after_start(), + ok. + +after_start() -> + %%ok = dreki_plum:after_start(), + ok = setup_event_manager(), + ok = dreki_store:start(), + ?LOG_NOTICE(#{message => "Dreki Ready"}), + dreki_event_manager:notify(dreki_ready), + ok. + +maybe_create_mnesia() -> + ok = maybe_create_mnesia(mnesia:system_info(use_dir)). + +maybe_create_mnesia(false) -> + ?LOG_NOTICE(#{message => "Creating mnesia directory"}), + stopped = mnesia:stop(), + ok = mnesia:create_schema([node()]), + ok = mnesia:start(), + ok; +maybe_create_mnesia(true) -> + ok. + +setup_event_manager() -> + %% TODO: Alarm handler + + %% We subscribe to partisan up and down events and republish them + Mod = partisan_peer_service:manager(), + + Mod:on_up('_', fun(Node) -> + dreki_event_manager:notify({peer_up, Node}) + end), + + Mod:on_down('_', fun(Node) -> + dreki_event_manager:notify({peer_down, Node}) + end), + + ok. + |