def setUp(self): super(TestKeyStore, self).setUp() self.kv = KeyStore(CharField()) self.ordered_kv = KeyStore(CharField(), ordered=True) self.pickled_kv = PickledKeyStore(ordered=True) self.json_kv = JSONKeyStore(ordered=True) self.kv.clear() self.json_kv.clear()
class GreylistEntry(Model): key = CharField(index=True) timestamp = DateTimeFieldExtend(default=utils.utcnow) expire_time = DateTimeFieldExtend(null=True) rejects = IntegerField(default=0) accepts = IntegerField(default=0) last_state = DateTimeFieldExtend(null=True) delay = FloatField(default=0.0) protocol = KeyStore(TextField()) policy = CharField(max_length=255, default='policy') def accept(self, now=None, expire=35 * 86400): now = now or utils.utcnow() self.accepts += 1 self.last_state = now if self.accepts == 1: value = now - self.timestamp self.delay = round(value.total_seconds(), 2) if not self.expire_time: self.expire_time = now + datetime.timedelta(seconds=expire) self.save() def reject(self, now=None): now = now or utils.utcnow() self.rejects += 1 self.last_state = now self.save() def expire(self, delta=60, now=None): now = now or utils.utcnow() expire_date = self.timestamp + datetime.timedelta(seconds=delta) value = expire_date - now return round(value.total_seconds(), 2) @classmethod def create_entry(cls, key=None, protocol=None, policy='default', timestamp=None, last_state=None, now=None, **kwargs): now = now or utils.utcnow() with database_proxy.transaction(): return cls.create(key=key, rejects=1, timestamp=timestamp or now, last_state=last_state or now, policy=policy, protocol=protocol, **kwargs) @classmethod def search_entry(cls, key=None, now=None): """ expire_time is None or greater than or equal to now AND key == key """ now = now or utils.utcnow() try: return cls.select().where(( (cls.expire_time == None) | (cls.expire_time > now)) & (cls.key == key)).get() except: pass @classmethod def last_metrics(cls): last_24_hours = arrow.utcnow().replace(hours=-24).datetime objects = cls.select().where(cls.timestamp >= last_24_hours) count = objects.count() if count == 0: return last_1_hour = arrow.utcnow().replace(hours=-1).datetime accepted = cls.select(fn.Sum( cls.accepts)).where(cls.timestamp >= last_24_hours) rejected = cls.select(fn.Sum( cls.rejects)).where(cls.timestamp >= last_24_hours) delay = cls.select(fn.Avg(cls.delay)).where( cls.timestamp >= last_24_hours, cls.accepts >= 0, cls.delay >= 0) metrics = { 'count': count, 'accepted': accepted or 0, 'rejected': rejected or 0, 'delay': delay or 0.0, 'abandoned': objects.filter(cls.accepts == 0, cls.timestamp <= last_1_hour).count(), #'count_accepts': objects.filter(accepts__gte=1).count(), } metrics['requests'] = metrics['accepted'] + metrics['rejected'] return metrics def __unicode__(self): return self.key class Meta: # noqa database = database_proxy order_by = ('-timestamp', )
def setUp(self): self.db = PostgresqlDatabase('peewee_test') self.kv = KeyStore(CharField(), ordered=True, database=self.db) self.kv.clear()
def set_k(): kv_t = KeyStore(CharField()) kv_t['b'] = 'yyy'
def setUp(self): super(KeyStoreTestCase, self).setUp() self.kv = KeyStore(CharField()) self.ordered_kv = KeyStore(CharField(), ordered=True) self.pickled_kv = PickledKeyStore(ordered=True) self.kv.clear()
def setUp(self): self.kv = KeyStore(CharField()) self.ordered_kv = KeyStore(CharField(), ordered=True) self.pickled_kv = PickledKeyStore(ordered=True) self.kv.clear()
def setUp(self): self.kv = KeyStore(CharField(), ordered=True, database=db) self.kv.clear()