@@ -16,6 +16,8 @@ DEVWORKSPACE_LINK="https://gist.githubusercontent.com/rohanKanojia/ecf625afaf3fe
1616MAX_VUS=" 100"
1717DEV_WORKSPACE_READY_TIMEOUT_IN_SECONDS=" 1200"
1818SEPARATE_NAMESPACES=" false"
19+ DELETE_DEVWORKSPACE_AFTER_READY=" true"
20+ MAX_DEVWORKSPACES=" -1"
1921CREATE_AUTOMOUNT_RESOURCES=" false"
2022LOGS_DIR=" logs"
2123TEST_DURATION_IN_MINUTES=" 25"
@@ -57,7 +59,9 @@ Usage: $0 [options]
5759Options:
5860 --mode <operator|binary> Mode to run the script (default: operator)
5961 --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)
6063 --separate-namespaces <true|false> Use separate namespaces for workspaces (default: false)
64+ --delete-devworkspace-after-ready Delete DevWorkspace once it becomes Ready (default: true)
6165 --devworkspace-ready-timeout-seconds <int> Timeout in seconds for workspace to become ready (default: 1200)
6266 --devworkspace-link <string> DevWorkspace link (default: empty, opinionated DevWorkspace is created)
6367 --create-automount-resources <true|false> Whether to create automount resources (default: false)
@@ -77,6 +81,10 @@ parse_arguments() {
7781 MAX_VUS=" $2 " ; shift 2;;
7882 --separate-namespaces)
7983 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;;
8088 --devworkspace-ready-timeout-seconds)
8189 DEV_WORKSPACE_READY_TIMEOUT_IN_SECONDS=" $2 " ; shift 2;;
8290 --devworkspace-link)
@@ -173,11 +181,31 @@ start_background_watchers() {
173181 kubectl get dw --watch --all-namespaces \
174182 >> " ${LOGS_DIR} /${TIMESTAMP} _dw_watch.log" 2>&1 &
175183 PID_DW_WATCH=$!
184+
185+ echo " 📄 Starting periodic failed DevWorkspaces report (every 10s)..."
186+ (
187+ while true ; do
188+ POLL_TIMESTAMP=$( date +%Y-%m-%d_%H-%M-%S)
189+ kubectl get devworkspaces --all-namespaces -o json | jq -r '
190+ ["namespace","name","phase","message"],
191+ (.items[]
192+ | select(.status.phase == "Failed")
193+ | [
194+ .metadata.namespace,
195+ .metadata.name,
196+ .status.phase,
197+ (.status.message // "No message")
198+ ])
199+ | @csv' > " ${LOGS_DIR} /dw_failure_report.csv"
200+ sleep 10
201+ done
202+ ) &
203+ PID_FAILED_DW_POLL=$!
176204}
177205
178206stop_background_watchers () {
179207 echo " 🛑 Stopping background watchers..."
180- kill " $PID_EVENTS_WATCH " " $PID_DW_WATCH " 2> /dev/null || true
208+ kill " $PID_EVENTS_WATCH " " $PID_DW_WATCH " " $PID_FAILED_DW_POLL " 2> /dev/null || true
181209}
182210
183211install_k6_operator () {
@@ -235,6 +263,10 @@ spec:
235263 value: '${TEST_DURATION_IN_MINUTES} '
236264 - name: DEV_WORKSPACE_READY_TIMEOUT_IN_SECONDS
237265 value: '${DEV_WORKSPACE_READY_TIMEOUT_IN_SECONDS} '
266+ - name: DELETE_DEVWORKSPACE_AFTER_READY
267+ value: '${DELETE_DEVWORKSPACE_AFTER_READY} '
268+ - name: MAX_DEVWORKSPACES
269+ value: '${MAX_DEVWORKSPACES} '
238270EOF
239271}
240272
@@ -330,6 +362,8 @@ run_k6_binary_test() {
330362 MAX_VUS=" ${MAX_VUS} " \
331363 TEST_DURATION_IN_MINUTES=" ${TEST_DURATION_IN_MINUTES} " \
332364 DEV_WORKSPACE_READY_TIMEOUT_IN_SECONDS=" ${DEV_WORKSPACE_READY_TIMEOUT_IN_SECONDS} " \
365+ DELETE_DEVWORKSPACE_AFTER_READY=" ${DELETE_DEVWORKSPACE_AFTER_READY} " \
366+ MAX_DEVWORKSPACES=" ${MAX_DEVWORKSPACES} " \
333367 k6 run " ${K6_SCRIPT} "
334368 exit_code=$?
335369 if [ $exit_code -ne 0 ]; then
@@ -338,4 +372,5 @@ run_k6_binary_test() {
338372 return 0
339373}
340374
375+ trap stop_background_watchers EXIT
341376main " $@ "
0 commit comments