# 1.5 Mbit or 16.4 GB per day
#default_avgexemptrate = 1500000
-# 4 Gbyte per day. 4 * 1024K * 1024M * 1024G
-default_ByteThresh = 4294967296
+# 5.4 Gbyte per day. 5.4 * 1024M * 1024G kbytes
# 5.4 Gbyte per day max allowed transfered per recording period
-default_ByteMax = 5798205850
-# 14 Gbyte per day
-default_ExemptByteThresh = 15032385536
+default_ByteMax = 5662310
+default_ByteThresh = int(.8 * default_ByteMax)
# 16.4 Gbyte per day max allowed transfered per recording period to I2
-default_ExemptByteMax = 17609365914
+default_ExemptByteMax = 17196646
+default_ExemptByteThresh = int(.8 * default_ExemptByteMax)
# Average over 1 day
ByteThresh - After thresh, cap node to (maxbyte - bytes)/(time left in period)
ExemptByteMax - Same as above, but for i2.
ExemptByteThresh - i2 ByteThresh
+ maxrate - max_rate slice attribute.
+ maxexemptrate - max_exempt_rate slice attribute.
"""
try:
vals = nm.query(self.name,
[('nm_net_max_rate', self.maxrate),
- ('nm_net_max_exempt_rate', self.maxexemptrate)])
- (self.maxrate, self.maxexemptrate) = vals
+ ('nm_net_max_exempt_rate', self.maxexemptrate),
+ ("nm_net_max_byte", self.ByteMax),
+ ("nm_net_max_exempt_byte", self.ExemptByteMax),
+ ("nm_net_max_thresh_byte", int( .8 * self.ByteMax)),
+ ("nm_net_max_thresh_exempt_byte", int(.8 * self.ExemptByteMax)),
+ ("nm_net_avg_rate", 0),
+ ("nm_net_avg_exempt_rate", 0)])
+
+ (self.maxrate,
+ self.maxexemptrate,
+ self.ByteMax,
+ self.ExemptByteMax,
+ self.ByteThresh,
+ self.ExemptByteThresh,
+ avgrate,
+ avgexemptrate) = vals
+
+ if (avgrate != 0) or (avgexemptrate != 0):
+ self.ByteMax = avgrate * period
+ self.ByteThresh = int(self.ByteMax * .8)
+ self.ExemptByteMax = avgexemptrate * period
+ self.ExemptByteThresh = int(self.ExemptByteMax * .8)
except Exception, err:
print "Warning: Exception received while querying NM:", err
'date': time.asctime(time.gmtime()) + " GMT",
'period': format_period(period)}
- print("byts %s self.bytes %s ByteThresh %s" %(bytes, self.bytes, self.ByteThresh))
- if bytes >= (self.bytes + self.ByteThresh):
- new_maxrate = int(self.ByteMax - self.ByteThresh)/(period - (time.time() - self.time))
+ if bytes >= (self.bytes + (self.ByteThresh * 1024)):
+ new_maxrate = \
+ int(((self.ByteMax * 1024) - self.bytes + bytes)/(period - time.time() - self.time))
else:
new_maxrate = maxrate
params['class'] = "low bandwidth"
params['bytes'] = format_bytes(bytes - self.bytes)
params['maxrate'] = bwlimit.format_tc_rate(maxrate)
- params['limit'] = format_bytes(self.ByteMax)
+ params['limit'] = format_bytes(int(self.ByteMax * 1024))
params['new_maxrate'] = bwlimit.format_tc_rate(new_maxrate)
if verbose:
print "%(slice)s %(class)s " \
- "%(bytes)s, %(limit)s (%(new_maxrate)s maxrate)" % \
+ "%(bytes)s of %(limit)s (%(new_maxrate)s maxrate)" % \
params
# Cap low bandwidth burst rate
message += template % params
print "%(slice)s %(class)s capped at %(new_maxrate)s " % params
- if exemptbytes >= (self.exemptbytes + self.ExemptByteThresh):
+ if exemptbytes >= (self.exemptbytes + (self.ExemptByteThresh * 1024)):
new_maxexemptrate = \
- int((self.ExemptByteMax - self.ExemptByteThresh)/(period - (time.time() - self.time)))
+ int(((self.ExemptByteMax * 1024) - (self.bytes + bytes))/(period - (time.time() - self.time)))
else:
new_maxexemptrate = maxexemptrate
params['class'] = "high bandwidth"
params['bytes'] = format_bytes(exemptbytes - self.exemptbytes)
params['maxrate'] = bwlimit.format_tc_rate(maxexemptrate)
- params['limit'] = format_bytes(self.ExemptByteMax)
+ params['limit'] = format_bytes(self.ExemptByteMax * 1024)
params['new_maxrate'] = bwlimit.format_tc_rate(new_maxexemptrate)
if verbose:
print "%(slice)s %(class)s " \
- "%(bytes)s, %(limit)s (%(new_maxrate)s avg)" % params
+ "%(bytes)s of %(limit)s (%(new_maxrate)s maxrate)" % params
# Cap high bandwidth burst rate
if new_maxexemptrate != maxexemptrate:
live.append(xid)
if verbose:
- print("\n%s, minrate %s, maxrate %s, minexemptrate %s,"\
+ print("\nRunning stats for %s"\
+ "\n minrate %s, maxrate %s, minexemptrate %s,"\
" maxexemptrate %s, bytes %s, exemptbytes %s" % \
(bwlimit.get_slice(xid),
bwlimit.format_tc_rate(minrate),