确定最新连续日期的开始时间



这是我 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对象添加到数据库中。

我想生成一份报告,说明在过去 - 例如 - 10 分钟("超时"期间)看到了哪些设备(或 MAC 地址)。对于这些设备,我还想指定最新的事件何时开始 - 即设备的最新首次出现时间。我可以在不拉取给定 MAC 的所有 SeenEvents 的情况下实现这一点吗?

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

我会说保持简单,使用 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]

您可以在SeenEvent上执行原始 sql 查询(过滤器要容易得多),以获取过去 10 分钟的事件。然后获得哪些是连续的(我假设这就是你所说的链)。请参阅有关列的连续值的答案。

如何根据列的值找到连续的行?

最新更新