diff --git a/Analytics.md b/Analytics.md new file mode 100644 index 0000000..f920beb --- /dev/null +++ b/Analytics.md @@ -0,0 +1,26 @@ +# Performance Analytics +## Day01 +| Language | Status | Real Time | User Time | Sys Time | +| --- | --- | --- | --- | --- | +| Python | 0 | 0m0,071s | 0m0,060s | 0m0,008s | +| Rust | 0 | 0m0,078s | 0m0,052s | 0m0,026s | +| JavaScript | 0 | 0m0,089s | 0m0,085s | 0m0,012s | +| TypeScript | 0 | 0m1,001s | 0m2,188s | 0m0,158s | +## Day02 +| Language | Status | Real Time | User Time | Sys Time | +| --- | --- | --- | --- | --- | +| Python | 0 | 0m0,032s | 0m0,016s | 0m0,016s | +| Rust | 0 | 0m0,063s | 0m0,044s | 0m0,020s | +| JavaScript | 0 | 0m0,044s | 0m0,032s | 0m0,012s | +| TypeScript | 0 | 0m1,013s | 0m2,059s | 0m0,160s | +## Day03 +| Language | Status | Real Time | User Time | Sys Time | +| --- | --- | --- | --- | --- | +| Python | 0 | 0m0,054s | 0m0,043s | 0m0,011s | +| Rust | 0 | 0m0,059s | 0m0,032s | 0m0,024s | +| JavaScript | 0 | 0m0,067s | 0m0,036s | 0m0,032s | +| TypeScript | 0 | 0m1,014s | 0m2,128s | 0m0,155s | +## Day04 +| Language | Status | Real Time | User Time | Sys Time | +| --- | --- | --- | --- | --- | +| Python | 0 | 0m16,137s | 0m16,020s | 0m0,117s | diff --git a/Day01/rust/Cargo.toml b/Day01/rust/Cargo.toml index 6ecc1cd..1ec6963 100644 --- a/Day01/rust/Cargo.toml +++ b/Day01/rust/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "rust_solution_01" +name = "rust" version = "0.1.0" edition = "2021" diff --git a/measure_performance.sh b/measure_performance.sh new file mode 100755 index 0000000..49f214a --- /dev/null +++ b/measure_performance.sh @@ -0,0 +1,94 @@ +#!/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" + + local real_time="" + local user_time="" + local sys_time="" + local EXEC_STATUS="" + + cd "$script_dir" + if [ "$language" == "Rust" ]; then + if [ -d "$script_dir" ]; then + exec 3>&1 4>&2 + TIME_RESULT=$( { time $runner 1>&3 2>&4; } 2>&1 ) + EXEC_STATUS=$? + exec 3>&- 4>&- + + 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 | $EXEC_STATUS | $real_time | $user_time | $sys_time |" >> "$ROOT_DIR/$ANALYTICS_FILE" + else + echo "| $language | rust not executable | - | - | - |" >> "$ROOT_DIR/$ANALYTICS_FILE" + echo "Warning: $language script for $day not found or not executable" + fi + else + if [ -f "$script_name" ]; then + exec 3>&1 4>&2 + TIME_RESULT=$( { time $runner $script_name 1>&3 2>&4; } 2>&1 ) + EXEC_STATUS=$? + exec 3>&- 4>&- + + 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 | $EXEC_STATUS | $real_time | $user_time | $sys_time |" >> "$ROOT_DIR/$ANALYTICS_FILE" + else + echo "| $language | Not Found or Not Executable | - | - | - |" >> "$ROOT_DIR/$ANALYTICS_FILE" + echo "Warning: $language script for $day not found or not executable" + fi + fi + cd "$ROOT_DIR" +} + +# Loop through each DayXX folder +for day_folder in $ROOT_DIR/Day*/; do + day=$(basename "$day_folder") + echo "\n## $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."