78 lines
2.8 KiB
Bash
Executable File
78 lines
2.8 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Root directory where DayXX folders are located
|
|
ROOT_DIR="$(pwd)"
|
|
|
|
# Prepare Analytics.md file in the root directory
|
|
ANALYTICS_FILE="Analytics.md"
|
|
echo "# Performance Analytics" > $ANALYTICS_FILE
|
|
|
|
# Function to measure and append execution time to the analytics file
|
|
measure_execution_time() {
|
|
local day=$1
|
|
local language=$2
|
|
local script_dir=$3
|
|
local script_name=$4
|
|
local runner=$5
|
|
|
|
echo "Running $language script for $day: $runner $script_dir$script_name"
|
|
|
|
cd "$script_dir"
|
|
if [ -f "$script_name" ] || [ "$language" == "Rust" ]; then
|
|
exec 3>&1 4>&2
|
|
TIME_RESULT=$( { time $runner $script_name 1>&3 2>&4; } 2>&1 )
|
|
EXEC_STATUS=$?
|
|
exec 3>&- 4>&-
|
|
|
|
if [ $EXEC_STATUS -eq 0 ]; then
|
|
real_time=$(echo "$TIME_RESULT" | grep real | awk '{print $2}')
|
|
user_time=$(echo "$TIME_RESULT" | grep user | awk '{print $2}')
|
|
sys_time=$(echo "$TIME_RESULT" | grep sys | awk '{print $2}')
|
|
|
|
echo "| $language | Success | $real_time | $user_time | $sys_time |" >> "$ROOT_DIR/$ANALYTICS_FILE"
|
|
else
|
|
echo "| $language | Failed | - | - | - |" >> "$ROOT_DIR/$ANALYTICS_FILE"
|
|
echo "Warning: $language script for $day failed with status $EXEC_STATUS"
|
|
fi
|
|
else
|
|
echo "| $language | Not Found or Not Executable | - | - | - |" >> "$ROOT_DIR/$ANALYTICS_FILE"
|
|
echo "Warning: $language script for $day not found or not executable"
|
|
fi
|
|
cd "$ROOT_DIR"
|
|
}
|
|
|
|
# Loop through each DayXX folder
|
|
for day_folder in $ROOT_DIR/Day*/; do
|
|
day=$(basename "$day_folder")
|
|
echo "" >> $ANALYTICS_FILE
|
|
echo "## $day" >> $ANALYTICS_FILE
|
|
echo "| Language | Status | Real Time | User Time | Sys Time |" >> $ANALYTICS_FILE
|
|
echo "| --- | --- | --- | --- | --- |" >> $ANALYTICS_FILE
|
|
|
|
# Python
|
|
measure_execution_time "$day" "Python" "${day_folder}python/" "solution2.py" "python3"
|
|
|
|
# Rust
|
|
RUST_PROJECT_DIR="${day_folder}rust"
|
|
if [ ! -d "$RUST_PROJECT_DIR" ]; then
|
|
echo "Rust project directory not found for $day."
|
|
echo "| Rust | Directory Not Found | - | - | - |" >> "$ROOT_DIR/$ANALYTICS_FILE"
|
|
else
|
|
if [ ! -f "$RUST_PROJECT_DIR/target/release/rust" ]; then
|
|
echo "Compiled Rust binary not found. Building the Rust project in $RUST_PROJECT_DIR..."
|
|
(cd "$RUST_PROJECT_DIR" && cargo build --release)
|
|
fi
|
|
measure_execution_time "$day" "Rust" "$RUST_PROJECT_DIR" "" "cargo run --release"
|
|
fi
|
|
|
|
# JavaScript
|
|
measure_execution_time "$day" "JavaScript" "${day_folder}js/" "solution.js" "node"
|
|
|
|
# TypeScript
|
|
measure_execution_time "$day" "TypeScript" "${day_folder}ts/" "solution.ts" "ts-node"
|
|
|
|
echo "Processed $day"
|
|
done
|
|
|
|
echo "Performance measurement complete. Results are saved in $ANALYTICS_FILE."
|