From 5c2ace06f891c4acb67b2f9060db92c919ded03a Mon Sep 17 00:00:00 2001 From: Peter Hinch Date: Wed, 15 Jul 2020 07:33:30 +0100 Subject: [PATCH] sequence/check_mid.py Fix bugs. --- sequence/check_mid.py | 48 +++++++++++++++++++++++++++---------------- 1 file changed, 30 insertions(+), 18 deletions(-) diff --git a/sequence/check_mid.py b/sequence/check_mid.py index d49f645..c1ce5fa 100644 --- a/sequence/check_mid.py +++ b/sequence/check_mid.py @@ -12,41 +12,53 @@ # message is missing after n have been received, it is assumed lost. class CheckMid: - def __init__(self, buff=10): + def __init__(self, buff=15): self._buff = buff self._mids = set() - self.miss = 0 # Count missing message ID's - self.dupe = 0 # Duplicates - self.oord = 0 # Received out of order + self._miss = 0 # Count missing message ID's + self._dupe = 0 # Duplicates + self._oord = 0 # Received out of order self.bcnt = 0 # Client reboot count. Running totals over reboots: - self.tot_miss = 0 # Missing - self.tot_dupe = 0 # Dupes - self.tot_oord = 0 # Out of order + self._tot_miss = 0 # Missing + self._tot_dupe = 0 # Dupes + self._tot_oord = 0 # Out of order + + @property + def miss(self): + return self._miss + self._tot_miss + + @property + def dupe(self): + return self._dupe + self._tot_dupe + + @property + def oord(self): + return self._oord + self._tot_oord def __call__(self, mid): mids = self._mids if mid <= 1 and len(mids) > 1: # Target has rebooted self._mids.clear() - self.tot_miss += self.miss - self.tot_dupe += self.dupe - self.tot_oord += self.oord - self.miss = 0 - self.dupe = 0 - self.oord = 0 + self._tot_miss += self._miss + self._tot_dupe += self._dupe + self._tot_oord += self._oord + self._miss = 0 + self._dupe = 0 + self._oord = 0 self.bcnt += 1 if mid in mids: - self.dupe += 1 + self._dupe += 1 elif mids and mid < max(mids): - self.oord += 1 + self._oord += 1 mids.add(mid) if len(mids) > self._buff: oldest = min(mids) mids.remove(oldest) - self.miss += min(mids) - oldest - 1 + self._miss += min(mids) - oldest - 1 # Usage/demo -#cm = CheckMid() -#s1 = (1,2,3,4,5,8,9,10,11,12,13,17,17,16,18,19,20,21,22,23,24,29,28,27,26,30,31,32,33,34,35,36) +#cm = CheckMid(5) +#s1 = (1,2,3,4,5,8,9,10,11,12,13,17,17,16,18,19,20,21,22,23,24,29,28,27,26,30,31,32,33,34,35,36,1,2,3,4,5,6,7,8) #for x in s1: #cm(x) #print(cm.dupe, cm.miss, cm.oord, cm.bcnt)