2010-08-23 44 views
0

在我們非常簡單的自定義上下文中,我想在內置的cdr應用程序之外添加一些數據庫日誌記錄。我有類似如下:Asterisk - 在'h'分機中清理MySQL()連接

[inbound-custom] 
exten => _X.,1,MixMonitor(/mnt/temp/inbound-${STRFTIME(${EPOCH},,%Y%m%d-%H%M%S)}-${CALLERID(num)}-${EXTEN}-${UNIQUEID}.wav) 
exten => _X.,n,MYSQL(Connect connid mysqlip cdr_logger mysqlpw asteriskcdrdb) 
exten => _X.,n,MYSQL(Query resultid ${connid} INSERT INTO `call_recordings` (`asterisk_uniqueid`,`clid`,`filename`,`context`) VALUES (${UNIQUEID},${CALLERID(num)},inbound-${STRFTIME(${EPOCH},,%Y%m%d-%H%M%S)}-${CALLERID(num)}-${EXTEN}-${UNIQUEID}.wav,"inbound")) 
exten => _X.,n,MYSQL(Clear ${resultid}) 
exten => _X.,n,MYSQL(Disconnect ${connid}) 
exten => _X.,n,Dial(SIP/cs1000/${EXTEN}) 
exten => _X.,n,Hangup() 

這似乎在大多數情況下工作得很好,但是如果有人掛斷方面達到MYSQL(clear...)線有敞開了MySQL服務器上的殭屍連接之前。在voip info wiki上,提到了在上下文的h擴展中進行連接清理,但沒有這樣的示例。我試圖以下無濟於事:

[inbound-custom] 
exten => _X.,1,MixMonitor(/mnt/temp/inbound-${STRFTIME(${EPOCH},,%Y%m%d-%H%M%S)}-${CALLERID(num)}-${EXTEN}-${UNIQUEID}.wav) 
exten => _X.,n,MYSQL(Connect connid mysqlip cdr_logger mysqlpw asteriskcdrdb) 
exten => _X.,n,MYSQL(Query resultid ${connid} INSERT INTO `call_recordings` (`asterisk_uniqueid`,`clid`,`filename`,`context`) VALUES (${UNIQUEID},${CALLERID(num)},inbound-${STRFTIME(${EPOCH},,%Y%m%d-%H%M%S)}-${CALLERID(num)}-${EXTEN}-${UNIQUEID}.wav,"inbound")) 
exten => _X.,n,Dial(SIP/cs1000/${EXTEN}) 
exten => _X.,n,Hangup() 

exten => h,1,MYSQL(Clear ${resultid}) 
exten => h,n,MYSQL(Disconnect ${connid}) 

我想我在那裏做錯了什麼,但我不能告訴它是什麼。

回答

0

我能夠得到這個主要工作,但清晰似乎喜歡投擲插入錯誤和文件是最少的最好。放棄使用MYSQL()並選擇使用system()將插入語句發送到等待的python守護進程。

+0

這是非常糟糕的方法。它會導致核心在負載下掛起。正確的方法 - 使用星號cdr_mysql模塊和觸發器/外部腳本。而不是func_mysql已被使用func_odbc或函數REALTIME。 – arheops 2014-04-08 10:44:19