Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
tree: 672c81591e
Fetching contributors…

Octocat-spinner-32-eaf2f5

Cannot retrieve contributors at this time

file 209 lines (188 sloc) 5.663 kb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208
#!/usr/bin/env bash

UNAME=`uname`
case $UNAME in
        "Linux") HOST=`hostname -s`;;
        "SunOS") HOST=`hostname`;;
        *) HOST=`hostname -s`;;
esac

INSTALL_DIR=@prefix@/lib/erlang/
ERL=@ERL@
MAIN_DIR=$HOME/.tsung
LOG_DIR=$MAIN_DIR/log
LOG_OPT="log_file \"$LOG_DIR/tsung.log\""
VERSION=@PACKAGE_VERSION@
NAMETYPE="-sname"

LISTEN_PORT=8090
USE_PARENT_PROXY=false
PGSQL_SERVER_IP=127.0.0.1
PGSQL_SERVER_PORT=5432
NAME=tsung
RECORDER=tsung_recorder

TSUNGPATH=$INSTALL_DIR/lib/tsung-$VERSION/ebin
RECORDERPATH=$INSTALL_DIR/lib/tsung_recorder-$VERSION/ebin

CONF_OPT_FILE="$HOME/.tsung/tsung.xml"
BOOT_OPT="-boot $INSTALL_DIR/lib/tsung_controller-$VERSION/priv/tsung_controller -boot_var TSUNGPATH $INSTALL_DIR "
REC_BOOT_OPT="-boot $INSTALL_DIR/lib/tsung_recorder-$VERSION/priv/tsung_recorder -boot_var TSUNGPATH $INSTALL_DIR "
DEBUG_LEVEL=5
RECORDER_PLUGIN="http"
ERL_RSH=" -rsh ssh "
ERL_OPTS=" -smp auto +P 250000 +A 16 +K true @ERL_OPTS@ "
COOKIE='tsung'
ERTS_RUN=`$ERL -version 2>&1 | tr -cd 0123456789.`
ERTS_BOOT=`grep erts $TSUNGPATH/../priv/tsung.rel 2> /dev/null| tr -cd 0123456789.`

stop() {
    $ERL $ERL_OPTS $ERL_RSH -noshell $NAMETYPE killer -setcookie $COOKIE -pa $TSUNGPATH -pa $RECORDERPATH -s tsung_recorder stop_all $HOST -s init stop
    RET=$?
    if [ $RET == 1 ]; then
        echo "FAILED"
    else
        echo "[OK]"
        rm $PIDFILE
    fi
}

status() {
    PIDFILE="/tmp/tsung_recorder.pid"
    if [ -f $PIDFILE ]; then
      echo "Tsung recorder started [OK]"
    else
      echo "Tsung recorder not started "
    fi
}

checkversion() {
    if [ $ERTS_RUN != $ERTS_BOOT ]
    then
        echo "Erlang version has changed ! [$ERTS_BOOT] != [$ERTS_RUN]"
        echo "Must create new boot files (you may have to run this one time as root ! )"
        makebootfiles
    fi
}

makebootfiles() {
    echo "creating boot file for tsung_recorder application"
    cd $RECORDERPATH/..
    $ERL $ERL_OPTS -noshell -pa $TSUNGPATH -s builder go -s init stop > /dev/null
}

start() {
    echo "Starting Tsung recorder on port $LISTEN_PORT"
    $ERL $ERL_OPTS $ERL_RSH -noshell $NAMETYPE $RECORDER -setcookie $COOKIE $REC_BOOT_OPT \
    -pa $TSUNGPATH -pa $RECORDERPATH -pa $CONTROLLERPATH \
    -tsung_recorder debug_level $DEBUG_LEVEL \
    -tsung_recorder $LOG_OPT \
    -tsung_recorder parent_proxy $USE_PARENT_PROXY \
    -tsung_recorder plugin ts_proxy_$RECORDER_PLUGIN \
    -tsung_recorder proxy_log_file \"$MAIN_DIR/tsung_recorder.xml\" \
    -tsung_recorder pgsql_server \"${PGSQL_SERVER_IP}\" \
    -tsung_recorder pgsql_port ${PGSQL_SERVER_PORT} \
    -tsung_recorder proxy_listen_port $LISTEN_PORT &
    echo $! > /tmp/tsung_recorder.pid
}

version() {
    echo "Tsung Recorder version $VERSION"
    exit 0
}

checkconfig() {
    if [ ! -e $CONF_OPT_FILE ]
    then
        echo "Config file $CONF_OPT_FILE doesn't exist, aborting !"
        exit 1
    fi
}

maindir() {
    if [ ! -d $MAIN_DIR ]
    then
        echo "Creating local Tsung directory $MAIN_DIR"
        mkdir $MAIN_DIR
    fi
}

logdir() {
        if [ ! -d $LOG_DIR ]
        then
                echo "Creating Tsung log directory $LOG_DIR"
                mkdir $LOG_DIR
        fi
}

record_tag() {
    shift
    SNAME=tsung_recordtag
    $ERL -noshell $NAMETYPE $SNAME -setcookie $COOKIE -pa $TSUNGPATH -pa $RECORDERPATH -run ts_proxy_recorder recordtag $HOST "$*" -s init stop
}

checkrunning(){
    if [ -f $PIDFILE ]; then
        CURPID=`cat $PIDFILE`
        if kill -0 $CURPID 2> /dev/null ; then
            echo "Can't start: Tsung recorder already running !"
            exit 1
        fi
    fi
}

usage() {
    prog=`basename $0`
    echo "Usage: $prog <options> start|stop|restart"
    echo "Options:"
    echo " -p <plugin> plugin used for the recorder"
    echo " available: http, pgsql,webdav (default is http)"
    echo " -L <port> listening port for the recorder (default is 8090)"
    echo " -I <IP> for the pgsql recorder (or parent proxy): server IP"
    echo " (default is 127.0.0.1)"
    echo " -P <port> for the pgsql recorder (or parent proxy): server port"
    echo " (default is 5432)"
    echo " -u for the http recorder: use a parent proxy"
    echo " -d <level> set log level from 0 to 7 (default is 5)"
    echo " -v print version information and exit"
    echo " -h display this help and exit"
    exit
}

while getopts "hvf:p:l:d:r:i:P:L:I:u:" Option
do
    case $Option in
        f) CONF_OPT_FILE=$OPTARG;;
        l) # must add absolute path
            echo "$OPTARG" | grep -q "^/"
            RES=$?
            if [ "$RES" == 0 ]; then
                LOG_OPT="log_file \"$OPTARG\" "
            else
                LOG_OPT="log_file \"$PWD/$OPTARG\" "
            fi
            ;;
        d) DEBUG_LEVEL=$OPTARG;;
        p) RECORDER_PLUGIN=$OPTARG;;
        I) PGSQL_SERVER_IP=$OPTARG;;
        u) USE_PARENT_PROXY=true;;
        P) PGSQL_SERVER_PORT=$OPTARG;;
        L) LISTEN_PORT=$OPTARG;;
        v) version;;
        h) usage;;
        *) usage ;;
    esac
done
shift $(($OPTIND - 1))

case $1 in
    start)
        PIDFILE="/tmp/tsung_recorder.pid"
        checkversion
        maindir
        logdir
        checkrunning
        start
        ;;

    record_tag)
        record_tag $*
        ;;
    boot)
        checkversion
        ;;
    stop)
        PIDFILE="/tmp/tsung_recorder.pid"
        stop
        ;;
    status)
        status
        ;;
    restart)
        stop
        start
        ;;
    *)
        usage $0
        ;;
esac
Something went wrong with that request. Please try again.