The erlang library provides dependency tree with notifications useful for controlling of load process.
Example usage:
app1:start() ->
app_status:init(app1),
% ... some init
% ...
app_status:ready(app1).
app2:start() ->
ok = app_status:expect(app2, app1), % will wait for app1 ready up to 5m
% ... some another init
app_status:ready(app2).APP STATUS does not stick to the OTP-application name, you could use any arbitrary term:
app_status:dead({some_application, instance666}).Every application could be in several states: init, ready and not_seen.
You should manually change state of the applications by calling one of app_status:{init,ready,dead}/1.
You could switch the application state many times if you need.
Every application could have dependencies. You could specify one or many by calling:
app_status:expect(my_application, [dep1, dep2, dep3]).If the application have unready dependencies (e.g. app_status:get_status(dep1) is not ready) then
it goes to the special waiting state: app_status:get_status(my_application) is {waiting, [dep1]}.
APP STATUS also supports notifications via app_status:notify/1 functions.
app_status:notify(my_application).This statement will send message {app_status, my_application, NewStatus} to the Pid2 every time
when my_application will switch from the ready state to another and back.
There are functions app_status:wait/{1,2} whose syncronically waits for some specified application
will not be in status {waiting, ...}.
In order to obtain more information please refer the source code.