+ # Cap low bandwidth burst rate
+ message += template % params
+ logger.log("bwmon: ** %(slice)s %(class)s capped at %(new_maxrate)s/s " % params)
+
+ 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, runningrates, 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.
+ """
+ # cache share for later comparison
+ runningrates['share'] = self.Share
+
+ # Query Node Manager for max rate overrides
+ self.updateSliceAttributes(rspec)
+
+ usedbytes = runningrates['usedbytes']
+ usedi2bytes = runningrates['usedi2bytes']
+
+ # Check limits.