%% -*- mode: nitrogen -*- %% vim: ts=4 sw=4 et -module(yaws_simple_bridge_sup). -behaviour(supervisor). -export([ start_link/0, init/1, start_embedded_yaws/0 ]). %% Helper macro for declaring children of supervisor -define(CHILD(I, Type), {I, {I, start_link, []}, permanent, 5000, Type, [I]}). %% =================================================================== %% API functions %% =================================================================== start_link() -> supervisor:start_link({local, ?MODULE}, ?MODULE, []). %% =================================================================== %% Supervisor callbacks %% =================================================================== init([]) -> application:load(yaws), case application:get_env(yaws, conf) of {ok, Conf} -> io:format("Starting Yaws based on the configuration file: ~s~n", [Conf]), application:start(yaws); undefined -> start_embedded_yaws() end, {ok, { {one_for_one, 5, 10}, []}}. start_embedded_yaws() -> {DocRoot, StaticPaths} = simple_bridge_util:get_docroot_and_static_paths(yaws), {Address, Port} = simple_bridge_util:get_address_and_port(yaws), {_KeepAliveInterval, Timeout} = simple_bridge_util:get_websocket_keepalive_interval_timeout(yaws), RealAddress = simple_bridge_util:parse_ip(Address), Servername = simple_bridge_util:to_list(simple_bridge_util:get_server_name(yaws)), Anchor = simple_bridge_util:get_anchor_module(yaws), %% Max post is in MB but yaws wants bytes MaxPost = simple_bridge_util:get_max_post_size(yaws) * 1048576, ExcludePaths = [filename:split(P) || P <- StaticPaths], Appmods = [{"/", Anchor, ExcludePaths}], SConf = [ {servername, Servername ++ ":" ++ integer_to_list(Port)}, {docroot, DocRoot}, {listen, RealAddress}, {port, Port}, {allowed_scripts, []}, {partial_post_size, MaxPost}, {index_files, ["index.html"]}, {appmods, Appmods} ], GConf = [{id, Servername}, {keepalive_timeout, Timeout}], io:format("Starting Yaws Server at ~p:~p~n", [Address, Port]), io:format("Static Paths: ~p~nDocument Root for Static: ~s~n", [StaticPaths, DocRoot]), yaws:start_embedded(DocRoot, SConf, GConf, Servername).