Remove operation help.
[anna.git] / example / diameter / launcher / deploy.sh
1 #!/bin/bash
2
3 #############
4 # VARIABLES #
5 #############
6 SCR_DIR=`readlink -f $(dirname $0)`
7 PROJECT_ROOT=$(readlink -f $SCR_DIR/../../..)
8 SETUPS_DIR=$PROJECT_ROOT/source/diameter/stack/setups
9 MSGDTD=$PROJECT_ROOT/include/anna/diameter/codec/message.dtd
10 DCTDTD=$PROJECT_ROOT/include/anna/diameter/stack/dictionary.dtd
11 SERVICES=$SCR_DIR/resources/services_examples
12 SCRIPTS=$SCR_DIR/resources/scripts
13 STACK_EXAMPLES=$SCR_DIR/resources/stack_examples
14 SRVDTD=$SERVICES/services.dtd
15 VARIANT=
16
17 #############
18 # FUNCTIONS #
19 #############
20 _exit () {
21    echo -e "\n$1\n"
22    exit 1
23 }
24
25 usage () {
26   echo "Usage: $0 [deployment_type: a|b|f|s] [deployment_path]"
27   echo
28   echo "       deployment_type:"
29   echo "          a=advanced"
30   echo "          b=basic"
31   echo "          f=function test client"
32   echo "          s=system test client"
33   echo "       deployment_path:"
34   echo "          non-existent path directory."
35   echo
36   echo "       For example:"
37   echo "          $0 b $HOME/ADML-basicServer"
38   echo "          $0 b $HOME/ADML-MMSbalancer"
39   echo "          $0 f $HOME/ADML-tester"
40   echo "          $0 s $HOME/ADML-stress-client"
41   echo
42   exit 0
43 }
44
45 # $1: deployment type
46 createRunScript () {
47   # Basic launcher 'run.sh' will be created at deployment configuration:
48   [ "$1" = "b" ] && return
49
50   local other=
51   [ "$1" = "a" ] && other="--httpServer \`grep -v ^# .httpServer\`"
52   [ "$1" = "f" ] && ln -s ADML $EXE
53   [ "$1" = "s" ] && { other="--disableLogs"; ln -s ADML $EXE ; }
54
55   echo "Creating 'run.sh' script ..."
56
57   cat << EOF > run.sh
58 #!/bin/bash
59 cd \`dirname \$0\`
60 EXE=$EXE
61 STARTED=\`pgrep \$EXE$ 2>/dev/null\`
62 [ \$? -eq 0 ] && { echo "Already started!"; echo "\$STARTED" ; exit 1 ; }
63 ./pre-start.sh
64 0> launcher.trace
65 rm -f counters/* test-reports/*
66 # Execution line:
67 export LD_LIBRARY_PATH=\$PWD/dynlibs
68 ./\$EXE --services services.xml --cntDir counters --tmDir test-reports $other &
69 echo \$! > .pid
70 renice -n 5 -p \$(cat .pid)
71 EOF
72
73   chmod a+x run.sh
74 }
75
76 #############
77 # EXECUTION #
78 #############
79 cd $SCR_DIR
80 echo
81 echo "---------------------------------------"
82 echo "Anna Diameter Launcher (ADML) deployment"
83 echo "---------------------------------------"
84 [ "$1" = "--help" -o "$1" = "-h" ] && usage
85 echo " (--help or -h for more info)"
86 echo
87 echo "Basic checkings ..."
88
89 # Get variant and main executables:
90 [ -d $PROJECT_ROOT/build/Release ] && VARIANT=Release
91 [ -d $PROJECT_ROOT/build/Debug ] && VARIANT=Debug
92 [ -z "$VARIANT" ] && _exit "Cannot locate neither 'Release' nor 'Debug' variant !"
93 echo "Variant: $VARIANT"
94 BIN_DIR=$PROJECT_ROOT/build/$VARIANT/bin
95 LIB_DIR=$PROJECT_ROOT/build/$VARIANT/lib
96
97 # Main executables:
98 ADML_EXEC=$BIN_DIR/anna_diameter_launcher
99 STACKMGMT_EXEC=$BIN_DIR/anna_diameter_stackManagement
100
101 [ ! -d $SETUPS_DIR ] && _exit "Diameter stacks not found ($SETUPS_DIR)."
102
103 echo
104 if [ "$1" = "" ]
105 then
106   echo
107   echo "Deploy one of these versions:"
108   echo
109   echo " (a)dvanced version:     includes burst management script and templates for different scenarios. Automatic configuration during start."
110   echo " (b)asic version:        4 types of launcher (client, server, balancer, dummy), lightly configured and managed through SIGURS2 method."
111   echo " (f)unction test client: special client with regexp scheduler script based on splitted traffic logs. Requires a server to perform the tests."
112   echo " (s)ystem test client:   special client for stress testing. Requires a server/s to perform the tests."
113   echo
114   echo "Input option [b]:"
115   read option
116   [ "$option" = "" ] && option=b
117 else
118   option=$1
119 fi
120
121 case $option in
122   a)
123     echo "Advanced deployment"
124     DEPLOYMENTS_DIR=deployments/advanced
125     DPATH_dflt=$HOME/ADML-advanced
126   ;;
127
128   b)
129     echo "Basic deployment"
130     DEPLOYMENTS_DIR=deployments/basic
131     DPATH_dflt=$HOME/ADML-basic
132   ;;
133
134   f)
135     echo "FT deployment"
136     DEPLOYMENTS_DIR=deployments/ft-client
137     DPATH_dflt=$HOME/ADML-ft-client
138   ;;
139
140   s)
141     echo "ST deployment"
142     DEPLOYMENTS_DIR=deployments/st-client
143     DPATH_dflt=$HOME/ADML-st-client
144   ;;
145
146   *)
147     _exit "Invalid deployment type '$option' !!"
148   ;;
149 esac
150
151 echo
152 if [ "$2" = "" ]
153 then
154   echo "Input deployment path [$DPATH_dflt]:"
155   read DPATH
156   [ "$DPATH" = "" ] && DPATH=$DPATH_dflt
157 else
158   DPATH=$2
159 fi
160
161 [ -d $DPATH ] && _exit "The installation path '$DPATH' must not exists."
162 EXE=`basename $DPATH`
163
164 echo "Copying to '$DPATH' ..."
165 mkdir -p $DPATH
166 mkdir -p $DPATH/DTDs
167 mkdir -p $DPATH/counters
168 mkdir -p $DPATH/test-reports
169
170 # Dynamic libs:
171 cp -r $LIB_DIR/dynamic/launcher $DPATH/dynlibs
172 cp $LIB_DIR/libanna_testing_shared.so $DPATH/dynlibs
173
174 # Get stuff from leaf directories:
175 cd $LIB_DIR/dynamic/launcher
176 leafs=( $(find . -type d -links 2) )
177 cd - >/dev/null
178
179 cd $PROJECT_ROOT/dynamic/launcher
180 for dir in ${leafs[@]}
181 do
182     cp $dir/*.xml $DPATH/dynlibs/$dir 2>/dev/null
183     cp $dir/dynamic.suffix $DPATH/dynlibs/$dir 2>/dev/null
184     cp -r $dir/services $DPATH/dynlibs/$dir 2>/dev/null
185 done
186 cd - >/dev/null
187
188 # ADML dynamic libs selection script:
189 cp $SCR_DIR/resources/scripts/select_dynlib.sh $DPATH/dynlibs/select.sh
190
191 # Default dynamic library:
192 cd $DPATH/dynlibs
193 ln -s default/libanna_launcher_procedure_default_shared.so
194 cd - >/dev/null
195
196 # Basic setup:
197 [ "$option" = "b" ] && mkdir -p $DPATH/services
198
199 # Copy resources:
200 cp -rL $DEPLOYMENTS_DIR/* $DPATH
201 mkdir -p $DPATH/stack_examples/other
202 cp $STACK_EXAMPLES/* $DPATH/stack_examples/other
203 cp $SETUPS_DIR/*xml $DPATH/stack_examples
204 cp $SETUPS_DIR/*sh $DPATH/stack_examples
205 cp $SETUPS_DIR/readme.txt $DPATH/stack_examples
206 cp $MSGDTD $DPATH/DTDs
207 cp $DCTDTD $DPATH/DTDs
208 cp $SRVDTD $DPATH/DTDs
209 [ "$option" = "b" ] && cp $SERVICES/* $DPATH/services
210 cp $SCRIPTS/clone.sh $DPATH
211 cp $SCRIPTS/tinyTestcase.sh $DPATH
212 cp $SCR_DIR/resources/HELP.md $DPATH
213
214 # Copy executables:
215 cp $ADML_EXEC $DPATH/ADML
216 [ ! -f $DPATH/stack_examples/stack-mgmt ] && cp $STACKMGMT_EXEC $DPATH/stack_examples/stack-mgmt
217
218 echo "Default stack dynamic generation ..."
219 cd $DPATH
220 createRunScript $option
221 stack_examples/makeAutonomous.sh commands_qosControl.xml stack_examples/stack-mgmt >/dev/null
222 ln -s stack_examples/autonomous.commands_qosControl.xml dictionary.xml
223 cd - >/dev/null
224
225 if [ "$option" = "s" ]
226 then
227   cd $DPATH
228   #ln -s services_example services
229   mv run.sh .run-one.sh
230   mv run_all.sh run.sh
231   mv operation.sh .operation-one.sh
232   mv operation_all.sh operation.sh
233   rm dictionary.xml
234   cd - >/dev/null
235 fi
236
237 # Help:
238 echo "Done !"
239 echo "(see README at '$DPATH')"
240 echo
241