+ if new_maxexemptrate != (self.Maxi2Rate * 1000):
+ # Format template parameters for high bandwidth message
+ params['class'] = "high bandwidth"
+ params['bytes'] = format_bytes(usedi2bytes - self.i2bytes)
+ params['limit'] = format_bytes(self.Maxi2KByte * 1024)
+ params['new_maxrate'] = bwlimit.format_tc_rate(new_maxexemptrate)
+
+ message += template % params
+ logger.log("bwmon: ** %(slice)s %(class)s capped at %(new_maxrate)s/s " % params)
+
+ # Notify slice
+ if self.emailed == False:
+ subject = "pl_mom capped bandwidth of slice %(slice)s on %(hostname)s" % params
+ if DEBUG:
+ logger.log("bwmon: "+ subject)
+ logger.log("bwmon: "+ message + (footer % params))
+ else:
+ self.emailed = True
+ logger.log("bwmon: Emailing %s" % self.name)
+ slicemail(self.name, subject, message + (footer % params))
+
+
+ def update(self, runningmaxrate, runningmaxi2rate, usedbytes, usedi2bytes, runningshare, rspec):
+ """
+ Update byte counts and check if byte thresholds have been
+ exceeded. If exceeded, cap to remaining bytes in limit over remaining time in period.
+ Recalculate every time module runs.
+ """
+
+ # copy self.Min* and self.*share values for comparison later.
+ runningMinRate = self.MinRate
+ runningMini2Rate = self.Mini2Rate
+ runningshare = self.Share
+ runningsharei2 = self.Sharei2
+
+ # Query Node Manager for max rate overrides
+ self.updateSliceAttributes(rspec)
+
+ # Check limits.