如何通过 Asterisk 1.8.5 中的 cdr_adaptive_odbc.so 模块启用 CDR 日志记录?
我正在
- 运行带有 CEL 和 CDR 的 Asterisk 1.8.5
- 通过ODBC(连接到 MySQL)
。 CEL 工作正常(见下文),但 CDR 无法通过自适应 ODBC 工作。 (顺便说一句,标准 ODBC 和直接 MySQL 写入适用于 CDR。)
星号可以找到 CEL 的正确表和列。亲自看看:
dev-lt-tk1*CLI> core set verbose 99
Verbosity is at least 99
dev-lt-tk1*CLI> module reload cel_odbc.so
-- Reloading module 'cel_odbc.so' (ODBC CEL backend)
== Parsing '/opt/gemeinschaft/etc/asterisk/cel_odbc.conf': == Found
-- Found CEL table cel@odbc-voipstat101.
> Found id column with type 4 with len 10, octetlen 10, and numlen (0,10)
> Found eventtype column with type 12 with len 30, octetlen 30, and numlen (0,0)
> Found eventtime column with type 93 with len 19, octetlen 19, and numlen (0,10)
> Found userdeftype column with type 12 with len 255, octetlen 255, and numlen (0,0)
> Found cid_name column with type 12 with len 80, octetlen 80, and numlen (0,0)
> Found cid_num column with type 12 with len 80, octetlen 80, and numlen (0,0)
> Found cid_ani column with type 12 with len 80, octetlen 80, and numlen (0,0)
> Found cid_rdnis column with type 12 with len 80, octetlen 80, and numlen (0,0)
> Found cid_dnid column with type 12 with len 80, octetlen 80, and numlen (0,0)
> Found exten column with type 12 with len 80, octetlen 80, and numlen (0,0)
> Found context column with type 12 with len 80, octetlen 80, and numlen (0,0)
> Found channame column with type 12 with len 80, octetlen 80, and numlen (0,0)
> Found appname column with type 12 with len 80, octetlen 80, and numlen (0,0)
> Found appdata column with type 12 with len 80, octetlen 80, and numlen (0,0)
> Found accountcode column with type 12 with len 20, octetlen 20, and numlen (0,0)
> Found peeraccount column with type 12 with len 20, octetlen 20, and numlen (0,0)
> Found uniqueid column with type 12 with len 150, octetlen 150, and numlen (0,0)
> Found linkedid column with type 12 with len 150, octetlen 150, and numlen (0,0)
> Found amaflags column with type 4 with len 10, octetlen 10, and numlen (0,10)
> Found userfield column with type 12 with len 255, octetlen 255, and numlen (0,0)
> Found peer column with type 12 with len 80, octetlen 80, and numlen (0,0)
这是我的 CEL 表结构:
mysql> describe cel;
+-------------+--------------+------+-----+-------------------+-----------------------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+--------------+------+-----+-------------------+-----------------------------+
| id | int(30) | NO | PRI | NULL | auto_increment |
| eventtype | varchar(30) | NO | | NULL | |
| eventtime | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
| userdeftype | varchar(255) | NO | | NULL | |
| cid_name | varchar(80) | NO | | NULL | |
| cid_num | varchar(80) | NO | | NULL | |
| cid_ani | varchar(80) | NO | | NULL | |
| cid_rdnis | varchar(80) | NO | | NULL | |
| cid_dnid | varchar(80) | NO | | NULL | |
| exten | varchar(80) | NO | | NULL | |
| context | varchar(80) | NO | | NULL | |
| channame | varchar(80) | NO | | NULL | |
| appname | varchar(80) | NO | | NULL | |
| appdata | varchar(80) | NO | | NULL | |
| accountcode | varchar(20) | NO | | NULL | |
| peeraccount | varchar(20) | NO | | NULL | |
| uniqueid | varchar(150) | NO | | NULL | |
| linkedid | varchar(150) | NO | | NULL | |
| amaflags | int(11) | NO | | NULL | |
| userfield | varchar(255) | NO | | NULL | |
| peer | varchar(80) | NO | | NULL | |
+-------------+--------------+------+-----+-------------------+-----------------------------+
21 rows in set (0.00 sec)
问题:
现在,当我使用 cdr_adaptive_odbc 时,加载模块时会得到这些奇怪的结果。列类型无法与 SQL 列类型匹配。
dev-lt-tk1*CLI> module reload cdr_adaptive_odbc.so
-- Reloading module 'cdr_adaptive_odbc.so' (Adaptive ODBC CDR backend)
== Parsing '/opt/gemeinschaft/etc/asterisk/cdr_adaptive_odbc.conf': == Found
-- Found adaptive CDR table ast_cdr@odbc-voipstat101.
> Found _id column with type 4 with len 10, octetlen 10, and numlen (0,10)
> Found calldate column with type 93 with len 19, octetlen 19, and numlen (0,10)
> Found uniqueid column with type -9 with len 32, octetlen 32, and numlen (0,0)
> Found clid column with type -9 with len 80, octetlen 240, and numlen (0,0)
> Found src column with type -9 with len 30, octetlen 30, and numlen (0,0)
> Found dst column with type -9 with len 30, octetlen 30, and numlen (0,0)
> Found dcontext column with type -9 with len 50, octetlen 50, and numlen (0,0)
> Found channel column with type -9 with len 60, octetlen 60, and numlen (0,0)
> Found dstchannel column with type -9 with len 60, octetlen 60, and numlen (0,0)
> Found lastapp column with type -9 with len 30, octetlen 30, and numlen (0,0)
> Found lastdata column with type -9 with len 80, octetlen 80, and numlen (0,0)
> Found duration column with type 4 with len 8, octetlen 8, and numlen (0,10)
> Found billsec column with type 4 with len 8, octetlen 8, and numlen (0,10)
> Found disposition column with type -9 with len 15, octetlen 15, and numlen (0,0)
> Found amaflags column with type -6 with len 3, octetlen 3, and numlen (0,10)
> Found accountcode column with type -9 with len 25, octetlen 25, and numlen (0,0)
> Found userfield column with type -9 with len 255, octetlen 255, and numlen (0,0)
> Found sequence column with type -8 with len 32, octetlen 32, and numlen (0,0)
> Found linkedid column with type -8 with len 32, octetlen 32, and numlen (0,0)
这是我们的 CDR 表结构:
mysql> describe ast_cdr;
+-------------+-----------------------+------+-----+-------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+-----------------------+------+-----+-------------------+----------------+
| _id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| calldate | timestamp | NO | MUL | CURRENT_TIMESTAMP | |
| uniqueid | varchar(32) | NO | MUL | NULL | |
| clid | varchar(80) | NO | | | |
| src | varchar(30) | NO | MUL | | |
| dst | varchar(30) | NO | MUL | | |
| dcontext | varchar(50) | NO | | | |
| channel | varchar(60) | NO | | | |
| dstchannel | varchar(60) | NO | | | |
| lastapp | varchar(30) | NO | | | |
| lastdata | varchar(80) | NO | | | |
| duration | mediumint(8) unsigned | NO | | 0 | |
| billsec | mediumint(8) unsigned | NO | | 0 | |
| disposition | varchar(15) | NO | | | |
| amaflags | tinyint(3) unsigned | NO | | 0 | |
| accountcode | varchar(25) | NO | MUL | | |
| userfield | varchar(255) | NO | | | |
| sequence | char(32) | YES | | NULL | |
| linkedid | char(32) | YES | | NULL | |
+-------------+-----------------------+------+-----+-------------------+----------------+
19 rows in set (0.00 sec)
有人知道为什么会发生这种情况吗?我研究了 cel_odbc.c 和 cdr_adaptive_odbc.c 源代码,它们似乎大量复制粘贴。
I am running
- an Asterisk 1.8.5 with CEL and CDR via
- ODBC (connected to MySQL).
The CEL works fine (see below) but the CDR is not working via adaptive ODBC. (Standard ODBC and direct MySQL writing is working for CDR btw.)
The asterisk can find the correct table and columns for CEL. See for yourself:
dev-lt-tk1*CLI> core set verbose 99
Verbosity is at least 99
dev-lt-tk1*CLI> module reload cel_odbc.so
-- Reloading module 'cel_odbc.so' (ODBC CEL backend)
== Parsing '/opt/gemeinschaft/etc/asterisk/cel_odbc.conf': == Found
-- Found CEL table cel@odbc-voipstat101.
> Found id column with type 4 with len 10, octetlen 10, and numlen (0,10)
> Found eventtype column with type 12 with len 30, octetlen 30, and numlen (0,0)
> Found eventtime column with type 93 with len 19, octetlen 19, and numlen (0,10)
> Found userdeftype column with type 12 with len 255, octetlen 255, and numlen (0,0)
> Found cid_name column with type 12 with len 80, octetlen 80, and numlen (0,0)
> Found cid_num column with type 12 with len 80, octetlen 80, and numlen (0,0)
> Found cid_ani column with type 12 with len 80, octetlen 80, and numlen (0,0)
> Found cid_rdnis column with type 12 with len 80, octetlen 80, and numlen (0,0)
> Found cid_dnid column with type 12 with len 80, octetlen 80, and numlen (0,0)
> Found exten column with type 12 with len 80, octetlen 80, and numlen (0,0)
> Found context column with type 12 with len 80, octetlen 80, and numlen (0,0)
> Found channame column with type 12 with len 80, octetlen 80, and numlen (0,0)
> Found appname column with type 12 with len 80, octetlen 80, and numlen (0,0)
> Found appdata column with type 12 with len 80, octetlen 80, and numlen (0,0)
> Found accountcode column with type 12 with len 20, octetlen 20, and numlen (0,0)
> Found peeraccount column with type 12 with len 20, octetlen 20, and numlen (0,0)
> Found uniqueid column with type 12 with len 150, octetlen 150, and numlen (0,0)
> Found linkedid column with type 12 with len 150, octetlen 150, and numlen (0,0)
> Found amaflags column with type 4 with len 10, octetlen 10, and numlen (0,10)
> Found userfield column with type 12 with len 255, octetlen 255, and numlen (0,0)
> Found peer column with type 12 with len 80, octetlen 80, and numlen (0,0)
Here's my table structure for CEL:
mysql> describe cel;
+-------------+--------------+------+-----+-------------------+-----------------------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+--------------+------+-----+-------------------+-----------------------------+
| id | int(30) | NO | PRI | NULL | auto_increment |
| eventtype | varchar(30) | NO | | NULL | |
| eventtime | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
| userdeftype | varchar(255) | NO | | NULL | |
| cid_name | varchar(80) | NO | | NULL | |
| cid_num | varchar(80) | NO | | NULL | |
| cid_ani | varchar(80) | NO | | NULL | |
| cid_rdnis | varchar(80) | NO | | NULL | |
| cid_dnid | varchar(80) | NO | | NULL | |
| exten | varchar(80) | NO | | NULL | |
| context | varchar(80) | NO | | NULL | |
| channame | varchar(80) | NO | | NULL | |
| appname | varchar(80) | NO | | NULL | |
| appdata | varchar(80) | NO | | NULL | |
| accountcode | varchar(20) | NO | | NULL | |
| peeraccount | varchar(20) | NO | | NULL | |
| uniqueid | varchar(150) | NO | | NULL | |
| linkedid | varchar(150) | NO | | NULL | |
| amaflags | int(11) | NO | | NULL | |
| userfield | varchar(255) | NO | | NULL | |
| peer | varchar(80) | NO | | NULL | |
+-------------+--------------+------+-----+-------------------+-----------------------------+
21 rows in set (0.00 sec)
THE PROBLEM:
Now when I use cdr_adaptive_odbc I get these strange results when loading the module. The column type cannot be matched to an SQL column type.
dev-lt-tk1*CLI> module reload cdr_adaptive_odbc.so
-- Reloading module 'cdr_adaptive_odbc.so' (Adaptive ODBC CDR backend)
== Parsing '/opt/gemeinschaft/etc/asterisk/cdr_adaptive_odbc.conf': == Found
-- Found adaptive CDR table ast_cdr@odbc-voipstat101.
> Found _id column with type 4 with len 10, octetlen 10, and numlen (0,10)
> Found calldate column with type 93 with len 19, octetlen 19, and numlen (0,10)
> Found uniqueid column with type -9 with len 32, octetlen 32, and numlen (0,0)
> Found clid column with type -9 with len 80, octetlen 240, and numlen (0,0)
> Found src column with type -9 with len 30, octetlen 30, and numlen (0,0)
> Found dst column with type -9 with len 30, octetlen 30, and numlen (0,0)
> Found dcontext column with type -9 with len 50, octetlen 50, and numlen (0,0)
> Found channel column with type -9 with len 60, octetlen 60, and numlen (0,0)
> Found dstchannel column with type -9 with len 60, octetlen 60, and numlen (0,0)
> Found lastapp column with type -9 with len 30, octetlen 30, and numlen (0,0)
> Found lastdata column with type -9 with len 80, octetlen 80, and numlen (0,0)
> Found duration column with type 4 with len 8, octetlen 8, and numlen (0,10)
> Found billsec column with type 4 with len 8, octetlen 8, and numlen (0,10)
> Found disposition column with type -9 with len 15, octetlen 15, and numlen (0,0)
> Found amaflags column with type -6 with len 3, octetlen 3, and numlen (0,10)
> Found accountcode column with type -9 with len 25, octetlen 25, and numlen (0,0)
> Found userfield column with type -9 with len 255, octetlen 255, and numlen (0,0)
> Found sequence column with type -8 with len 32, octetlen 32, and numlen (0,0)
> Found linkedid column with type -8 with len 32, octetlen 32, and numlen (0,0)
Here's our CDR table structure:
mysql> describe ast_cdr;
+-------------+-----------------------+------+-----+-------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+-----------------------+------+-----+-------------------+----------------+
| _id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| calldate | timestamp | NO | MUL | CURRENT_TIMESTAMP | |
| uniqueid | varchar(32) | NO | MUL | NULL | |
| clid | varchar(80) | NO | | | |
| src | varchar(30) | NO | MUL | | |
| dst | varchar(30) | NO | MUL | | |
| dcontext | varchar(50) | NO | | | |
| channel | varchar(60) | NO | | | |
| dstchannel | varchar(60) | NO | | | |
| lastapp | varchar(30) | NO | | | |
| lastdata | varchar(80) | NO | | | |
| duration | mediumint(8) unsigned | NO | | 0 | |
| billsec | mediumint(8) unsigned | NO | | 0 | |
| disposition | varchar(15) | NO | | | |
| amaflags | tinyint(3) unsigned | NO | | 0 | |
| accountcode | varchar(25) | NO | MUL | | |
| userfield | varchar(255) | NO | | | |
| sequence | char(32) | YES | | NULL | |
| linkedid | char(32) | YES | | NULL | |
+-------------+-----------------------+------+-----+-------------------+----------------+
19 rows in set (0.00 sec)
Does anybody know why this happens? I've looked into the cel_odbc.c and cdr_adaptive_odbc.c sources and they seem heavily copy pasted.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
现在 CDR 自适应 ODBC 正在工作!我必须删除 SQL 表中的所有字符集:
这是旧表:
这是新表:
以下是重要的差异(感谢 #asterisk 上的 wdoekes2):
现在,可以重新加载 CDR 自适应 ODBC 模块:
Now CDR adaptive ODBC is working! I had to remove all the charsets in my SQL table:
This one is the old table:
This is the new table:
Here are the differences that matter (thanks to wdoekes2 on #asterisk):
Now, reloading the CDR adaptive ODBC module works: