通过在SNMP OID上正确订购



我已经搜索并尝试了很多东西,但是找不到解决方案。

我在数据库中存储一些SNMP OID,并在带有数据表的表中显示它们。

我希望以正确的顺序显示OID,因此:

1.3.6.1.2.1.1
1.3.6.1.2.1.10
1.3.6.1.2.1.2

正确顺序将是:

1.3.6.1.2.1.1
1.3.6.1.2.1.2
1.3.6.1.2.1.10

sql查询带有订单的订单,在存储OID字符串的列上会订购它们:

1.3.6.1.2.1.1
1.3.6.1.2.1.10
1.3.6.1.2.1.2

我使用的是使用PHP或Python烧瓶的Serveride Processing。目前,我自己正在用烧瓶建造桌子,并写了一个功能,通过将OID转换为元组和分类来订购它们。这有效,但我想使用DataTables获得分页和响应能力。

要注意的一件事是OID的长度没有限制。

任何想法都将不胜感激。

这是一种黑客,但可能会起作用。如果OID中的每个元素都有最大值<100,然后在数据库中创建第二列,其中每个元素都会转换为2位0填充的值:

real_oid           sorting_oid
1.3.6.1.2.1.1      01.03.06.01.02.01.01
1.3.6.1.2.1.10     01.03.06.01.02.01.10
1.3.6.1.2.1.2      01.03.06.01.02.01.02

一旦测试都在工作。

,您甚至可以消除节省空间的时间。

首先在周期中拆分字符串,然后将字符串打入int。然后使用sortedoperator.itemgetter通过多个属性进行排序。然后使用一段时间重新加入。如下:

original_oids = [...]
split_and_typecast_oids = [map(int, oid.split(".")) for oid in original_oids]
sorted_oids = sorted(split_and_typecast_oids, operator.itemgetter(1,2,3,4,5,6,7))
rejoined_oids = [".".join(map(str, oid)) for oid in sorted_oids]

最新更新