]> johannes.truschnigg.info Git - sqm_lagthrottle/commitdiff
Implement dialog-based configuration recommendation
authorJohannes Truschnigg <johannes@truschnigg.info>
Fri, 18 Mar 2022 15:34:21 +0000 (16:34 +0100)
committerJohannes Truschnigg <johannes@truschnigg.info>
Fri, 18 Mar 2022 15:34:21 +0000 (16:34 +0100)
config_suggest

index 25b019f74315f5f4552356c73417a6a36eea7008..88ede2471818da5d25daa8f33bc6106d109abae1 100755 (executable)
@@ -1,15 +1,42 @@
 #!/bin/sh
-
 fpo="/tmp/fping_${$}.out"
+sto="${fpo}.stats"
 POTENTIAL_PING_PEERS='1.1.1.1 8.8.8.8 9.9.9.9 a.root-servers.net b.root-servers.net c.root-servers.net d.root-servers.net e.root-servers.net f.root-servers.net g.root-servers.net h.root-servers.net i.root-servers.net j.root-servers.net k.root-servers.net l.root-servers.net m.root-servers.net'
 
 set -u
 
-echo "Pinging potential peers... please stand by and keep your Internet-directed traffic at a minimum."
+echo "This script will ping potential peers for two minutes," >&2
+echo "record stats, and recommend configuration values for lagdetect.sh" >&2
+echo "" >&2
+echo "Please keep your Internet-directed traffic at a minimum while pinging." >&2
+echo "" >&2
+echo "Hit the [ENTER] key when ready, or [CTRL]+[C] to abort..." >&2
+read _
+printf 'Performing pings, please be patient...' >&2
+#set -x
+
+(
+  s=0
+  while [ $s -lt 100 ]
+  do
+    sleep 10
+    printf '..' >&2
+    let s+=10
+  done
+) &
+
+fping --addr --count=480 --period=250 --retry=0 --size=1280 ${POTENTIAL_PING_PEERS} >"${fpo}" 2>&1
 
-fping --addr --count=48 --period=250 --retry=0 --size=1280 ${POTENTIAL_PING_PEERS} >"${fpo}" 2>&1
+wait
 
-awk -v "outfile=${fpo}" '
+echo "" >&2
+echo "Pings done. Computed settings follow:" >&2
+echo "" >&2
+echo "" >&2
+
+set -e
+
+awk -v "outfile=${sto}" '
 /^[^ ].* 0% loss/ {
   peers_records[$1]++
   peers_totalms[$1] += $6
@@ -23,23 +50,45 @@ awk -v "outfile=${fpo}" '
 }
 
 END {
-  cmd_stats = "sort -nr > " outfile ".stats"
+  cmd_stats = "sort -n > " outfile
   for (p in peers_loss)
   {
-    print "TIMEOUT " p " miss=" peers_loss[p]
+    print "TIMEOUT " p " miss=" peers_loss[p]
   }
   for (p in peers_totalms)
   {
     alat = peers_totalms[p] / peers_records[p]
     stdev = sqrt((peers_squarems[p] - peers_totalms[p] ^ 2 / peers_records[p])/peers_records[p])
+    stdevs += stdev
+    peercnt++
     if (peers_loss[$1] < 2) {
       printf("%5.2f stdev avg %-5.1f min %-5.1f max %-5.1f %s\n", stdev, alat, peers_min[p], peers_max[p], p) | cmd_stats
     }
   }
+  printf("FUDGE_MS=%.1f\n", 2 + (2.5 * stdevs/peercnt))
   for (p in peers_pinglist)
   {
     #print p " " peers_pinglist[p]
   }
 }' "${fpo}"
 
-cat "${fpo}".stats
+awk '
+{
+  if(NR<5) {
+    peers[NR]=$NF
+  }
+}
+
+END {
+  printf "PING_PEERS=\""
+  for (p in peers) {
+    if(peers[p+1] == "") {
+      printf("%s", peers[p])
+    } else {
+      printf("%s ", peers[p])
+    }
+  }
+  printf "\"\n"
+}' "${sto}"
+
+rm -f "${fpo}" "${sto}"