├── rebar ├── priv └── dispatch.conf ├── README ├── rebar.config ├── start.sh ├── Makefile ├── src ├── retards_resource.erl ├── retards_app.erl ├── retards.erl └── retards_sup.erl └── ebin └── retards.app /rebar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b/retards/master/rebar -------------------------------------------------------------------------------- /priv/dispatch.conf: -------------------------------------------------------------------------------- 1 | %%-*- mode: erlang -*- 2 | {[], retards_resource, []}. 3 | -------------------------------------------------------------------------------- /README: -------------------------------------------------------------------------------- 1 | [REDACTED] 2 | 3 | http://groups.google.com/group/nodejs/msg/5b956f8f3b4cb747?hl=en& 4 | -------------------------------------------------------------------------------- /rebar.config: -------------------------------------------------------------------------------- 1 | %%-*- mode: erlang -*- 2 | {deps, [{webmachine, "1\.7.*", {hg, "http://bitbucket.org/basho/webmachine", "tip"}}]}. 3 | 4 | -------------------------------------------------------------------------------- /start.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | ERL_ARGS="+K true +A 32 -env ERL_MAX_PORTS=500000 -smp +P 250000" 3 | cd `dirname $0` 4 | exec erl $ERL_ARGS -pa $PWD/ebin $PWD/deps/*/ebin -boot start_sasl -s reloader -s retards 5 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | ERL ?= erl 2 | APP := retards 3 | 4 | .PHONY: deps 5 | 6 | all: deps 7 | @./rebar compile 8 | 9 | deps: 10 | @./rebar get-deps 11 | 12 | clean: 13 | @./rebar clean 14 | 15 | distclean: clean 16 | @./rebar delete-deps 17 | 18 | docs: 19 | @erl -noshell -run edoc_run application '$(APP)' '"."' '[]' 20 | -------------------------------------------------------------------------------- /src/retards_resource.erl: -------------------------------------------------------------------------------- 1 | %% @author author 2 | %% @copyright YYYY author. 3 | %% @doc Example webmachine_resource. 4 | 5 | -module(retards_resource). 6 | -export([init/1, resource_exists/2, to_html/2]). 7 | 8 | -include_lib("webmachine/include/webmachine.hrl"). 9 | 10 | init([]) -> {ok, undefined}. 11 | 12 | resource_exists(Rd, Ctx) -> 13 | {true, Rd, decrement(1000000)}. 14 | 15 | to_html(ReqData, State) -> 16 | {"Hello, world", ReqData, State}. 17 | 18 | decrement(0) -> 19 | 0; 20 | decrement(Count) -> 21 | decrement(Count - 1). 22 | -------------------------------------------------------------------------------- /ebin/retards.app: -------------------------------------------------------------------------------- 1 | %%-*- mode: erlang -*- 2 | {application, retards, 3 | [ 4 | {description, "retards"}, 5 | {vsn, "1"}, 6 | {modules, [ 7 | retards, 8 | retards_app, 9 | retards_sup, 10 | retards_resource 11 | ]}, 12 | {registered, []}, 13 | {applications, [ 14 | kernel, 15 | stdlib, 16 | crypto, 17 | mochiweb, 18 | webmachine 19 | ]}, 20 | {mod, { retards_app, []}}, 21 | {env, []} 22 | ]}. 23 | -------------------------------------------------------------------------------- /src/retards_app.erl: -------------------------------------------------------------------------------- 1 | %% @author author 2 | %% @copyright YYYY author. 3 | 4 | %% @doc Callbacks for the retards application. 5 | 6 | -module(retards_app). 7 | -author('author '). 8 | 9 | -behaviour(application). 10 | -export([start/2,stop/1]). 11 | 12 | 13 | %% @spec start(_Type, _StartArgs) -> ServerRet 14 | %% @doc application start callback for retards. 15 | start(_Type, _StartArgs) -> 16 | retards_sup:start_link(). 17 | 18 | %% @spec stop(_State) -> ServerRet 19 | %% @doc application stop callback for retards. 20 | stop(_State) -> 21 | ok. 22 | -------------------------------------------------------------------------------- /src/retards.erl: -------------------------------------------------------------------------------- 1 | %% @author author 2 | %% @copyright YYYY author. 3 | 4 | %% @doc retards startup code 5 | 6 | -module(retards). 7 | -author('author '). 8 | -export([start/0, start_link/0, stop/0]). 9 | 10 | ensure_started(App) -> 11 | case application:start(App) of 12 | ok -> 13 | ok; 14 | {error, {already_started, App}} -> 15 | ok 16 | end. 17 | 18 | %% @spec start_link() -> {ok,Pid::pid()} 19 | %% @doc Starts the app for inclusion in a supervisor tree 20 | start_link() -> 21 | ensure_started(crypto), 22 | ensure_started(mochiweb), 23 | application:set_env(webmachine, webmachine_logger_module, 24 | webmachine_logger), 25 | ensure_started(webmachine), 26 | retards_sup:start_link(). 27 | 28 | %% @spec start() -> ok 29 | %% @doc Start the retards server. 30 | start() -> 31 | ensure_started(crypto), 32 | ensure_started(mochiweb), 33 | application:set_env(webmachine, webmachine_logger_module, 34 | webmachine_logger), 35 | ensure_started(webmachine), 36 | application:start(retards). 37 | 38 | %% @spec stop() -> ok 39 | %% @doc Stop the retards server. 40 | stop() -> 41 | Res = application:stop(retards), 42 | application:stop(webmachine), 43 | application:stop(mochiweb), 44 | application:stop(crypto), 45 | Res. 46 | -------------------------------------------------------------------------------- /src/retards_sup.erl: -------------------------------------------------------------------------------- 1 | %% @author author 2 | %% @copyright YYYY author. 3 | 4 | %% @doc Supervisor for the retards application. 5 | 6 | -module(retards_sup). 7 | -author('author '). 8 | 9 | -behaviour(supervisor). 10 | 11 | %% External exports 12 | -export([start_link/0, upgrade/0]). 13 | 14 | %% supervisor callbacks 15 | -export([init/1]). 16 | 17 | %% @spec start_link() -> ServerRet 18 | %% @doc API for starting the supervisor. 19 | start_link() -> 20 | supervisor:start_link({local, ?MODULE}, ?MODULE, []). 21 | 22 | %% @spec upgrade() -> ok 23 | %% @doc Add processes if necessary. 24 | upgrade() -> 25 | {ok, {_, Specs}} = init([]), 26 | 27 | Old = sets:from_list( 28 | [Name || {Name, _, _, _} <- supervisor:which_children(?MODULE)]), 29 | New = sets:from_list([Name || {Name, _, _, _, _, _} <- Specs]), 30 | Kill = sets:subtract(Old, New), 31 | 32 | sets:fold(fun (Id, ok) -> 33 | supervisor:terminate_child(?MODULE, Id), 34 | supervisor:delete_child(?MODULE, Id), 35 | ok 36 | end, ok, Kill), 37 | 38 | [supervisor:start_child(?MODULE, Spec) || Spec <- Specs], 39 | ok. 40 | 41 | %% @spec init([]) -> SupervisorTree 42 | %% @doc supervisor callback. 43 | init([]) -> 44 | Ip = case os:getenv("WEBMACHINE_IP") of false -> "0.0.0.0"; Any -> Any end, 45 | {ok, Dispatch} = file:consult(filename:join( 46 | [filename:dirname(code:which(?MODULE)), 47 | "..", "priv", "dispatch.conf"])), 48 | WebConfig = [ 49 | {ip, Ip}, 50 | {port, 8000}, 51 | {log_dir, "priv/log"}, 52 | {dispatch, Dispatch}], 53 | Web = {webmachine_mochiweb, 54 | {webmachine_mochiweb, start, [WebConfig]}, 55 | permanent, 5000, worker, dynamic}, 56 | Processes = [Web], 57 | {ok, { {one_for_one, 10, 10}, Processes} }. 58 | --------------------------------------------------------------------------------