From: Johannes Truschnigg Date: Fri, 18 Mar 2022 15:34:21 +0000 (+0100) Subject: Implement dialog-based configuration recommendation X-Git-Url: https://johannes.truschnigg.info/gitweb/?a=commitdiff_plain;h=1a0ca542a193f97cfc1f5857d162bf3fb1352ad1;p=sqm_lagthrottle Implement dialog-based configuration recommendation --- diff --git a/config_suggest b/config_suggest index 25b019f..88ede24 100755 --- a/config_suggest +++ b/config_suggest @@ -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}"