星号CDR数据库的正确CDR收集过程

时间:2017-10-23 05:27:16

标签: database asterisk

首先抱歉这个复杂的长期问题解释。

目前我正在维护几个处理呼叫的asterisk服务器。目前我每小时收集CDR到集中式数据库。

此处的主要问题是跟踪copied条记录和new条记录。在我的设置中,每个asterisk CDR表都有id列作为主键。因此,在集中表格中,我应对此id并保留一列以保留server_name。通过同时使用idserver_name,我可以识别每个id服务器的最后收集asterisk个号码,然后收集所有高于CDR的{​​{1}}个id {1}}数字。

这个过程并不完美,因为依靠id永远不会增加。此外,我还需要将此设置转换为REST API并停止使用id

使用datetime范围来挑选通话记录也不是一个好主意,因为我每小时收集一次CDR以及如果有duration持续通话超过1小时该怎么办? 。 Asterisk CDR在通话结束时插入记录,datetime字段并不总是按升序排列。

我可以使用名为copied标记并使用datetime范围以上并解决丢失的记录问题,但它不适合REST APT,因为它是for lines in line: data = line.strip().split("\t") name, sex, number = data print ("{0}\t{1}".format(name, number)) 无状态并且无法保留标记

现在我已经没有想法......并且想知道是否有更好的解决方案...

希望有些专家可以帮助我...

1 个答案:

答案 0 :(得分:0)

这是一个非常具体的场景,但无论如何我将在这里发布我的解决方案。

在分析了一些解决方案后,我想出了一个解决方案。我添加了名为inserttime的新列,默认值为CURRENT_TIMESTAMP(如果您使用postgres,则可能需要查看statement_timestamp())。因此inserttime将像id和时间变量一样,我可以使用API使用日期范围搜索CDR