-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfunctions.sh
executable file
·141 lines (123 loc) · 6.08 KB
/
functions.sh
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
#!/usr/bin/env bash
#
# Sets up test-environment then runs a 5 minute LDS load-test.
# This script will fail early on if no LDS is running.
#
check_whether_lds_network_and_containers_exists() {
LDS_NETWORK=ldsloadtest
if [ "${LDS_NETWORK}" = "" ]; then
echo "ERROR: LDS docker network network does not exists, it should have a name that starts with: ldsloadtest"
exit 1
else
echo "Using docker network: ${LDS_NETWORK}"
fi
LDS_NETWORK_CONTAINER_IDS=$(docker ps -q -f "network=${LDS_NETWORK}")
if [ "${LDS_NETWORK_CONTAINER_IDS}" = "" ]; then
echo "ERROR: LDS is not running in docker network with name that starts with: ldsloadtest"
exit 1
else
echo Listing relevant LDS and/or loadtest related containers:
docker ps -f "network=${LDS_NETWORK}"
fi
}
stop_ldsloadtestcontroller() {
if [ "$(docker ps -q -f 'name=ldsloadtestcontroller')" != "" ]; then
echo Stopping test-controller container
docker stop $(docker ps -q -f 'name=ldsloadtestcontroller')
fi
if [ "$(docker ps -aq -f 'name=ldsloadtestcontroller')" != "" ]; then
echo Removing stopped test-controller container
docker rm $(docker ps -aq -f 'name=ldsloadtestcontroller')
fi
}
stop_httploadtest() {
if [ "$(docker ps -q -f 'name=httploadtestbaseline')" != "" ]; then
echo Stopping httploadtest-baseline container
docker stop $(docker ps -q -f 'name=httploadtestbaseline')
fi
if [ "$(docker ps -aq -f 'name=httploadtestbaseline')" != "" ]; then
echo Removing exited httploadtest-baseline container
docker rm $(docker ps -aq -f 'name=httploadtestbaseline')
fi
}
start_ldsloadtestcontroller() {
echo Starting test-controller container
docker run --network ldsloadtest -t -d -v $(pwd)/setup:/loadtest -v $(pwd)/${OUTPUTFOLDER}/results:/results -w /loadtest --name ldsloadtestcontroller ldstestctrl sh
}
start_httploadtest() {
echo Starting httploadtest-baseline container
docker pull cantara/httploadtest-baseline:latest
docker run --network ldsloadtest --name 'httploadtestbaseline' -d -p 28086:8086 -v $(pwd)/${OUTPUTFOLDER}/results:/home/HTTPLoadTest-baseline/results cantara/httploadtest-baseline:latest
}
stop_test_containers() {
stop_ldsloadtestcontroller
stop_httploadtest
}
start_test_containers() {
start_ldsloadtestcontroller
start_httploadtest
}
restart_ldsloadtestcontroller() {
stop_ldsloadtestcontroller
start_ldsloadtestcontroller
}
restart_http_loadtest_baseline() {
stop_httploadtest
start_httploadtest
}
check_health_of_lds() {
echo Checking health of LDS service
if [ $(docker exec -it ldsloadtestcontroller curl -s -o /dev/null --write-out "%{http_code}" http://lds:9090/ping) -ne 200 ]; then
echo ERROR: LDS is not responding correctly.
exit 1
fi
}
prepopulate_data() {
echo Pre-populating data for managed domains:
docker exec -it ldsloadtestcontroller /prepopulate.sh
}
check_health_of_loadtest() {
echo Checking health of httploadtest-baseline container
if [ $(docker exec -it ldsloadtestcontroller curl -s -o /dev/null --write-out "%{http_code}" http://httploadtestbaseline:8086/HTTPLoadTest-baseline/health) -ne 200 ]; then
echo ERROR: HTTPLoadTest-baseline is not responding correctly.
exit 1
fi
}
configure_loadtest() {
echo Configuring loadtest ...
echo Uploading zip-file with templates
if [ $(docker exec -it ldsloadtestcontroller sh -c 'zip -qr gsim.zip gsim && curl -s -o /dev/null --write-out "%{http_code}" -F "[email protected]" http://httploadtestbaseline:8086/HTTPLoadTest-baseline/loadTest/zip') -ne 200 ]; then echo ERROR: Unable to upload zip-file; exit 1; fi
echo Uploading read-specification
if [ $(docker exec -it ldsloadtestcontroller curl -s -o /dev/null --write-out "%{http_code}" --data-urlencode 'jsonConfig@/loadtest/gsim/read.json' http://httploadtestbaseline:8086/HTTPLoadTest-baseline/loadTest/form/read) -ne 200 ]; then echo ERROR: Unable to upload read-specification; exit 1; fi
echo Uploading write-specification
if [ $(docker exec -it ldsloadtestcontroller curl -s -o /dev/null --write-out "%{http_code}" --data-urlencode 'jsonConfig@/loadtest/gsim/write.json' http://httploadtestbaseline:8086/HTTPLoadTest-baseline/loadTest/form/write) -ne 200 ]; then echo ERROR: Unable to upload write-specification; exit 1; fi
echo Uploading benchmark-configuration
if [ $(docker exec -it ldsloadtestcontroller curl -s -o /dev/null --write-out "%{http_code}" --data-urlencode 'jsonConfig@/loadtest/gsim/benchmark.json' http://httploadtestbaseline:8086/HTTPLoadTest-baseline/loadTest/form/benchmark) -ne 200 ]; then echo ERROR: Unable to upload benchmark-configuration; exit 1; fi
}
run_loadtest() {
if [ $(docker exec -it ldsloadtestcontroller bash -c 'jq ".test_no_of_threads='$1' | .test_sleep_in_ms=0 | .test_read_write_ratio=80 | .test_duration_in_seconds='$2' | .test_randomize_sleeptime=false" /loadtest/gsim/config.json | curl -s -o /dev/null --write-out "%{http_code}" -H "Content-Type: application/json" -d "@-" http://httploadtestbaseline:8086/HTTPLoadTest-baseline/loadTest') -ne 200 ]; then
echo "ERROR: Unable to trigger loadtest with $1 threads"
exit 1
fi
echo "Running test with $1 threads for $2 seconds"
sleep $2
sleep 2
}
warm_up_lds() {
echo "Warming up . . ."
run_loadtest $1 $2
sleep 10
mkdir -p ${OUTPUTFOLDER}/results/warmup
mv ${OUTPUTFOLDER}/results/*.csv ${OUTPUTFOLDER}/results/*.json ${OUTPUTFOLDER}/results/warmup
}
create_gnuplot_files() {
GP_FILE_PREFIX=performance_by_threads
echo "Generating gnuplot files"
docker exec -it ldsloadtestcontroller java -cp "/opt/plotgen/*:/opt/plotgen/lib/*" no.ssb.lds.loadtest.HTTPLoadTestBaselineStatistics /results /results $GP_FILE_PREFIX
echo "Generating svg file using gnuplot"
docker exec -it -w /results ldsloadtestcontroller gnuplot ${GP_FILE_PREFIX}.gnu
docker exec -it -w /results ldsloadtestcontroller gnuplot ${GP_FILE_PREFIX}_load.gnu
docker exec -it -w /results ldsloadtestcontroller gnuplot ${GP_FILE_PREFIX}_total_throughput.gnu
docker exec -it -w /results ldsloadtestcontroller gnuplot ${GP_FILE_PREFIX}_read_latency.gnu
docker exec -it -w /results ldsloadtestcontroller gnuplot ${GP_FILE_PREFIX}_write_latency.gnu
}