使用Django创建类似于OpenNMS或任何类似网络管理工具的应用程序的最佳方法是什么?
Django应用程序需要不断轮询1个或多个设备,每个设备都有1个或多个模拟和数字输入。
基本上,如何将必要的轮询功能集成到django应用程序中,以便在轮询设备传感器时,将结果值存储在Django ORM中,以便用户可以拉出正在记录的数据的图形、图表等?
Django不是做这种事情的合适基础吗?我正在轮询的嵌入式设备具有python API,用于设置事件处理程序,或者在需要时仅轮询当前正在读取的对象。(http://www.phidgets.com)
最终目标是这个Django站点驻留在PhidgetSBC上,然后可以通过网络轻松地访问和控制。传感器数值的轮询和存储需要全天候运行,除非web用户通过Django站点上的"device admin area“明确禁用。
我现在不担心图表,输出引脚上的控制设备等,因为将数据可靠地放入数据库是最重要的。我不认为我创建的当前python包能够很好地移植到Django上,所以我宁愿从头开始,正确地开始。
谢谢
发布于 2011-01-19 07:49:04
您如何处理数据日志记录实际上取决于您希望如何呈现数据。但是,除非您只对实时显示感兴趣(即没有图表),否则任何负责日志记录的代码都必须在HTTP请求/响应周期之外运行,因此也必须在Django之外运行。
也许最直接的方法是编写一个在后台运行的单独的python脚本,该脚本将定期轮询phidget API并将数据转储到DB中。这种方法的一个潜在主要问题是,传感器配置本质上是硬编码的-如果您希望添加或删除传感器,则必须更改python脚本。这可能对您的应用程序很重要,也可能不重要。
为了更好地将脚本检索到的数据集成到Django中,您可以创建几个这样的模型:
class Device(models.Model):
"""A sensor"""
name = models.CharField(max_length=20)
...
class DataPoint(models.Model):
value = models.DecimalField(decimal_places=2, max_digits=10) # whatever is appropriate
timestamp = models.DateTimeField()
device = models.ForiegnKey(Device)运行syncdb时,您可以看到将要创建的表名。它应该是这样的:
appname_device
appname_data_point然后,您的后台脚本将在appname_data_point表中创建记录,然后可以通过Django ORM访问这些记录。
https://stackoverflow.com/questions/4728779
复制相似问题