@@ -16,6 +16,8 @@ DEVWORKSPACE_LINK="https://gist.githubusercontent.com/rohanKanojia/ecf625afaf3fe
16
16
MAX_VUS=" 100"
17
17
DEV_WORKSPACE_READY_TIMEOUT_IN_SECONDS=" 1200"
18
18
SEPARATE_NAMESPACES=" false"
19
+ DELETE_DEVWORKSPACE_AFTER_READY=" true"
20
+ MAX_DEVWORKSPACES=" -1"
19
21
CREATE_AUTOMOUNT_RESOURCES=" false"
20
22
LOGS_DIR=" logs"
21
23
TEST_DURATION_IN_MINUTES=" 25"
@@ -57,7 +59,9 @@ Usage: $0 [options]
57
59
Options:
58
60
--mode <operator|binary> Mode to run the script (default: operator)
59
61
--max-vus <int> Number of virtual users for k6 (default: 100)
62
+ --max-devworkspaces <int> Maximum number of DevWorkspaces to create (by default, it's not specified)
60
63
--separate-namespaces <true|false> Use separate namespaces for workspaces (default: false)
64
+ --delete-devworkspace-after-ready Delete DevWorkspace once it becomes Ready (default: true)
61
65
--devworkspace-ready-timeout-seconds <int> Timeout in seconds for workspace to become ready (default: 1200)
62
66
--devworkspace-link <string> DevWorkspace link (default: empty, opinionated DevWorkspace is created)
63
67
--create-automount-resources <true|false> Whether to create automount resources (default: false)
@@ -77,6 +81,10 @@ parse_arguments() {
77
81
MAX_VUS=" $2 " ; shift 2;;
78
82
--separate-namespaces)
79
83
SEPARATE_NAMESPACES=" $2 " ; shift 2;;
84
+ --max-devworkspaces)
85
+ MAX_DEVWORKSPACES=" $2 " ; shift 2;;
86
+ --delete-devworkspace-after-ready)
87
+ DELETE_DEVWORKSPACE_AFTER_READY=" $2 " ; shift 2;;
80
88
--devworkspace-ready-timeout-seconds)
81
89
DEV_WORKSPACE_READY_TIMEOUT_IN_SECONDS=" $2 " ; shift 2;;
82
90
--devworkspace-link)
@@ -173,11 +181,40 @@ start_background_watchers() {
173
181
kubectl get dw --watch --all-namespaces \
174
182
>> " ${LOGS_DIR} /${TIMESTAMP} _dw_watch.log" 2>&1 &
175
183
PID_DW_WATCH=$!
184
+
185
+ log_failed_devworkspaces &
186
+ PID_FAILED_DW_POLL=$!
187
+ }
188
+
189
+ log_failed_devworkspaces () {
190
+ echo " 📄 Starting periodic failed DevWorkspaces report (every 10s)..."
191
+
192
+ POLL_INTERVAL=10 # in seconds
193
+ ITERATIONS=$(( (TEST_DURATION_IN_MINUTES * 60 ) / POLL_INTERVAL))
194
+
195
+ for (( i = 0 ; i < ITERATIONS; i++ )) ; do
196
+ OUTPUT=$( kubectl get devworkspaces --all-namespaces -o json | jq -r '
197
+ .items[]
198
+ | select(.status.phase == "Failed")
199
+ | [
200
+ .metadata.namespace,
201
+ .metadata.name,
202
+ .status.phase,
203
+ (.status.message // "No message")
204
+ ]
205
+ | @csv' )
206
+
207
+ if [ -n " $OUTPUT " ]; then
208
+ echo " $OUTPUT " > " ${LOGS_DIR} /dw_failure_report.csv"
209
+ fi
210
+
211
+ sleep " $POLL_INTERVAL "
212
+ done
176
213
}
177
214
178
215
stop_background_watchers () {
179
216
echo " 🛑 Stopping background watchers..."
180
- kill " $PID_EVENTS_WATCH " " $PID_DW_WATCH " 2> /dev/null || true
217
+ kill " $PID_EVENTS_WATCH " " $PID_DW_WATCH " " $PID_FAILED_DW_POLL " 2> /dev/null || true
181
218
}
182
219
183
220
install_k6_operator () {
@@ -235,6 +272,10 @@ spec:
235
272
value: '${TEST_DURATION_IN_MINUTES} '
236
273
- name: DEV_WORKSPACE_READY_TIMEOUT_IN_SECONDS
237
274
value: '${DEV_WORKSPACE_READY_TIMEOUT_IN_SECONDS} '
275
+ - name: DELETE_DEVWORKSPACE_AFTER_READY
276
+ value: '${DELETE_DEVWORKSPACE_AFTER_READY} '
277
+ - name: MAX_DEVWORKSPACES
278
+ value: '${MAX_DEVWORKSPACES} '
238
279
EOF
239
280
}
240
281
@@ -330,6 +371,8 @@ run_k6_binary_test() {
330
371
MAX_VUS=" ${MAX_VUS} " \
331
372
TEST_DURATION_IN_MINUTES=" ${TEST_DURATION_IN_MINUTES} " \
332
373
DEV_WORKSPACE_READY_TIMEOUT_IN_SECONDS=" ${DEV_WORKSPACE_READY_TIMEOUT_IN_SECONDS} " \
374
+ DELETE_DEVWORKSPACE_AFTER_READY=" ${DELETE_DEVWORKSPACE_AFTER_READY} " \
375
+ MAX_DEVWORKSPACES=" ${MAX_DEVWORKSPACES} " \
333
376
k6 run " ${K6_SCRIPT} "
334
377
exit_code=$?
335
378
if [ $exit_code -ne 0 ]; then
@@ -338,4 +381,5 @@ run_k6_binary_test() {
338
381
return 0
339
382
}
340
383
384
+ trap stop_background_watchers EXIT
341
385
main " $@ "
0 commit comments