Packages
nova
0.4.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>
%%% @doc
%%% Nova supervisor
%%% @end
-module(nova_sup).
-behaviour(supervisor).
%% API
-export([start_link/0]).
%% Supervisor callbacks
-export([init/1]).
-include_lib("nova/include/nova.hrl").
-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),
?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},
SessionManager =
case application:get_env(session_manager) of
{ok, Manager} ->
Manager;
_ ->
%% Default to the nova_session_ets manager
nova_session_ets
end,
Children = [
child(nova_router, nova_router),
child(nova_handlers, nova_handlers),
child(SessionManager, SessionManager)
],
case application:get_env(dev_mode) of
{ok, true} ->
?INFO("Starting nova in developer mode...");
_ ->
?INFO("Starting nova in production mode...")
end,
{ok, {SupFlags, Children}}.
%%%===================================================================
%%% 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,
?INFO("Nova is running on port ~p", [Port]),
{ok, _} = cowboy:start_clear(
nova_listener,
[{port, Port}],
#{middlewares => [cowboy_router, nova_security_handler, cowboy_handler],
stream_handlers => [nova_stream_h, cowboy_compress_h, cowboy_stream_h],
compress => true}).
start_cowboy_secure(CACert, Cert) ->
Port = case application:get_env(ssl_port) of
undefined -> 8443;
{ok, SSLPort} -> SSLPort
end,
?INFO("Nova is running SSL on port ~p", [Port]),
{ok, _} = cowboy:start_tls(nova_listener, [
{port, Port},
{certfile, Cert},
{cacertfile, CACert}
],
#{middlewares => [cowboy_router, nova_security_handler, cowboy_handler]}).