aboutsummaryrefslogtreecommitdiff
path: root/apps/dreki/src/dreki_app.erl
diff options
context:
space:
mode:
Diffstat (limited to 'apps/dreki/src/dreki_app.erl')
-rw-r--r--apps/dreki/src/dreki_app.erl81
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.
+