Packages
nova
0.0.1
0.15.1
0.14.3
0.14.1
0.13.7
0.13.1
0.13.0
0.12.1
0.12.0
0.11.0
0.10.4
0.10.3
0.10.2
0.10.1
0.10.0
0.9.24
0.9.23
0.9.22
0.9.21
0.9.20
0.9.19
0.9.18
0.9.17
0.9.16
0.9.15
0.9.11
0.9.5
0.9.4
0.9.3
0.9.2
0.9.1
0.9.0
0.8.6
0.8.5
0.8.4
0.8.3
0.8.2
0.8.1
0.8.0
0.7.2
0.7.1
0.7.0
0.6.2
0.6.1
0.6.0
0.5.2
0.5.1
0.4.4
0.4.3
0.4.2
0.4.1
0.2.2
0.1.0
0.0.1
0.0.0
Nova is a web application framework
Current section
Files
Jump to
Current section
Files
src/nova_sup.erl
%%%-------------------------------------------------------------------
%%% @author Niclas Axelsson <niclas@burbas.se>
%%% @copyright (C) 2018, Niclas Axelsson
%%% @doc
%%%
%%% @end
%%% Created : 26 Jun 2018 by Niclas Axelsson <niclas@burbas.se>
%%%-------------------------------------------------------------------
-module(nova_sup).
-behaviour(supervisor).
%% API
-export([start_link/0]).
%% Supervisor callbacks
-export([init/1]).
-define(SERVER, ?MODULE).
%%%===================================================================
%%% API functions
%%%===================================================================
%%--------------------------------------------------------------------
%% @doc
%% Starts the supervisor
%%
%% @spec start_link() -> {ok, Pid} | ignore | {error, Error}
%% @end
%%--------------------------------------------------------------------
start_link() ->
supervisor:start_link({local, ?SERVER}, ?MODULE, []).
%%%===================================================================
%%% Supervisor callbacks
%%%===================================================================
%%--------------------------------------------------------------------
%% @private
%% @doc
%% Whenever a supervisor is started using supervisor:start_link/[2,3],
%% this function is called by the new process to find out about
%% restart strategy, maximum restart intensity, and child
%% specifications.
%%
%% @spec init(Args) -> {ok, {SupFlags, [ChildSpec]}} |
%% ignore |
%% {error, Reason}
%% @end
%%--------------------------------------------------------------------
init([]) ->
%% This is a bit ugly, but we need to do this anyhow(?)
application:ensure_all_started(ranch),
case application:get_env(use_ssl) of
{ok, true} ->
{ok, Cert} = application:get_env(ssl_certfile),
{ok, CACert} = application:get_env(ssl_cacertfile),
logger:info("Starting Nova with SSL support. Cert: ~s, CACert: ~s", [Cert, CACert]),
start_cowboy_secure(CACert, Cert);
_ ->
start_cowboy()
end,
SupFlags = #{strategy => one_for_one,
intensity => 1,
period => 5},
Children = [
child(nova_router, nova_router),
child(nova_session, nova_session)
],
Children2 = case application:get_env(rest_only) of
{ok, true} ->
logger:info("Starting Nova with rest_only option. Views will not be compiled"),
Children;
_ ->
logger:info("Starting Nova as normal..."),
[child(nova_compiler, nova_compiler)|Children]
end,
Children3 =
case application:get_env(dev_mode) of
{ok, true} ->
logger:info("Nova reloader starting..."),
[child(nova_reloader, nova_reloader)|Children2];
_ ->
Children2
end,
{ok, {SupFlags, Children3}}.
%%%===================================================================
%%% Internal functions
%%%===================================================================
child(Id, Mod) ->
#{id => Id,
start => {Mod, start_link, []},
restart => permanent,
shutdown => 5000,
type => worker,
modules => [Mod]}.
start_cowboy() ->
Port =
case application:get_env(web_port) of
undefined ->
8080;
{ok, WebPort} ->
WebPort
end,
logger:info("Nova is running on port ~p", [Port]),
{ok, _} = cowboy:start_clear(
nova_listener,
[{port, Port}],
#{}).
start_cowboy_secure(CACert, Cert) ->
Port = case application:get_env(ssl_port) of
undefined -> 8443;
{ok, SSLPort} -> SSLPort
end,
logger:info("Nova is running SSL on port ~p", [Port]),
{ok, _} = cowboy:start_tls(nova_listener, [
{port, Port},
{certfile, Cert},
{cacertfile, CACert}
], #{}).