确定最新的连胜日期何时开始?

时间:2013-12-20 19:05:33

标签: python django

以下是我的models.py以最简化的形式显示的内容:

from django.db import models

class Device(models.Model):
    description = models.CharField(max_length=30)
    ignored = models.BooleanField()

class Mac(models.Model):
    mac = models.CharField(max_length=17, primary_key=True)
    device = models.ForeignKey('Device')

class SeenEvent(models.Model):
    mac = models.ForeignKey('Mac')
    date = models.DateTimeField()

SeenEvent模型中,我记录了查看特定MAC地址的时间。 Unix守护程序会定期扫描网络,然后将SeenEvent个对象添加到数据库中。

我想生成一个报告,显示最后看到的设备(或MAC地址) - 例如 - 10分钟(“超时”期间)。对于这些设备,我还想指定何时开始最新的连续事件 - 即该设备的最新首次出现的时间。如果不为给定的MAC提取所有SeenEvent,我能实现这一目标吗?

我的一个想法依赖于在SeenEvent中创建streak_id - 在添加新事件之前,Unix守护程序会看到最后一次看到Mac的时间 - 如果它发生在10分钟以前,为新创建的事件分配新的* group_id *计数器。这是个好主意吗?

2 个答案:

答案 0 :(得分:0)

我会说保持简单,使用django和python功能按日期排序并回复你需要的任何内容,例如:

from datetime import datetime, timedelta

time_threshold = datetime.now() - timedelta(minutes=10)
result = SeenEvent.objects.filter(date__gt=time_threshold).order_by('-date')[0]

答案 1 :(得分:0)

您可以在SeenEvent上执行raw sql查询(过滤更容易),以获取最近10分钟的事件。然后获得哪些是连续的(我假设你的意思是链)。有关列的连续值,请参阅此答案。

How to find consecutive rows based on the value of a column?