S03-H3 CLOSED baseline
This commit is contained in:
Executable
+196
@@ -0,0 +1,196 @@
|
||||
#!/usr/bin/env bash
|
||||
set -u
|
||||
|
||||
if [ "$#" -ne 4 ]; then
|
||||
printf "Uso: %s <scenario-id> <configurazione> <stato> <durata-secondi>\n" \
|
||||
"$0" >&2
|
||||
exit 2
|
||||
fi
|
||||
|
||||
SCENARIO_ID="$1"
|
||||
CONFIG_FILE="$2"
|
||||
REQUESTED_STATE="$3"
|
||||
DURATION_SECONDS="$4"
|
||||
|
||||
COMMON_DIR="$(
|
||||
cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 &&
|
||||
pwd
|
||||
)"
|
||||
|
||||
ENV_FILE="$COMMON_DIR/environment.sh"
|
||||
PATHS_FILE="$COMMON_DIR/paths.sh"
|
||||
|
||||
if [ ! -f "$ENV_FILE" ]; then
|
||||
printf "FILE AMBIENTE ASSENTE: %s\n" "$ENV_FILE" >&2
|
||||
exit 3
|
||||
fi
|
||||
|
||||
source "$ENV_FILE"
|
||||
|
||||
if [ ! -x "$MARTE_APP" ]; then
|
||||
printf "MARTeApp ASSENTE O NON ESEGUIBILE: %s\n" "$MARTE_APP" >&2
|
||||
exit 4
|
||||
fi
|
||||
|
||||
if [ ! -f "$CONFIG_FILE" ]; then
|
||||
printf "CONFIGURAZIONE ASSENTE: %s\n" "$CONFIG_FILE" >&2
|
||||
exit 5
|
||||
fi
|
||||
|
||||
case "$SCENARIO_ID" in
|
||||
*[!A-Za-z0-9_-]*|"")
|
||||
printf "IDENTIFICATORE SCENARIO NON VALIDO: %s\n" "$SCENARIO_ID" >&2
|
||||
exit 6
|
||||
;;
|
||||
esac
|
||||
|
||||
case "$REQUESTED_STATE" in
|
||||
*[!A-Za-z0-9_-]*|"")
|
||||
printf "NOME STATO NON VALIDO: %s\n" "$REQUESTED_STATE" >&2
|
||||
exit 7
|
||||
;;
|
||||
esac
|
||||
|
||||
case "$DURATION_SECONDS" in
|
||||
*[!0-9]*|"")
|
||||
printf "DURATA NON VALIDA: %s\n" "$DURATION_SECONDS" >&2
|
||||
exit 8
|
||||
;;
|
||||
esac
|
||||
|
||||
if [ "$DURATION_SECONDS" -le 0 ]; then
|
||||
printf "LA DURATA DEVE ESSERE MAGGIORE DI ZERO.\n" >&2
|
||||
exit 8
|
||||
fi
|
||||
|
||||
STAMP="$(date +%Y%m%d_%H%M%S)"
|
||||
RUN_DIR="$RUNS_ROOT/${STAMP}_${SCENARIO_ID}"
|
||||
RUN_CONFIG="$RUN_DIR/configuration.marte"
|
||||
RUN_LOG="$RUN_DIR/run.log"
|
||||
RUN_SUMMARY="$RUN_DIR/runner_summary.txt"
|
||||
RUN_HASHES="$RUN_DIR/hashes.sha256"
|
||||
RUN_COMMAND="$RUN_DIR/command.txt"
|
||||
|
||||
mkdir -p -- "$RUN_DIR"
|
||||
|
||||
cp --preserve=mode,timestamps -- "$CONFIG_FILE" "$RUN_CONFIG"
|
||||
|
||||
RUN_DIR_PLACEHOLDER="__MARTE_RUN_DIR__"
|
||||
|
||||
PLACEHOLDER_COUNT="$(
|
||||
python3 - "$RUN_CONFIG" "$RUN_DIR_PLACEHOLDER" "$RUN_DIR" <<'PYRUNNER'
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
config_path = Path(sys.argv[1])
|
||||
placeholder = sys.argv[2]
|
||||
run_dir = sys.argv[3]
|
||||
|
||||
text = config_path.read_text(encoding="utf-8")
|
||||
count = text.count(placeholder)
|
||||
|
||||
if count > 0:
|
||||
config_path.write_text(
|
||||
text.replace(placeholder, run_dir),
|
||||
encoding="utf-8"
|
||||
)
|
||||
|
||||
remaining = config_path.read_text(
|
||||
encoding="utf-8"
|
||||
).count(placeholder)
|
||||
|
||||
if remaining != 0:
|
||||
print(
|
||||
f"PLACEHOLDER_RESIDUI={remaining}",
|
||||
file=sys.stderr
|
||||
)
|
||||
sys.exit(1)
|
||||
|
||||
print(count)
|
||||
PYRUNNER
|
||||
)"
|
||||
PLACEHOLDER_RC=$?
|
||||
|
||||
if [ "$PLACEHOLDER_RC" -ne 0 ]; then
|
||||
printf "ERRORE DURANTE LA SOSTITUZIONE DEL PERCORSO RUN.\n" >&2
|
||||
exit 9
|
||||
fi
|
||||
|
||||
{
|
||||
printf "%q " \
|
||||
timeout \
|
||||
--signal=INT \
|
||||
--kill-after=2s \
|
||||
"${DURATION_SECONDS}s" \
|
||||
"$MARTE_APP" \
|
||||
-l RealTimeLoader \
|
||||
-f "$RUN_CONFIG" \
|
||||
-s "$REQUESTED_STATE"
|
||||
printf "\n"
|
||||
} > "$RUN_COMMAND"
|
||||
|
||||
{
|
||||
sha256sum -- "$CONFIG_FILE"
|
||||
sha256sum -- "$RUN_CONFIG"
|
||||
sha256sum -- "$PATHS_FILE"
|
||||
sha256sum -- "$ENV_FILE"
|
||||
sha256sum -- "${BASH_SOURCE[0]}"
|
||||
} > "$RUN_HASHES"
|
||||
|
||||
printf "============================================================\n"
|
||||
printf "MARTe2 COMMON RUNNER\n"
|
||||
printf "============================================================\n"
|
||||
printf "Scenario: %s\n" "$SCENARIO_ID"
|
||||
printf "Configurazione: %s\n" "$RUN_CONFIG"
|
||||
printf "Stato: %s\n" "$REQUESTED_STATE"
|
||||
printf "Durata: %s secondi\n" "$DURATION_SECONDS"
|
||||
printf "Run directory: %s\n" "$RUN_DIR"
|
||||
printf "Placeholder: %s sostituzioni\n" "$PLACEHOLDER_COUNT"
|
||||
printf "\n"
|
||||
|
||||
set +e
|
||||
|
||||
timeout \
|
||||
--signal=INT \
|
||||
--kill-after=2s \
|
||||
"${DURATION_SECONDS}s" \
|
||||
"$MARTE_APP" \
|
||||
-l RealTimeLoader \
|
||||
-f "$RUN_CONFIG" \
|
||||
-s "$REQUESTED_STATE" \
|
||||
2>&1 |
|
||||
tee "$RUN_LOG"
|
||||
|
||||
PIPE_CODES=("${PIPESTATUS[@]}")
|
||||
|
||||
set -e
|
||||
|
||||
MARTE_EXIT_CODE="${PIPE_CODES[0]}"
|
||||
TEE_EXIT_CODE="${PIPE_CODES[1]}"
|
||||
|
||||
{
|
||||
printf "============================================================\n"
|
||||
printf "RIEPILOGO COMMON RUNNER\n"
|
||||
printf "============================================================\n"
|
||||
printf "Data: %s\n" "$(date --iso-8601=seconds)"
|
||||
printf "Scenario: %s\n" "$SCENARIO_ID"
|
||||
printf "Configurazione fonte: %s\n" "$CONFIG_FILE"
|
||||
printf "Configurazione usata: %s\n" "$RUN_CONFIG"
|
||||
printf "Stato richiesto: %s\n" "$REQUESTED_STATE"
|
||||
printf "Durata richiesta: %s secondi\n" "$DURATION_SECONDS"
|
||||
printf "Placeholder sostituiti: %s\n" "$PLACEHOLDER_COUNT"
|
||||
printf "Exit code MARTe: %s\n" "$MARTE_EXIT_CODE"
|
||||
printf "Exit code tee: %s\n" "$TEE_EXIT_CODE"
|
||||
printf "Run log: %s\n" "$RUN_LOG"
|
||||
printf "Hash: %s\n" "$RUN_HASHES"
|
||||
printf "Comando: %s\n" "$RUN_COMMAND"
|
||||
} | tee "$RUN_SUMMARY"
|
||||
|
||||
printf "\nRUN_DIR=%s\n" "$RUN_DIR"
|
||||
|
||||
if [ "$TEE_EXIT_CODE" -ne 0 ]; then
|
||||
printf "ERRORE DURANTE LA SCRITTURA DEL LOG.\n" >&2
|
||||
exit 30
|
||||
fi
|
||||
|
||||
exit 0
|
||||
Reference in New Issue
Block a user