1
0
Fork 0
arangodb/scripts/tmux_starter

327 lines
7.6 KiB
Bash
Executable File

#!/usr/bin/env bash
# Author Jan Christoph Uhde
main(){
source_file=~/.tmux_starter_suites #may not contain spaces
if [[ -f $source_file ]]; then
. $source_file
fi
local suite=${1:-all}
shift
local tasks="suite_$suite"
type -t function $tasks &>/dev/null|| die "suite $suite not defined"
echo "using function name: $tasks"
local session_name="$($tasks 'name')"
echo "using session name: $session_name"
local panes=$($tasks 'num')
echo "using $panes panes"
kill_old_session "$session_name"
tmux new-session -d -s "$session_name" || die "unable to spawn session"
local rows=$(( (panes+1) / 2 ))
local cols=$((((panes>1)) * 2))
spawn_panes "$session_name" $rows $cols
tmux select-pane -t $session_name.0
execute_tasks "$(pwd)" "$tasks" "$@"
tmux -2 attach-session -t $session_name
}
# task definitions
suite_all(){
local count="$1"
shift 1
local args="$@"
local args_default=( '--cluster' 'false' )
local tests=""
case $count in
num)
echo "12"
return
;;
name)
echo "test_all"
return
;;
delay)
return
;;
0)
echo "./scripts/quickieTest.sh ${args[@]} && exit 0"
return
;;
1)
tests="shell_server"
;;
2)
tests="shell_client"
;;
3)
tests="shell_server_aql --testBuckets 2/0"
;;
4)
tests="shell_server_aql --testBuckets 2/1"
;;
5)
tests="http_server"
;;
6)
tests="server_http"
;;
7)
tests="dump importing"
;;
8)
tests="export arangobench upgrade"
;;
9)
tests="replication_sync replication_static"
;;
10)
tests="replication_ongoing http_replication shell_replication"
;;
11)
tests="agency cluster_sync"
;;
*)
esac
echoerr "./scripts/unittest $tests ${args_default[@]} ${args[@]} && exit 0"
echo "./scripts/unittest $tests ${args_default[@]} ${args[@]} && exit 0"
}
portrange() {
local count="$1"
local portStart=1240
local portOffset=20
echo "--minPort $(( portStart + count * portOffset )) --maxPort $(( portStart + (count + 1) * portOffset - 1))"
}
## suite_all_cluster(){
## local count="$1"
## shift 1
## local args="$@"
## local args_default=( '--cluster' 'true' )
##
## local tests=""
## case $count in
## num)
## echo "12"
## return
## ;;
## name)
## echo "test_all_cluster"
## return
## ;;
## delay)
## echo "10"
## return
## ;;
## 0)
## echo "./scripts/quickieTest.sh ${args[@]} && exit 0"
## return
## ;;
## 1)
## tests="shell_server $(portrange $count)"
## ;;
## 2)
## tests="shell_client $(portrange $count)"
## ;;
## 3)
## tests="shell_server_aql --testBuckets 3/0 $(portrange $count)"
## ;;
## 4)
## tests="shell_server_aql --testBuckets 3/1 $(portrange $count)"
## ;;
## 5)
## tests="shell_server_aql --testBuckets 3/2 $(portrange $count)"
## ;;
## 6)
## tests="http_server $(portrange $count)"
## ;;
## 7)
## tests="ssl_server $(portrange $count)"
## ;;
## 8)
## tests="server_http $(portrange $count)"
## ;;
## 9)
## tests="dump $(portrange $count)"
## ;;
## 10)
## tests="agency $(portrange $count)"
## ;;
## 11)
## tests="resilience $(portrange $count)"
## ;;
## *)
## echo "exit 0"
## return
## esac
##
## echo "./scripts/unittest $tests ${args_default[@]} ${args[@]} && exit 0"
## }
suite_all_cluster(){
local count="$1"
shift 1
local args="$@"
local args_default=( '--cluster' 'true' )
local tests=""
case $count in
num)
echo "6"
return
;;
name)
echo "test_all_cluster"
return
;;
delay)
echo "10"
return
;;
0)
echo "./scripts/quickieTest.sh ${args[@]} && exit 0"
return
;;
1)
tests="shell_server $(portrange $count)"
;;
2)
tests="shell_client $(portrange $count)"
;;
3)
tests="shell_server_aql $(portrange $count)"
;;
4)
tests="http_server ssl_server server_http $(portrange $count)"
;;
5)
tests="dump agency resilience $(portrange $count)"
;;
*)
echo "exit 0"
return
esac
echo "./scripts/unittest $tests ${args_default[@]} ${args[@]} && exit 0"
}
suite_all_rocksdb(){
local count="$1"
shift 1
local args="$@"
case $count in
name)
echo "test_all_rocksdb"
return
;;
*)
suite_all "$count" "--storageEngine rocksdb" "${args[@]}"
;;
esac
}
suite_all_rocksdb_cluster(){
local count="$1"
shift 1
local args="$@"
case $count in
name)
echo "test_all_rocksdb_cluster"
return
;;
*)
suite_all_cluster "$count" "--storageEngine rocksdb" "${args[@]}"
;;
esac
}
# tmux
kill_old_session(){
local session_name="$1"
if tmux has-session -t $session_name 2> /dev/null; then
echo "Session $session_name exists. Kill it? [y/N]"
read kill_sess
echo "killsess '$kill_sess'"
if [[ ($kill_sess == "y") || ($kill_sess == "Y") ]]; then
tmux kill-session -t $session_name
else
die "Session not created because it already exists. Exiting."
fi
fi
}
spawn_panes(){
local session_name="$1"
local rows=$2
local cols=$3
# Create rows
local row=$rows
while (( row > 1 )); do
frac=$(echo "scale=2;1/$row" | bc)
percent=$(echo "($frac * 100)/1" | bc)
tmux select-pane -t $session_name.0 || die "could not select pane 0 of session $session_name"
tmux split-window -v -p $percent
((row--))
done
# Create columns
if ((cols > 1)); then
local count=$((rows - 1))
while ((count >= 0)); do
tmux select-pane -t $session_name.$count || die "could not select pane $session_name.$count"
tmux split-window -h -p 50
(( count-- ))
done
fi
}
execute_tasks(){
cd $1 || die
local tasks="$2"
shift 2
local args="$@"
local count=0
local delay=""
delay="$($tasks 'delay')"
while (( count < $($tasks 'num') )); do
local exec_cmd="$($tasks $count "${args[@]}")"
echo "running: ${exec_cmd[@]}"
if [[ -n "$delay" ]]; then
echo "sleep for $delay"
sleep "$delay"
fi
tmux send-keys -t $session_name.$count "${exec_cmd[@]}" Enter
(( count++ ))
done
}
# helper
echoerr() { printf "%s\n" "$*" >&2; }
die(){
echo "FATAL: ${1-this should not happen}"
exit 1
}
cores(){
# Determine automatically on Mac or Linux
if [[ $(uname) == 'Darwin' ]]; then
echo "$(sysctl hw.ncpu | awk '{print $2}')"
else
echo "$(nproc)"
fi
}
main "$@"
exit 0