Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
Browse the repository at this point in the history
first commit
- Loading branch information
0 parents
commit fef459a
Showing
20 changed files
with
1,181 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
deps/* | ||
ebin/* | ||
erl_crash.dump |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
[{consumer, [ | ||
|
||
{consumer_mod, xmpp_consumer}, | ||
|
||
{'amqp.params', | ||
|
||
[{host, <<"localhost">>}, {port, 5672}, {user, <<"guest">>}, {password, <<"guest">>}, {virtual_host, <<"/">>}]}, | ||
|
||
{exchange_options, | ||
|
||
[{exchange, <<"amq.rabbitmq.log">>}, {type, "topic"}]} | ||
|
||
]}]. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
/usr/local/bin/rebar |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
{sub_dirs, ["rel"]}. | ||
|
||
% {deps, [ | ||
% {amqp_client, "", {hg, "rabbitmq-erlang-client", "amqp_client"}} | ||
% ]}. | ||
|
||
{erl_opts, [debug_info, fail_on_warning, | ||
{i, "include"}, | ||
{i, "deps/amqp_client/include"}, | ||
{i, "deps/amqp_client/ebin"}, | ||
{i, "deps/amqp_client/include/rabbit_common/include"}, | ||
{i, "deps/amqp_client/include/rabbit_common/ebin"} | ||
]}. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
[ | ||
%% SASL config | ||
{sasl, [ | ||
{sasl_error_logger, {file, "log/sasl-error.log"}}, | ||
{errlog_type, error}, | ||
{error_logger_mf_dir, "log/sasl"}, % Log directory | ||
{error_logger_mf_maxbytes, 10485760}, % 10 MB max file size | ||
{error_logger_mf_maxfiles, 5} % 5 files max | ||
]} | ||
]. | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,34 @@ | ||
#!/bin/bash | ||
|
||
## This script replaces the default "erl" in erts-VSN/bin. This is necessary | ||
## as escript depends on erl and in turn, erl depends on having access to a | ||
## bootscript (start.boot). Note that this script is ONLY invoked as a side-effect | ||
## of running escript -- the embedded node bypasses erl and uses erlexec directly | ||
## (as it should). | ||
## | ||
## Note that this script makes the assumption that there is a start_clean.boot | ||
## file available in $ROOTDIR/release/VSN. | ||
|
||
# Determine the abspath of where this script is executing from. | ||
ERTS_BIN_DIR=$(cd ${0%/*} && pwd) | ||
|
||
# Now determine the root directory -- this script runs from erts-VSN/bin, | ||
# so we simply need to strip off two dirs from the end of the ERTS_BIN_DIR | ||
# path. | ||
ROOTDIR=${ERTS_BIN_DIR%/*/*} | ||
|
||
# Parse out release and erts info | ||
START_ERL=`cat $ROOTDIR/releases/start_erl.data` | ||
ERTS_VSN=${START_ERL% *} | ||
APP_VSN=${START_ERL#* } | ||
|
||
BINDIR=$ROOTDIR/erts-$ERTS_VSN/bin | ||
EMU=beam | ||
PROGNAME=`echo $0 | sed 's/.*\\///'` | ||
CMD="$BINDIR/erlexec" | ||
export EMU | ||
export ROOTDIR | ||
export BINDIR | ||
export PROGNAME | ||
|
||
exec $CMD -boot $ROOTDIR/releases/$APP_VSN/start_clean ${1+"$@"} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,138 @@ | ||
%% -*- mode: erlang;erlang-indent-level: 4;indent-tabs-mode: nil -*- | ||
%% ex: ft=erlang ts=4 sw=4 et | ||
%% ------------------------------------------------------------------- | ||
%% | ||
%% nodetool: Helper Script for interacting with live nodes | ||
%% | ||
%% ------------------------------------------------------------------- | ||
|
||
main(Args) -> | ||
ok = start_epmd(), | ||
%% Extract the args | ||
{RestArgs, TargetNode} = process_args(Args, [], undefined), | ||
|
||
%% See if the node is currently running -- if it's not, we'll bail | ||
case {net_kernel:hidden_connect_node(TargetNode), net_adm:ping(TargetNode)} of | ||
{true, pong} -> | ||
ok; | ||
{_, pang} -> | ||
io:format("Node ~p not responding to pings.\n", [TargetNode]), | ||
halt(1) | ||
end, | ||
|
||
case RestArgs of | ||
["ping"] -> | ||
%% If we got this far, the node already responsed to a ping, so just dump | ||
%% a "pong" | ||
io:format("pong\n"); | ||
["stop"] -> | ||
io:format("~p\n", [rpc:call(TargetNode, init, stop, [], 60000)]); | ||
["restart"] -> | ||
io:format("~p\n", [rpc:call(TargetNode, init, restart, [], 60000)]); | ||
["reboot"] -> | ||
io:format("~p\n", [rpc:call(TargetNode, init, reboot, [], 60000)]); | ||
["rpc", Module, Function | RpcArgs] -> | ||
case rpc:call(TargetNode, list_to_atom(Module), list_to_atom(Function), | ||
[RpcArgs], 60000) of | ||
ok -> | ||
ok; | ||
{badrpc, Reason} -> | ||
io:format("RPC to ~p failed: ~p\n", [TargetNode, Reason]), | ||
halt(1); | ||
_ -> | ||
halt(1) | ||
end; | ||
["rpcterms", Module, Function, ArgsAsString] -> | ||
case rpc:call(TargetNode, list_to_atom(Module), list_to_atom(Function), | ||
consult(ArgsAsString), 60000) of | ||
{badrpc, Reason} -> | ||
io:format("RPC to ~p failed: ~p\n", [TargetNode, Reason]), | ||
halt(1); | ||
Other -> | ||
io:format("~p\n", [Other]) | ||
end; | ||
Other -> | ||
io:format("Other: ~p\n", [Other]), | ||
io:format("Usage: nodetool {ping|stop|restart|reboot}\n") | ||
end, | ||
net_kernel:stop(). | ||
|
||
process_args([], Acc, TargetNode) -> | ||
{lists:reverse(Acc), TargetNode}; | ||
process_args(["-setcookie", Cookie | Rest], Acc, TargetNode) -> | ||
erlang:set_cookie(node(), list_to_atom(Cookie)), | ||
process_args(Rest, Acc, TargetNode); | ||
process_args(["-name", TargetName | Rest], Acc, _) -> | ||
ThisNode = append_node_suffix(TargetName, "_maint_"), | ||
{ok, _} = net_kernel:start([ThisNode, longnames]), | ||
process_args(Rest, Acc, nodename(TargetName)); | ||
process_args(["-sname", TargetName | Rest], Acc, _) -> | ||
ThisNode = append_node_suffix(TargetName, "_maint_"), | ||
{ok, _} = net_kernel:start([ThisNode, shortnames]), | ||
process_args(Rest, Acc, nodename(TargetName)); | ||
process_args([Arg | Rest], Acc, Opts) -> | ||
process_args(Rest, [Arg | Acc], Opts). | ||
|
||
|
||
start_epmd() -> | ||
[] = os:cmd(epmd_path() ++ " -daemon"), | ||
ok. | ||
|
||
epmd_path() -> | ||
ErtsBinDir = filename:dirname(escript:script_name()), | ||
Name = "epmd", | ||
case os:find_executable(Name, ErtsBinDir) of | ||
false -> | ||
case os:find_executable(Name) of | ||
false -> | ||
io:format("Could not find epmd.~n"), | ||
halt(1); | ||
GlobalEpmd -> | ||
GlobalEpmd | ||
end; | ||
Epmd -> | ||
Epmd | ||
end. | ||
|
||
|
||
nodename(Name) -> | ||
case string:tokens(Name, "@") of | ||
[_Node, _Host] -> | ||
list_to_atom(Name); | ||
[Node] -> | ||
[_, Host] = string:tokens(atom_to_list(node()), "@"), | ||
list_to_atom(lists:concat([Node, "@", Host])) | ||
end. | ||
|
||
append_node_suffix(Name, Suffix) -> | ||
case string:tokens(Name, "@") of | ||
[Node, Host] -> | ||
list_to_atom(lists:concat([Node, Suffix, os:getpid(), "@", Host])); | ||
[Node] -> | ||
list_to_atom(lists:concat([Node, Suffix, os:getpid()])) | ||
end. | ||
|
||
|
||
%% | ||
%% Given a string or binary, parse it into a list of terms, ala file:consult/0 | ||
%% | ||
consult(Str) when is_list(Str) -> | ||
consult([], Str, []); | ||
consult(Bin) when is_binary(Bin)-> | ||
consult([], binary_to_list(Bin), []). | ||
|
||
consult(Cont, Str, Acc) -> | ||
case erl_scan:tokens(Cont, Str, 0) of | ||
{done, Result, Remaining} -> | ||
case Result of | ||
{ok, Tokens, _} -> | ||
{ok, Term} = erl_parse:parse_term(Tokens), | ||
consult([], Remaining, [Term | Acc]); | ||
{eof, _Other} -> | ||
lists:reverse(Acc); | ||
{error, Info, _} -> | ||
{error, Info} | ||
end; | ||
{more, Cont1} -> | ||
consult(Cont1, eof, Acc) | ||
end. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,155 @@ | ||
#!/bin/bash | ||
# -*- tab-width:4;indent-tabs-mode:nil -*- | ||
# ex: ts=4 sw=4 et | ||
|
||
RUNNER_SCRIPT_DIR=$(cd ${0%/*} && pwd) | ||
|
||
RUNNER_BASE_DIR=${RUNNER_SCRIPT_DIR%/*} | ||
RUNNER_ETC_DIR=$RUNNER_BASE_DIR/etc | ||
RUNNER_LOG_DIR=$RUNNER_BASE_DIR/log | ||
# Note the trailing slash on $PIPE_DIR/ | ||
PIPE_DIR=/tmp/$RUNNER_BASE_DIR/ | ||
RUNNER_USER= | ||
|
||
# Make sure this script is running as the appropriate user | ||
if [ ! -z "$RUNNER_USER" ] && [ `whoami` != "$RUNNER_USER" ]; then | ||
exec sudo -u $RUNNER_USER -i $0 $@ | ||
fi | ||
|
||
# Make sure CWD is set to runner base dir | ||
cd $RUNNER_BASE_DIR | ||
|
||
# Make sure log directory exists | ||
mkdir -p $RUNNER_LOG_DIR | ||
|
||
# Extract the target node name from node.args | ||
NAME_ARG=`grep -e '-[s]*name' $RUNNER_ETC_DIR/vm.args` | ||
if [ -z "$NAME_ARG" ]; then | ||
echo "vm.args needs to have either -name or -sname parameter." | ||
exit 1 | ||
fi | ||
|
||
# Extract the target cookie | ||
COOKIE_ARG=`grep -e '-setcookie' $RUNNER_ETC_DIR/vm.args` | ||
if [ -z "$COOKIE_ARG" ]; then | ||
echo "vm.args needs to have a -setcookie parameter." | ||
exit 1 | ||
fi | ||
|
||
# Identify the script name | ||
SCRIPT=`basename $0` | ||
|
||
# Parse out release and erts info | ||
START_ERL=`cat $RUNNER_BASE_DIR/releases/start_erl.data` | ||
ERTS_VSN=${START_ERL% *} | ||
APP_VSN=${START_ERL#* } | ||
|
||
# Add ERTS bin dir to our path | ||
ERTS_PATH=$RUNNER_BASE_DIR/erts-$ERTS_VSN/bin | ||
|
||
# Setup command to control the node | ||
NODETOOL="$ERTS_PATH/escript $ERTS_PATH/nodetool $NAME_ARG $COOKIE_ARG" | ||
|
||
# Check the first argument for instructions | ||
case "$1" in | ||
start) | ||
# Make sure there is not already a node running | ||
RES=`$NODETOOL ping` | ||
if [ "$RES" = "pong" ]; then | ||
echo "Node is already running!" | ||
exit 1 | ||
fi | ||
HEART_COMMAND="$RUNNER_BASE_DIR/bin/$SCRIPT start" | ||
export HEART_COMMAND | ||
mkdir -p $PIPE_DIR | ||
$ERTS_PATH/run_erl -daemon $PIPE_DIR $RUNNER_LOG_DIR "exec $RUNNER_BASE_DIR/bin/$SCRIPT console" 2>&1 | ||
;; | ||
|
||
stop) | ||
# Wait for the node to completely stop... | ||
case `uname -s` in | ||
Linux|Darwin|FreeBSD|DragonFly|NetBSD|OpenBSD) | ||
# PID COMMAND | ||
PID=`ps ax -o pid= -o command=|\ | ||
grep "$RUNNER_BASE_DIR/.*/[b]eam"|awk '{print $1}'` | ||
;; | ||
SunOS) | ||
# PID COMMAND | ||
PID=`ps -ef -o pid= -o args=|\ | ||
grep "$RUNNER_BASE_DIR/.*/[b]eam"|awk '{print $1}'` | ||
;; | ||
CYGWIN*) | ||
# UID PID PPID TTY STIME COMMAND | ||
PID=`ps -efW|grep "$RUNNER_BASE_DIR/.*/[b]eam"|awk '{print $2}'` | ||
;; | ||
esac | ||
$NODETOOL stop | ||
while `kill -0 $PID 2>/dev/null`; | ||
do | ||
sleep 1 | ||
done | ||
;; | ||
|
||
restart) | ||
## Restart the VM without exiting the process | ||
$NODETOOL restart | ||
;; | ||
|
||
reboot) | ||
## Restart the VM completely (uses heart to restart it) | ||
$NODETOOL reboot | ||
;; | ||
|
||
ping) | ||
## See if the VM is alive | ||
$NODETOOL ping | ||
;; | ||
|
||
attach) | ||
# Make sure a node IS running | ||
RES=`$NODETOOL ping` | ||
if [ "$RES" != "pong" ]; then | ||
echo "Node is not running!" | ||
exit 1 | ||
fi | ||
|
||
shift | ||
$ERTS_PATH/to_erl $PIPE_DIR | ||
;; | ||
|
||
console|console_clean) | ||
# .boot file typically just $SCRIPT (ie, the app name) | ||
# however, for debugging, sometimes start_clean.boot is useful: | ||
case "$1" in | ||
console) BOOTFILE=$SCRIPT ;; | ||
console_clean) BOOTFILE=start_clean ;; | ||
esac | ||
# Setup beam-required vars | ||
ROOTDIR=$RUNNER_BASE_DIR | ||
BINDIR=$ROOTDIR/erts-$ERTS_VSN/bin | ||
EMU=beam | ||
PROGNAME=`echo $0 | sed 's/.*\\///'` | ||
CMD="$BINDIR/erlexec -boot $RUNNER_BASE_DIR/releases/$APP_VSN/$BOOTFILE -embedded -config $RUNNER_ETC_DIR/app.config -args_file $RUNNER_ETC_DIR/vm.args -- ${1+"$@"}" | ||
export EMU | ||
export ROOTDIR | ||
export BINDIR | ||
export PROGNAME | ||
|
||
# Dump environment info for logging purposes | ||
echo "Exec: $CMD" | ||
echo "Root: $ROOTDIR" | ||
|
||
# Log the startup | ||
logger -t "$SCRIPT[$$]" "Starting up" | ||
|
||
# Start the VM | ||
exec $CMD | ||
;; | ||
|
||
*) | ||
echo "Usage: $SCRIPT {start|stop|restart|reboot|ping|console|attach}" | ||
exit 1 | ||
;; | ||
esac | ||
|
||
exit 0 |
Oops, something went wrong.