/
eturnal_app.erl
69 lines (62 loc) · 2.35 KB
/
eturnal_app.erl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
%%% eturnal STUN/TURN server.
%%%
%%% Copyright (c) 2020-2022 Holger Weiss <holger@zedat.fu-berlin.de>.
%%% Copyright (c) 2020-2022 ProcessOne, SARL.
%%% All rights reserved.
%%%
%%% Licensed under the Apache License, Version 2.0 (the "License");
%%% you may not use this file except in compliance with the License.
%%% You may obtain a copy of the License at
%%%
%%% http://www.apache.org/licenses/LICENSE-2.0
%%%
%%% Unless required by applicable law or agreed to in writing, software
%%% distributed under the License is distributed on an "AS IS" BASIS,
%%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
%%% See the License for the specific language governing permissions and
%%% limitations under the License.
-module(eturnal_app).
-behaviour(application).
-export([start/2,
prep_stop/1,
stop/1,
config_change/3]).
-include_lib("kernel/include/logger.hrl").
%% API.
-spec start(application:start_type(), any()) -> {ok, pid()} | {error, term()}.
start(_StartType, _StartArgs) ->
ok = eturnal:init_config(),
ok = eturnal_logger:start(),
?LOG_NOTICE("Starting eturnal ~s on Erlang/OTP ~s (ERTS ~s)",
[eturnal_misc:version(),
erlang:system_info(otp_release),
erlang:system_info(version)]),
case eturnal_sup:start_link() of
{ok, _PID} = Result ->
ok = eturnal_systemd:ready(),
Result;
{error, _Reason} = Err ->
Err
end.
-spec prep_stop(term()) -> term().
prep_stop(State) ->
ok = eturnal_systemd:stopping(),
State.
-spec stop(term()) -> ok.
stop(_State) ->
?LOG_NOTICE("Stopping eturnal ~s on Erlang/OTP ~s (ERTS ~s)",
[eturnal_misc:version(),
erlang:system_info(otp_release),
erlang:system_info(version)]),
ok = eturnal_logger:stop().
-spec config_change([{atom(), term()}], [{atom(), term()}], [atom()]) -> ok.
config_change(Changed, New, Removed) ->
case eturnal:config_is_loaded() of
true ->
?LOG_DEBUG("Got configuration change event"),
ok = eturnal:reload({Changed, New, Removed},
fun eturnal_systemd:reloading/0,
fun eturnal_systemd:ready/0);
false ->
?LOG_DEBUG("Got configuration change event after release upgrade")
end.