summaryrefslogtreecommitdiff
path: root/mirror-weekly.sh
blob: 7a5c134eafb9d2efb262e9f06b0f3328f143970d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#!/bin/bash
# mirror-weekly.sh
# Summarize weekly client activity across Alma, Rocky, Arch, Gentoo

LOGDIR="/var/log/nginx/"
OUTDIR="/var/log/mirrors"
OUTFILE="$OUTDIR/mirror-weekly-$(date +%F).log"

mkdir -p "$OUTDIR"

echo "=== Mirror Weekly Summary ($(date)) ===" > "$OUTFILE"

# Which distros to track (pattern, label)
declare -A DISTROS=(
  [alma]="alma AlmaLinux"
  [rocky]="rocky RockyLinux"
  [archlinux]="arch ArchLinux"
  [gentoo]="gentoo Gentoo"
)

for key in "${!DISTROS[@]}"; do
  label=${DISTROS[$key]}
  echo "" >> "$OUTFILE"
  echo "=== $label ===" >> "$OUTFILE"

  # Requests + unique clients
  awk -v pat="$key" '
  $7 ~ pat {
    reqs++
    ips[$1]=1
  }
  END {
    printf "%d requests, %d unique clients\n", reqs, length(ips)
  }' "$LOGDIR"/stygian_access.log >> "$OUTFILE"

  # Top 5 IPs
  awk -v pat="$key" '
  $7 ~ pat { count[$1]++ }
  END {
    for (ip in count) print count[ip], ip
  }' "$LOGDIR"/stygian_access.log | sort -nr | head -n 5 >> "$OUTFILE"
done

echo "" >> "$OUTFILE"
echo "=== Totals Across All Distros ===" >> "$OUTFILE"

awk '$7 ~ /(alma|rocky|archlinux|gentoo)/ {
  total++
  ips[$1]=1
}
END {
  printf "%d requests across all, %d unique clients total\n", total, length(ips)
}' "$LOGDIR"/stygian_access.log >> "$OUTFILE"