Browse Source

динамическая модель для статистики

devel
bashmak 9 years ago
parent
commit
0cfaf34e0f
  1. 45
      statistics/models.py

45
statistics/models.py

@ -1,18 +1,47 @@
import math
from django.db import models
from django.utils import timezone
from mydefs import MyGenericIPAddressField
from .fields import UnixDateTimeField
class StatElem(models.Model):
src_ip = MyGenericIPAddressField()
dst_ip = MyGenericIPAddressField()
proto = models.PositiveSmallIntegerField(default=0)
src_port = models.PositiveIntegerField(default=0)
dst_port = models.PositiveIntegerField(default=0)
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:
db_table = 'flowstat'
abstract = True
def getModel():
class DynamicStatElem(StatElem):
class Meta:
db_table = 'flowstat_%s' % timezone.now().strftime("%d%m%Y")
abstract = False
return DynamicStatElem
Loading…
Cancel
Save