以下是我的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 *计数器。这是个好主意吗?
答案 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?