Add a http performance test script based on wrk
[iec.git] / src / use_cases / robox / sm_ctrl.sh
1 #!/bin/bash
2
3 #PATH=download/robox/build/src:$PATH
4 XDG_RUNTIME_DIR=/run/user/$(id -u)
5 export XDG_RUNTIME_DIR
6 #export DBUS_SESSION_BUS_ADDRESS=/run/user/$(id -u)/bus
7 ANBOX="anbox"
8 SESSIONMANAGER="$ANBOX session-manager"
9 BINDMOUNTDIR=$HOME/anbox-data
10 ANBOX_LOG_LEVEL="debug"
11 EGL_LOG_LEVEL="debug"
12 SESSIONMANAGERPID=""
13 instance=0
14 instance=""
15 FAILED=255
16 DISPLAY=:0
17 display=""
18
19 function warning() {
20     echo -e "\e[01;31m${instancenum}: $* \e[0m"
21 }
22
23 function out() {
24     if [[ "$QUIET" == "true" ]]; then return; fi
25     echo -e "\e[01;32m${instancenum}: $* \e[0m"
26 }
27
28 function debug() {
29     if [[ "$DEBUG" != "true" ]]; then return; fi
30     echo -e "\e[01;33m${instancenum}: $* \e[0m"
31 }
32
33 function check_and_remove_docker()
34 {
35     echo "check_and_remove_docker  $instance"
36     sudo docker ps -a | grep $instance$  > /dev/null 2>&1
37     if [[ $? -eq 0 ]]; then
38      #sudo docker stop $instance
39      sudo docker rm -f $instance
40     fi
41     #out "`sudo docker ps -a | grep $instance`"
42 }
43
44 function start_framebuffer()
45 {
46     out "${instancenum}: STARTING Frame Buffer"
47     cmd="sudo Xorg -config /etc/X11/xorg0.conf $display -sharevts"
48
49     # LEE: Might need a sleep here
50     ps aux | grep Xorg | grep "Xorg[[:space:]]*$display " > /dev/null
51     if [ $? -gt 0 ]; then
52         warning "\e[01;31m  Create Xorg service\e[0m"
53         debug $cmd
54         eval $cmd &
55         sleep 3
56     else
57         out "The Xorg service has been created \e[0m"
58     fi
59 }
60
61 function start_session_manager()
62 {
63
64     windowing=""
65     warning "BINDMOUNTDIR:${BINDMOUNTDIR}, XDG_RUNTIME_DIR:${XDG_RUNTIME_DIR}"
66     if [ -d ${XDG_RUNTIME_DIR}/anbox/${instancenum} ]; then
67       sudo rm -rfv ${XDG_RUNTIME_DIR}/anbox/${instancenum}
68       sudo rm -rfv ${BINDMOUNTDIR}/${instancenum}
69     fi
70
71     PID=$(ps aux | grep session-manager | grep "run-multiple=${instancenum}" | column -t | cut -d$' ' -f3)
72     if [[ "$PID" != "" ]]; then
73        out "exsist , STOPPING Session Manager (${PID})"
74        kill -9 ${PID}
75     else
76        out "NOT stopping Session Manager, it's not running"
77     fi
78
79     ## can't run as root
80     cpurange=$((4*instancenum))-$((4*instancenum+3))
81     #taskset -c $cpurange anbox session-manager --run-multiple=1 --standalone --experimental windowing="" --window-size=720,1280
82     cmd="taskset -c $cpurange $SESSIONMANAGER --run-multiple=${instancenum} --standalone --single-window --experimental $windowing --window-size=720,1280"
83
84     echo $cmd
85     export DISPLAY=$DISPLAY
86     export EGL_PLATFORM=x11
87     export EGL_LOG_LEVEL="fatal"
88     export SDL_VIDEODRIVER=x11
89
90     #eval $cmd
91     eval "${cmd}" &
92     if [ $? -ne 0 ]; then
93         warning "session manager failed"
94         exit
95     fi
96     SESSIONMANAGERPID=$(ps aux | grep session-manager | grep "run-multiple=${instancenum}" | column -t | cut -d$' ' -f3)
97
98     TIMEOUT=0
99     while true; do
100       ps -h $SESSIONMANAGERPID > /dev/null
101       if [[ $? -gt 0 ]]; then
102         if [[ $TIMEOUT -gt 2 ]]; then
103           warning "FAILED to start the Session Manager"
104           return $FAILED
105         else
106         TIMEOUT=$(($TIMEOUT+1))
107         fi
108           sleep 2
109         else
110           break
111       fi
112     done
113 }
114
115 function configure_networking()
116 {
117     #unique_ip=${instancenum}
118     unique_ip=$(ps -ef | grep "proxy" | grep "172.17.0" | awk '{print $16}' | awk -F "." '{print $4}' | sort -nur | sed -n '1p')
119     if [[ ! $unique_ip ]]; then
120         unique_ip=1
121     fi
122     unique_ip=$(($unique_ip + 1))
123     final_ip=172.17.0.$unique_ip
124
125     out "CREATING network configuration (using $final_ip)"
126
127     mkdir -p ${BINDMOUNTDIR}/${instancenum}/data/misc/ethernet
128     echo "mkdir -p ${BINDMOUNTDIR}/${instancenum}/data/misc/ethernet"
129
130     $ANBOX generate-ip-config --ip=$final_ip --gateway=172.17.0.1
131     if [[ $? -ne 0 ]]; then
132         warning "FAILED to configure Networking"
133         return $FAILED
134     fi
135
136     cp ipconfig.txt ${BINDMOUNTDIR}/${instancenum}/data/misc/ethernet
137 }
138
139 function start()
140 {
141     ps aux | grep -v grep | grep "$instance \|$instance$" > /dev/null
142     if [[ $? -eq 0 ]]; then
143       OUT=$(ps aux | grep -v grep | grep "$instance \|$instance$")
144       out $OUT
145       warning "$instance is already running -- please stop it before continuing"
146       return $FAILED
147     fi
148
149     sudo docker network inspect bridge | grep \"$instance\" > /dev/null
150     if [[ $? -eq 0 ]]; then
151       sudo docker network disconnect -f bridge $instance
152     fi
153
154     # Export current log level values
155     export ANBOX_LOG_LEVEL=$ANBOX_LOG_LEVEL
156     export EGL_LOG_LEVEL=$EGL_LOG_LEVEL
157     start_framebuffer
158     # Raise system resource limits - required for many containers
159     sudo sysctl -w fs.inotify.max_user_instances=8192 > /dev/null
160     sudo sysctl -w fs.file-max=1000000 > /dev/null
161     sudo sysctl -w kernel.shmmni=24576 > /dev/null
162     sudo sysctl -w kernel.pid_max=200000 > /dev/null
163
164     ulimit -n 4096
165     ulimit -s unlimited
166     ulimit -c unlimited
167
168     start_session_manager
169
170     debug "Ensuring all sockets are useable"
171
172 }
173
174 function stop()
175 {
176
177   ps aux | grep -v grep | grep "run-multiple=${instancenum}" > /dev/null
178   if [[ $? -ne 0 ]]; then
179     out "Nothing to do"
180     # Remove possible remnent files anyway, just in case
181     sudo rm -rf ${XDG_RUNTIME_DIR}/anbox/${instancenum}
182     sudo rm -rf ${BINDMOUNTDIR}/${instancenum}
183     exit 0
184   fi
185     # Stop Docker
186     sudo docker ps -a | grep $instance$ > /dev/null
187     if [[ $? -eq 0 ]]; then
188         out "REMOVING Docker"
189         sudo docker rm -f $instance
190         if [[ $? -ne 0 ]]; then
191           warning "FAILED to remove Docker container"
192         fi
193     else
194         out "NOT stopping Docker, it's not running"
195     fi
196
197     # Stop Session Manager
198     PID=$(ps aux | grep -v "grep" | grep "session-manager" | grep "run-multiple=${instancenum}" | column -t | cut -d$' ' -f3)
199     if [[ "$PID" != "" ]]; then
200        out "STOPPING Session Manager (${PID})"
201        if [[ "$PERF" == "true" ]]; then
202          kill -INT ${PID}
203        else
204          kill -9 ${PID}
205        fi
206     else
207        out "NOT stopping Session Manager, it's not running"
208     fi
209
210     out sudo rm -rf ${XDG_RUNTIME_DIR}/anbox/${instancenum}
211     out sudo rm -rf ${BINDMOUNTDIR}/${instancenum}
212
213
214     sudo rm -f /tmp/.X${instancenum}-lock
215
216     # Remove unattached shared memory (VNC does not free it properly)
217     IDS=$(ipcs -m | grep '^0x' | grep "$USER" | awk '{print $2, $6}' | grep ' 0$' | awk '{print $1}')
218     for id in $IDS; do
219     ipcrm shm "${id}" &> /dev/null
220     done
221 }
222
223 main ()
224 {
225     mkdir -p "${XDG_RUNTIME_DIR}"
226     #mkdir -p $DBUS_SESSION_BUS_ADDRESS
227     instancenum=$2
228     instance=instance${instancenum}
229     if [[ "$1" == "start" ]]; then
230       out "Attempting to start instance $instance\n"
231       start
232     elif  [[ "$1" == "kill" ]]; then
233       kill
234     elif  [[ "$1" == "stop" ]]; then
235       out "Attempting to stop instance $instance\n"
236       stop
237     fi
238
239     return $?
240 }
241
242 main "$@"
243 exit $?