def __init__(self, period, metric=None): ProxiedMetric.__init__(self, metric) self.period = period self.lastData = None self.percentChange = PercentChange(metric) self._addMetric(self.percentChange) self.changes = list() self.val = None
class PercentRank(ProxiedMetric): def __init__(self, period, metric=None): ProxiedMetric.__init__(self, metric) self.period = period self.lastData = None self.percentChange = PercentChange(metric) self._addMetric(self.percentChange) self.changes = list() self.val = None def ready(self): if self.val == None: return False else: return True def value(self): return self.val def handle(self, perioddata): ProxiedMetric.handle(self, perioddata) if self.percentChange.ready(): nextchg = self.percentChange.value() if len(self.changes) == self.period: # have enough to calculate value, do it now before storing our latest value count = 0.0 for pc in self.changes: if pc < nextchg: count = count + 1.0 self.val = 100 * (count / float(self.period)) self.changes.append(nextchg) if len(self.changes) > self.period: self.changes = self.changes[len(self.changes) - self.period:] pass def recommendedPreload(self): return ProxiedMetric.recommendedPreload(self) + self.period
class PercentRank(ProxiedMetric): def __init__(self, period, metric=None): ProxiedMetric.__init__(self, metric) self.period = period self.lastData = None self.percentChange = PercentChange(metric) self._addMetric(self.percentChange) self.changes = list() self.val = None def ready(self): if self.val == None: return False else: return True def value(self): return self.val def handle(self, perioddata): ProxiedMetric.handle(self, perioddata) if self.percentChange.ready(): nextchg = self.percentChange.value() if len (self.changes) == self.period: # have enough to calculate value, do it now before storing our latest value count = 0.0 for pc in self.changes: if pc < nextchg: count = count+1.0 self.val = 100*(count/float(self.period)) self.changes.append(nextchg) if len(self.changes) > self.period: self.changes = self.changes[len(self.changes)-self.period:] pass def recommendedPreload(self): return ProxiedMetric.recommendedPreload(self) + self.period