确定最近的连续日期是什么时候开始的?

2024-10-03 09:15:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我的意思是型号.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地址)。对于这些设备,我还想指定最新连续事件的开始时间,即设备最新的首次出现时间。我能做到这一点没有拉所有seenvents为给定的mac?你知道吗

我的一个想法是在SeenEvent中创建streak\u id—在添加新事件之前,Unix守护进程将看到Mac最后一次出现的时间,如果发生在10分钟前,则为新创建的事件分配一个新的*group\u id*计数器。这是个好主意吗?你知道吗


Tags: modelmodelsdevicemac地址时间事件length
2条回答

您可以在SeenEvent上执行raw sql查询(过滤器更容易),以获取过去10分钟的事件,然后获取连续的事件(我假设这就是您对chain的意思)。有关列的连续值,请参见此答案。你知道吗

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

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

相关问题 更多 >