AF
Asterisk Forum
обсуждения телефонии, VoIP и IP-PBX
12разделов
5 423тем
34 385сообщений
← К списку тем

Asterisk+cdr

Newbies/FAQ Forum 19 сообщений 30.08.2010 09:23 - 12.10.2010 08:30
#1 30.08.2010 09:23

Asterisk+cdr


Всем привет !
У меня проблема следующего характера. Есть собранный, установленный и работающий астериск под системой FreeBSD 7.2 RELEASE Asterisk 1.6.0.21.
Астериск собранный с поддержкой postgresql и соответственно весь cdr звонков ложиться в базу. Вот в этом проблема, когда он пытается положить звонок в базу вылетает следующая ошибка

[Aug 30 12:11:55] ERROR[74649] cdr_pgsql.c: cdr_pgsql: Connection may have been lost... attempting to reconnect.
[Aug 30 12:11:55] ERROR[74649] cdr_pgsql.c: cdr_pgsql: Connection reestablished.
[Aug 30 12:11:55] ERROR[74649] cdr_pgsql.c: cdr_pgsql: HARD ERROR! Attempted reconnection failed. DROPPING CALL RECORD!
[Aug 30 12:11:55] ERROR[74649] cdr_pgsql.c: cdr_pgsql: Reason: ERROR: column "service_id" of relation "cdr" does not exist
LINE 1: ... ("calldate","clid","counteragent_id","src","dst","service_i...

Я понимаю что нужно поле service_id, но его в описание полей для таблице cdr'а нет. Так для чего астер пытается туда что-то положить ? В гугле ничего похожего не нашел.

With best, Rinat
#2 30.08.2010 10:37

ну как так?
http://forums.digium.com/viewtopic.php?f=1&t=6991
не важно о чем тема, главное там создается табличка с
service_id Int NOT NULL

Added after 12 minutes:

но вот откуда оно берется - большей вопрос.
не нашел нигде такое...
#3 30.08.2010 10:39

То что там описано принадлежит проекту для MySQL, а вот что на сайте www.asterisk.org в документации:

--------------------------
Now create a table in postgresql for your cdrs

*

CREATE TABLE cdr (
calldate time NOT NULL ,
clid varchar (80) NOT NULL ,
src varchar (80) NOT NULL ,
dst varchar (80) NOT NULL ,
dcontext varchar (80) NOT NULL ,
channel varchar (80) NOT NULL ,
dstchannel varchar (80) NOT NULL ,
lastapp varchar (80) NOT NULL ,
lastdata varchar (80) NOT NULL ,
duration int NOT NULL ,
billsec int NOT NULL ,
disposition varchar (45) NOT NULL ,
amaflags int NOT NULL ,
accountcode varchar (20) NOT NULL ,
uniqueid varchar (150) NOT NULL ,
userfield varchar (255) NOT NULL
);

Здесь я этого поля не вижу.

With best, Rinat.
#4 30.08.2010 10:57

ну мое дело предложить...
не нравится решение - поищите ещё...

Added after 9 minutes:

у вас есть не стандартные поля в таблице, например "counteragent_id". потому нужно искать не стандартные решения.
что у вас в файле cdr.conf ?
#5 30.08.2010 11:09

Да, в таблице cdr есть поле counteragent_id, но оно пустое.

В файле cdr.conf следующие позиции:

[general]
enable=yes
;unanswered = no
;batch=no
;size=100
;time=300
;scheduleronly=no
;safeshutdown=yes
;endbeforehexten=no

[pgsql]
usegmtime=yes
loguniqueid=yes
loguserfield=yes

[csv]
usegmtime=yes
loguniqueid=yes
loguserfield=yes



With best, Rinat.
#6 30.08.2010 11:17

главное что оно не пустое, а что оно есть.
и в запросе в него что то пишется, пусть даже нулевое значение.
1. добавьте требуемое поле в табличку и не будет ругаться.
2. проверьте, всегда ли ругается так, или только при определенном действие.
#7 30.08.2010 11:20

Да при добавлении поля в таблицу ругань перестала, но просто интересно, почему документация расходиться с действительностью ?
Спасибо за ответы.

With best, Rinat.
#8 30.08.2010 11:22

а раньше не возникало такого вопроса? Smile
у вас что то было установлено, или даже сейчас так. и это что то добавило поле в базу. возможно было вручную удалено второе поле.
#9 30.08.2010 11:34

Раньше крутился asterisk-1.4.30. Поэтому проблем не возникало. Поэтому переходя на 1.6 я был уверен, что поля все совпадают. Мое решение исходило от прочтение документации на сайте. А после запуска 1.6 ловлю такие удивительные предложения от астериска. С таблицей user все нормально, а вот с таблицей cdr такие чудеса.

И еще можно один вопрос.
Астер постояно обращается к базе по полю из таблице users regseconds. Вот пример:

[Aug 30 14:33:56] DEBUG[25572] res_config_pgsql.c: Postgresql RealTime: Update SQL: UPDATE users SET ipaddr = 'xxx.xxx.xxx.xxx', port = '5060', regseconds = '1283164496', username = 'yyyyy', fullcontact = 'sip:yyyyy@xxx.xxx.xxx.xxx:5060' WHERE name = 'yyyyy'

Эти обращение уж сильно частые.
Можно как-нимбудь сократить постоянное обращение к базе. Скажем что бы раз в полчаса или хотя бы в минут 15. А не каждые 2-3 минуты.

With best, Rinat.
#10 30.08.2010 11:38

ну это нормальное явление. изменить то наверное можно, но не нужно.
что бы не мешали эти записи - выключите дебаг, или потерпите пока дебажете другие проблемы.
#11 30.08.2010 12:25

Да мне эти записи в логах астера не мешают. Мне надо сделать более редкое обращение астера к базе. База сильно грузиться.

With best, Rinat.
#12 30.08.2010 16:37

Вопрос по темеExclamation
После установки модуля CDR, для логирования звонков в базу данных mysql, этот модуль по умолчанию пытается логировать ВСЕ звонки, которые обслуживает сервер астериск. Естественно, получается у него в базу занести те звонки, для которых в экстеншеннах прописаны правила вида: MYSQL(Connect connid localhost ххх ххх ххх). А для всех остальных звонков, выводится ошибка:
Code:
[Aug 30 18:36:23] WARNING[452]: app_addon_sql_mysql.c:180 find_identifier: Identifier 0, identifier_type 1 not found in identifier list
[Aug 30 18:36:23] WARNING[452]: app_addon_sql_mysql.c:437 aMYSQL_disconnect: Invalid connection identifier 0 passed in aMYSQL_disconnect


Где настраиваются эти глобальные (или дефолтные) правила модуля cdr Question Как отключить логирования всех звонков?
#13 30.08.2010 16:44

мде.
прописываются конфиги в cdr_mysql.conf
что бы звонок не логировался нужно прописать экстеншену nocdr
#14 30.08.2010 16:55

Code:
exten => 11003,1,NoCDR()
exten => 11003,n,Dial(SIP/11003)
exten => 11004,1,NoCDR()
exten => 11004,n,Dial(SIP/11004)

Hmm
Code:
-- Executing [11002@office:1] NoCDR("SIP/11004-00000004", "") in new stack
-- Executing [11002@office:2] Dial("SIP/11004-00000004", "SIP/11002") in new stack
-- Called 11002
-- SIP/11002-00000005 is ringing
-- Saved useragent "sflphone/0.9.8~rc1" for peer 11004
== Spawn extension (office, 11002, 2) exited non-zero on 'SIP/11004-00000004'
-- Executing [h@office:1] MYSQL("SIP/11004-00000004", "Disconnect ") in new stack
[Aug 30 18:55:56] WARNING[782]: app_addon_sql_mysql.c:180 find_identifier: Identifier 0, identifier_type 1 not found in identifier list
[Aug 30 18:55:56] WARNING[782]: app_addon_sql_mysql.c:437 aMYSQL_disconnect: Invalid connection identifier 0 passed in aMYSQL_disconnect
#15 30.08.2010 16:59

ну в этом случае на h то же нужно ставить.
а где записи в конфигурационном файле?
#16 30.08.2010 17:15

про какой конфиг файл идет речь: extensions.conf, cdr.conf, cdr_mysql.conf ... Question
#17 31.08.2010 03:11

adt2k wrote:
мде.
прописываются конфиги в cdr_mysql.conf
что бы звонок не логировался нужно прописать экстеншену nocdr

ну как видно... cdr_mysql.conf
#18 11.10.2010 16:59

как я понял, астериск по умолчанию все разговоры заносит в базу, а получается у него это, из-за настроек вот этого файла
Code:
[global]
hostname=127.0.0.1
dbname=asterisk
table=cdr
password=1
user=asterisk
port=3306
sock=/tmp/mysql.sock
userfield=1

Если это так, тогда какой смысл от этой строки в extensions.conf
Code:
exten => xxxxx,1,MYSQL(Connect connid localhost asterisk 1 asterisk)
#19 12.10.2010 08:30

Это чисто Ваше изобретение Smile
Спасибо за открытие возможности Smile

Но это совсем не нужно!