按SNMP oid正确排序

时间:2019-03-05 14:55:11

标签: php mysql python-3.x datatables sqlalchemy

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

我正在将一些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

在存储OID字符串的列上使用order by的SQL查询将对它们进行排序:

1.3.6.1.2.1.1
1.3.6.1.2.1.10
1.3.6.1.2.1.2

我正在通过PHP或最好是python flask使用服务器端处理。目前,我是在flask中自己构建表,并编写了一个函数,该函数通过将OID转换为元组和排序来对其进行排序。这行得通,但我想使用数据表来获得分页和响应能力。

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

任何想法都会受到赞赏。

2 个答案:

答案 0 :(得分:0)

这是一种破解,但它可能有效。如果OID中的每个元素的最大值<100,则在数据库中创建第二列,每个元素都将转换为2位0填充值:

$('#abutton').click(function() {
    $('#abutton').removeClass('off').addClass('on');
    $('#bbutton').removeClass('on').addClass('off');
    $('#cbutton').removeClass('on').addClass('off');
    $('#dbutton').removeClass('on').addClass('off');
    window.scrollTo(0,0);
});

$('#bbutton').click(function() {
    $('#abutton').removeClass('on').addClass('off');
    $('#bbutton').removeClass('off').addClass('on');
    $('#cbutton').removeClass('on').addClass('off');
    $('#dbutton').removeClass('on').addClass('off');
    window.scrollTo(0,0);
});

$('#cbutton').click(function() {
    $('#abutton').removeClass('on').addClass('off');
    $('#bbutton').removeClass('on').addClass('off');
    $('#cbutton').removeClass('off').addClass('on');
    $('#dbutton').removeClass('on').addClass('off');
    window.scrollTo(0,0);
});

$('#dbutton').click(function() {
    $('#abutton').removeClass('on').addClass('off');
    $('#bbutton').removeClass('on').addClass('off');
    $('#cbutton').removeClass('on').addClass('off');
    $('#dbutton').removeClass('off').addClass('on');
    window.scrollTo(0,0);
});

测试通过后,您甚至可以消除时间间隔以节省空间。

答案 1 :(得分:0)

首先在句点上分割字符串,然后将其类型转换为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]