+ def sabotage(me):
+ """Sabotage the peer, for testing purposes."""
+ me._sabotage = True
+ if me._timer: me._timer.kill()
+ T.defer(me._time)
+
+ def info(me):
+ if not me._nping:
+ mean = sd = '-'
+ else:
+ mean = me._sigma_t/me._nping
+ sd = sqrt(me._sigma_t2/me._nping - mean*mean)
+ n = me._nping + me._nlost
+ if not n: pclost = '-'
+ else: pclost = '%d' % ((100*me._nlost + n//2)//n)
+ return { 'last-ping': me._last,
+ 'mean-ping': '%.1fms' % mean,
+ 'sd-ping': '%.1fms' % sd,
+ 'n-ping': '%d' % me._nping,
+ 'n-lost': '%d' % me._nlost,
+ 'percent-lost': pclost,
+ 'min-ping': '%.1fms' % me._min,
+ 'max-ping': '%.1fms' % me._max,
+ 'state': me._timer and 'idle' or 'check',
+ 'failures': me._failures }
+