#!/usr/bin/awk -f
BEGIN {
+ print "# INIT=" systime()
print "# THRESHOLD=" THRESHOLD
print "# FUDGE=" FUDGE
print "# PINGSLOTS=" PINGSLOTS
+ print "# BW_MAX=" BW_MAX
+ print "# BW_MIN=" BW_MIN
split(PING_PEERS, pps, " ")
for (pp in pps) {
pn = pps[pp]
seq=$3
bytes=0
lat=9999
- print "TIMEOUT for " pn
+ # XXX TODO what now?
+ process_record(pn, bytes, lat)
+ #print "TIMEOUT for " pn
}
seq=$3
bytes=$4
lat=$6
+ process_record(pn, bytes, lat)
+}
+
+
+function process_record(pn, bytes, lat) {
if (! (pn in slotindex)) {
- print "FATAL: BOGUS PEER: " pn
+ print "FATAL: BOGUS PEER: " pn # XXX really?
exit 1
}
+
+ if (bytes == 0 && lat = 9999) {
+ print "# WARN: TIMEOUT: " pn
+ return 1
+ }
+
#printf("%s %db in %.2fms\n", pn, bytes, lat)
update_pingstats(pn, lat)
- if(have_baseline[pn]) {
- last2avg = (((ping_prev[pn] + lat) / 2.0))
- thresh_fudged = (FUDGE + (ping_avgs[pn] * THRESHOLD))
- if (last2avg > thresh_fudged ) {
- if (lat > ping_prev[pn] && lat > ping_pprev[pn]) {
- print "CONSIDER BW DECREASE # " pn " lat=" lat " prev=" ping_prev[pn] " pprev=" ping_pprev[pn] " avg=" ping_avgs[pn] " min=" ping_min[pn]
- }
- not_increasing_count[pn]=0
- } else {
- if (not_increasing_count[pn] > (5 * PINGSLOTS)) {
- print "CONSIDER BW INCREASE # " pn " lat=" lat " prev=" ping_prev[pn] " pprev=" ping_pprev[pn] " avg=" ping_avgs[pn] " min=" ping_min[pn]
- not_increasing_count[pn]=0
- }
- not_increasing_count[pn]++
- }
- } else {
- # print "NODATA"
+
+ if (have_baseline[pn]) {
+ adjust_bw(pn, lat)
}
+
ping_pprev[pn]=ping_prev[pn]
ping_prev[pn]=lat
}
+function adjust_bw(peername, latency) {
+ last2avg = (((ping_prev[peername] + latency) / 2.0))
+ thresh_fudged = (FUDGE + (ping_avgs[peername] * THRESHOLD))
+ if (last2avg > thresh_fudged ) {
+ if (latency > ping_prev[peername] && latency > ping_pprev[peername]) {
+ print systime() " CONSIDER BW DECREASE # " peername " lat=" latency " prev=" ping_prev[peername] " pprev=" ping_pprev[peername] " avg=" ping_avgs[peername] " min=" ping_min[peername]
+ }
+ not_increasing_count[peername]=0
+ } else {
+ if (not_increasing_count[peername] > (5 * PINGSLOTS)) {
+ print systime() " CONSIDER BW INCREASE # " peername " lat=" latency " prev=" ping_prev[peername] " pprev=" ping_pprev[peername] " avg=" ping_avgs[peername] " min=" ping_min[peername]
+ not_increasing_count[peername]=0
+ }
+ not_increasing_count[peername]++
+ }
+}
+
+
function update_pingstats(peername, latency) {
slotindex[peername]++
pingslot=peername ":" slotindex[peername]