def _delta_usage_maps(self, current_usage, last_usage): """ Calculate the delta between the 2 usage maps and returns a new usage map. """ if len(last_usage) == 0: return current_usage new_usage = {} for key, current in current_usage.items(): last = last_usage.get(key, None) if last is not None: rec = RuleRecord() rec.MergeFrom(current) # copy metadata if current.bytes_rx < last.bytes_rx or \ current.bytes_tx < last.bytes_tx: self.logger.error( 'Resetting usage for rule %s, for subscriber %s, ' 'current usage(rx/tx) %d/%d, last usage %d/%d', rec.sid, rec.rule_id, current.bytes_rx, current.bytes_tx, last.bytes_rx, last.bytes_tx) rec.bytes_rx = last.bytes_rx rec.bytes_tx = last.bytes_tx else: rec.bytes_rx = current.bytes_rx - last.bytes_rx rec.bytes_tx = current.bytes_tx - last.bytes_tx new_usage[key] = rec else: new_usage[key] = current return new_usage
def _merge_usage_maps(current_usage, last_usage): """ Merge the usage records from 2 map into a single map """ if len(last_usage) == 0: return current_usage new_usage = {} for key, current in current_usage.items(): last = last_usage.get(key, None) if last is not None: rec = RuleRecord() rec.MergeFrom(current) # copy metadata rec.bytes_rx = current.bytes_rx + last.bytes_rx rec.bytes_tx = current.bytes_tx + last.bytes_tx new_usage[key] = rec else: new_usage[key] = current return new_usage
def _delta_usage_maps(current_usage, last_usage): """ Calculate the delta between the 2 usage maps and returns a new usage map. """ if len(last_usage) == 0: return current_usage new_usage = {} for key, current in current_usage.items(): last = last_usage.get(key, None) if last is not None: rec = RuleRecord() rec.MergeFrom(current) # copy metadata rec.bytes_rx = current.bytes_rx - last.bytes_rx rec.bytes_tx = current.bytes_tx - last.bytes_tx new_usage[key] = rec else: new_usage[key] = current return new_usage