S03-H3 CLOSED baseline
This commit is contained in:
@@ -0,0 +1,88 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Determina la directory common indipendentemente dalla directory corrente.
|
||||
MARTE_COMMON_DIR="$(
|
||||
cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 &&
|
||||
pwd
|
||||
)"
|
||||
|
||||
# Carica i percorsi canonici della benchmark suite.
|
||||
source "$MARTE_COMMON_DIR/paths.sh"
|
||||
|
||||
# Directory contenenti le librerie richieste dagli scenari S00, S01 e S02.
|
||||
MARTE2_CORE_LIB_DIR="$MARTE2_ROOT/Build/$MARTE_TARGET/Core"
|
||||
LINUX_TIMER_LIB_DIR="$MARTE2_COMPONENTS_ROOT/Build/$MARTE_TARGET/Components/DataSources/LinuxTimer"
|
||||
LOGGER_DATA_SOURCE_LIB_DIR="$MARTE2_COMPONENTS_ROOT/Build/$MARTE_TARGET/Components/DataSources/LoggerDataSource"
|
||||
FILE_DATA_SOURCE_LIB_DIR="$MARTE2_COMPONENTS_ROOT/Build/$MARTE_TARGET/Components/DataSources/FileDataSource"
|
||||
IOGAM_LIB_DIR="$MARTE2_COMPONENTS_ROOT/Build/$MARTE_TARGET/Components/GAMs/IOGAM"
|
||||
|
||||
# Librerie che devono essere presenti.
|
||||
MARTE2_CORE_LIB="$MARTE2_CORE_LIB_DIR/MARTe2.so"
|
||||
LINUX_TIMER_LIB="$LINUX_TIMER_LIB_DIR/LinuxTimer.so"
|
||||
LOGGER_DATA_SOURCE_LIB="$LOGGER_DATA_SOURCE_LIB_DIR/LoggerDataSource.so"
|
||||
FILE_DATA_SOURCE_LIB="$FILE_DATA_SOURCE_LIB_DIR/FileDataSource.so"
|
||||
IOGAM_LIB="$IOGAM_LIB_DIR/IOGAM.so"
|
||||
|
||||
# Verifica delle directory runtime.
|
||||
for marte_runtime_dir in \
|
||||
"$MARTE2_CORE_LIB_DIR" \
|
||||
"$LINUX_TIMER_LIB_DIR" \
|
||||
"$LOGGER_DATA_SOURCE_LIB_DIR" \
|
||||
"$FILE_DATA_SOURCE_LIB_DIR" \
|
||||
"$IOGAM_LIB_DIR"
|
||||
do
|
||||
if [ ! -d "$marte_runtime_dir" ]; then
|
||||
printf "DIRECTORY RUNTIME ASSENTE: %s\n" "$marte_runtime_dir" >&2
|
||||
return 2 2>/dev/null || exit 2
|
||||
fi
|
||||
done
|
||||
|
||||
# Verifica delle librerie runtime.
|
||||
for marte_runtime_lib in \
|
||||
"$MARTE2_CORE_LIB" \
|
||||
"$LINUX_TIMER_LIB" \
|
||||
"$LOGGER_DATA_SOURCE_LIB" \
|
||||
"$FILE_DATA_SOURCE_LIB" \
|
||||
"$IOGAM_LIB"
|
||||
do
|
||||
if [ ! -f "$marte_runtime_lib" ]; then
|
||||
printf "LIBRERIA RUNTIME ASSENTE: %s\n" "$marte_runtime_lib" >&2
|
||||
return 3 2>/dev/null || exit 3
|
||||
fi
|
||||
done
|
||||
|
||||
# Inserisce una directory allinizio di LD_LIBRARY_PATH solo se non è già presente.
|
||||
marte_prepend_library_path() {
|
||||
marte_directory="$1"
|
||||
|
||||
case ":${LD_LIBRARY_PATH-}:" in
|
||||
*":${marte_directory}:"*)
|
||||
;;
|
||||
*)
|
||||
if [ -n "${LD_LIBRARY_PATH-}" ]; then
|
||||
LD_LIBRARY_PATH="${marte_directory}:${LD_LIBRARY_PATH}"
|
||||
else
|
||||
LD_LIBRARY_PATH="${marte_directory}"
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
# Ordine inverso perché ogni voce viene inserita in testa.
|
||||
marte_prepend_library_path "$FILE_DATA_SOURCE_LIB_DIR"
|
||||
marte_prepend_library_path "$IOGAM_LIB_DIR"
|
||||
marte_prepend_library_path "$LOGGER_DATA_SOURCE_LIB_DIR"
|
||||
marte_prepend_library_path "$LINUX_TIMER_LIB_DIR"
|
||||
marte_prepend_library_path "$MARTE2_CORE_LIB_DIR"
|
||||
|
||||
export MARTE2_CORE_LIB_DIR
|
||||
export LINUX_TIMER_LIB_DIR
|
||||
export LOGGER_DATA_SOURCE_LIB_DIR
|
||||
export FILE_DATA_SOURCE_LIB_DIR
|
||||
export IOGAM_LIB_DIR
|
||||
export LD_LIBRARY_PATH
|
||||
|
||||
unset marte_runtime_dir
|
||||
unset marte_runtime_lib
|
||||
unset marte_directory
|
||||
unset -f marte_prepend_library_path
|
||||
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
|
||||
@@ -0,0 +1,36 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Percorso padre dei repository e della benchmark suite.
|
||||
MARTE_ROOT="/home/dariodf/Scrivania/MARTE"
|
||||
|
||||
# Repository esterni usati dalla benchmark suite.
|
||||
MARTE2_ROOT="$MARTE_ROOT/MARTe2"
|
||||
MARTE2_COMPONENTS_ROOT="$MARTE_ROOT/MARTe2-components"
|
||||
MARTE_DEBUG_ROOT="$MARTE_ROOT/marte-debug"
|
||||
|
||||
# Directory principale della nuova infrastruttura di test.
|
||||
BENCHMARK_SUITE_ROOT="$MARTE_ROOT/marte-benchmark-suite"
|
||||
|
||||
# Target di compilazione attualmente utilizzato.
|
||||
MARTE_TARGET="x86-linux"
|
||||
|
||||
# Eseguibile MARTe2.
|
||||
MARTE_APP="$MARTE2_ROOT/Build/$MARTE_TARGET/App/MARTeApp.ex"
|
||||
|
||||
# Directory delle configurazioni.
|
||||
CONFIGURATIONS_ROOT="$BENCHMARK_SUITE_ROOT/configurations"
|
||||
BASELINES_ROOT="$CONFIGURATIONS_ROOT/baselines"
|
||||
GENERATED_CONFIGURATIONS_ROOT="$CONFIGURATIONS_ROOT/generated"
|
||||
|
||||
# Configurazioni attualmente disponibili.
|
||||
OFFICIAL_HELLOWORLD_CONFIG="$BASELINES_ROOT/RTApp-HelloWorld-2-solution.cfg"
|
||||
S00_CONFIG="$GENERATED_CONFIGURATIONS_ROOT/S00/smoke_s0_core.marte"
|
||||
S01_CONFIG="$GENERATED_CONFIGURATIONS_ROOT/S01/smoke_s1_timing.marte"
|
||||
|
||||
# Directory operative della suite.
|
||||
SCENARIOS_ROOT="$BENCHMARK_SUITE_ROOT/scenarios"
|
||||
PATCHERS_ROOT="$BENCHMARK_SUITE_ROOT/patchers"
|
||||
RUNS_ROOT="$BENCHMARK_SUITE_ROOT/runs"
|
||||
ANALYSIS_ROOT="$BENCHMARK_SUITE_ROOT/analysis"
|
||||
LOGGING_ROOT="$BENCHMARK_SUITE_ROOT/logging"
|
||||
ARCHIVE_ROOT="$BENCHMARK_SUITE_ROOT/archive"
|
||||
Reference in New Issue
Block a user