@@ -58,6 +58,7 @@ case "$op" in
5858
5959 local svcs=$dir /profile/node-services.json
6060 local gtor=$dir /profile/generator-service.json
61+ local work=$dir /profile/workloads-service.json
6162 local trac=$dir /profile/tracer-service.json
6263 local hche=$dir /profile/healthcheck-service.json
6364
@@ -76,6 +77,15 @@ case "$op" in
7677 cp $( jq ' ."plutus-redeemer"' -r $gtor ) " $gen_dir " /plutus-redeemer.json
7778 cp $( jq ' ."plutus-datum"' -r $gtor ) " $gen_dir " /plutus-datum.json
7879
80+ local work_dir=" $dir " /workloads
81+ mkdir -p " $work_dir "
82+ for workload in $( jq_tolist ' map(.name)' " $work " )
83+ do
84+ mkdir -p " $work_dir " /" ${workload} "
85+ cp $( jq " map(select(.name == \" ${workload} \" ))[0] | .start" -r $work ) \
86+ " $work_dir " /" ${workload} " /start.sh
87+ done
88+
7989 local trac_dir=" $dir " /tracer
8090 mkdir -p " $trac_dir "
8191 cp $( jq ' ."start"' -r $trac ) " $trac_dir " /start.sh
@@ -84,8 +94,6 @@ case "$op" in
8494 local hche_dir=" $dir " /healthcheck
8595 mkdir -p " $hche_dir "
8696 cp $( jq ' ."start"' -r $hche ) " $hche_dir " /start.sh
87-
88- mkdir -p " $dir " /latency
8997 ;;
9098
9199 deploy-genesis )
274282 fi
275283 backend_supervisor save-child-pids " $dir " ;;
276284
285+ start-workloads )
286+ local usage=" USAGE: wb backend $op RUN-DIR"
287+ local dir=${1:? $usage } ; shift
288+
289+ while test $# -gt 0
290+ do case " $1 " in
291+ --* ) msg " FATAL: unknown flag '$1 '" ; usage_supervisor;;
292+ * ) break ;; esac ; shift ; done
293+
294+ # For every workload
295+ for workload in $( jq_tolist ' .workloads | map(.name)' " $dir " /profile.json)
296+ do
297+ if ! supervisorctl start " ${workload} "
298+ then progress " supervisor" " $( red fatal: failed to start) $( white " ${workload} workload" ) "
299+ echo " $( red " ${workload} " workload stdout) ----------------------" >&2
300+ cat " $dir " /workloads/" ${workload} " /stdout
301+ echo " $( red " ${workload} " workload stderr) ----------------------" >&2
302+ cat " $dir " /workloads/" ${workload} " /stderr
303+ echo " $( white -------------------------------------------------) " >&2
304+ fatal " could not start $( white " ${workload} workload" ) "
305+ fi
306+ done
307+ backend_supervisor save-child-pids " $dir " ;;
308+
277309 wait-node-stopped )
278310 local usage=" USAGE: wb backend $op RUN-DIR NODE"
279311 local dir=${1:? $usage } ; shift
322354 fi
323355 ;;
324356
357+ wait-workloads-stopped )
358+ local usage=" USAGE: wb backend $op RUN-DIR"
359+ local dir=${1:? $usage } ; shift
360+
361+ local start_time=$( date +%s)
362+ msg_ne " supervisor: waiting until all workloads are stopped: 000000"
363+ for workload in $( jq_tolist ' .workloads | map(.name)' " $dir " /profile.json)
364+ do
365+ while \
366+ ! test -f " ${dir} " /flag/cluster-stopping \
367+ && \
368+ supervisorctl status " ${workload} " > /dev/null
369+ do
370+ echo -ne " \b\b\b\b\b\b"
371+ printf " %6d" " $(( $(date +% s) - start_time)) "
372+ sleep 1
373+ done
374+ if ! test -f " ${dir} " /flag/cluster-stopping
375+ then
376+ echo -ne " \b\b\b\b\b\b"
377+ echo -n " ${workload} 000000"
378+ fi
379+ done >&2
380+ echo -ne " \b\b\b\b\b\b"
381+ local elapsed=$(( $(date +% s) - start_time))
382+ if test -f " ${dir} " /flag/cluster-stopping
383+ then
384+ echo " Termination requested -- after $( yellow ${elapsed} ) s" >&2
385+ else
386+ touch " ${dir} " /flag/cluster-stopping
387+ echo " All workloads exited -- after $( yellow ${elapsed} ) s" >&2
388+ fi
389+ ;;
390+
325391 stop-all )
326392 local usage=" USAGE: wb backend $op RUN-DIR"
327393 local dir=${1:? $usage } ; shift
0 commit comments