#!/bin/bash

# Analyze GPU metrics from monitoring logs

METRICS_FILE="${1}"

if [ -z "$METRICS_FILE" ] || [ ! -f "$METRICS_FILE" ]; then
    echo "Usage: $0 <metrics_log_file>"
    echo "Analyzes GPU metrics from monitor_gpu.sh output"
    exit 1
fi

echo "========================================"
echo "GPU Metrics Analysis"
echo "File: $METRICS_FILE"
echo "========================================"
echo ""

# Basic statistics
TOTAL_SAMPLES=$(awk 'END {print NR-1}' "$METRICS_FILE")
echo "Total samples: $TOTAL_SAMPLES"

if [ "$TOTAL_SAMPLES" -eq 0 ]; then
    echo "No data to analyze"
    exit 1
fi

# Calculate duration
START_TIME=$(awk -F', ' 'NR==2 {print $1}' "$METRICS_FILE")
END_TIME=$(awk -F', ' 'END {print $1}' "$METRICS_FILE")
echo "Start time: $START_TIME"
echo "End time: $END_TIME"
echo ""

echo "GPU Utilization (SM %)"
echo "----------------------"
awk -F', ' 'NR>1 {
    sum+=$4; count++
    if ($4>max || NR==2) max=$4
    if ($4<min || NR==2) min=$4
} END {
    if (count>0) {
        printf "Average: %.1f%%\n", sum/count
        printf "Peak:    %.0f%%\n", max
        printf "Minimum: %.0f%%\n", min
    }
}' "$METRICS_FILE"

echo ""
echo "Memory Usage (%)"
echo "---------------"
awk -F', ' 'NR>1 {
    sum+=$5; count++
    if ($5>max || NR==2) max=$5
    if ($5<min || NR==2) min=$5
} END {
    if (count>0) {
        printf "Average: %.1f%%\n", sum/count
        printf "Peak:    %.0f%%\n", max
        printf "Minimum: %.0f%%\n", min
    }
}' "$METRICS_FILE"

echo ""
echo "VRAM Usage (MB)"
echo "---------------"
awk -F', ' 'NR>1 {
    sum+=$6; count++
    if ($6>max || NR==2) max=$6
    if ($6<min || NR==2) min=$6
} END {
    if (count>0) {
        printf "Average: %.0f MB\n", sum/count
        printf "Peak:    %d MB\n", max
        printf "Minimum: %d MB\n", min
    }
}' "$METRICS_FILE"

echo ""
echo "Power Consumption (W)"
echo "--------------------"
awk -F', ' 'NR>1 {
    sum+=$2; count++
    if ($2>max || NR==2) max=$2
    if ($2<min || NR==2) min=$2
} END {
    if (count>0) {
        printf "Average: %.0f W\n", sum/count
        printf "Peak:    %.0f W\n", max
        printf "Minimum: %.0f W\n", min
    }
}' "$METRICS_FILE"

echo ""
echo "Temperature (°C)"
echo "----------------"
awk -F', ' 'NR>1 {
    sum+=$3; count++
    if ($3>max || NR==2) max=$3
    if ($3<min || NR==2) min=$3
} END {
    if (count>0) {
        printf "Average: %.0f°C\n", sum/count
        printf "Peak:    %.0f°C\n", max
        printf "Minimum: %.0f°C\n", min
    }
}' "$METRICS_FILE"

echo ""
echo "Utilization Distribution"
echo "------------------------"
echo "GPU % ranges:"
awk -F', ' 'NR>1 {
    gpu=$4
    if (gpu==0) idle++
    else if (gpu<=25) low++
    else if (gpu<=50) medium++
    else if (gpu<=75) high++
    else veryhigh++
    total++
} END {
    printf "  0%%     (idle):     %d samples (%.1f%%)\n", idle, idle*100/total
    printf "  1-25%%  (low):      %d samples (%.1f%%)\n", low, low*100/total
    printf "  26-50%% (medium):   %d samples (%.1f%%)\n", medium, medium*100/total
    printf "  51-75%% (high):     %d samples (%.1f%%)\n", high, high*100/total
    printf "  76-100%% (very high): %d samples (%.1f%%)\n", veryhigh, veryhigh*100/total
}' "$METRICS_FILE"

echo ""
echo "========================================"
