import math from django.db import models from django.utils import timezone from mydefs import MyGenericIPAddressField from .fields import UnixDateTimeField class StatElem(models.Model): cur_time = UnixDateTimeField(primary_key=True) ip = MyGenericIPAddressField() octets = models.PositiveIntegerField(default=0) packets = models.PositiveIntegerField(default=0) @staticmethod def percentile(N, percent, key=lambda x:x): """ Find the percentile of a list of values. @parameter N - is a list of values. Note N MUST BE already sorted. @parameter percent - a float value from 0.0 to 1.0. @parameter key - optional key function to compute value from each element of N. @return - the percentile of the values """ if not N: return None k = (len(N)-1) * percent f = math.floor(k) c = math.ceil(k) if f == c: return key(N[int(k)]) d0 = key(N[int(f)]) * (c-k) d1 = key(N[int(c)]) * (k-f) return d0+d1 class Meta: abstract = True def getModel(): class DynamicStatElem(StatElem): class Meta: db_table = 'flowstat_%s' % timezone.now().strftime("%d%m%Y") abstract = False return DynamicStatElem