#usage: show_upload_spikes.py [factor default 5]
import os
import sys
import statistics

baseDir = "/usr/local/www/apache24/data/of/gdata"
factor = float(sys.argv[1]) if len(sys.argv) > 1 else 5.0
top = 200

files = [f for f in os.listdir(baseDir) if f.startswith("S_")]
total = len(files)
results = []

for i, fname in enumerate(files, 1):
    ip = fname[2:]
    path = os.path.join(baseDir, fname)
    with open(path, "rb") as f:
        lines = f.readlines()[-144:]
    values = []
    for line in lines:
        parts = line.decode().strip().split(";")
        if len(parts) < 2:
            continue
        values.append(int(parts[1]))
    if values:
        avg = statistics.mean(values)
        spikes = [v for v in values if v > avg * factor]
        if spikes:
            maxSpike = max(spikes)
            mbit = (maxSpike * 8) / 300 / 1e6
            results.append((ip, len(spikes), mbit))

    percent = (i / total) * 100
    print(f"[{i}/{total}] {percent:.1f}% {fname}", end="\r")

print("\n")
if results:
    results.sort(key=lambda x: (x[1], x[2]), reverse=True)
    print(f"{'IP':<20}{'Spikes':<10}{'Max speed (Mbit/s)':<20}")
    for ip, count, speed in results[:top]:
        print(f"{ip:<20}{count:<10}{speed:<20.2f}")
