2010-08-23 8 views
0

Dans l'un de nos contextes personnalisés très simples, je voudrais ajouter un enregistrement de base de données en dehors de l'application cdr intégrée. J'ai quelque chose comme ce qui suit:Asterisk - Nettoyage des connexions MySQL() dans l'extension '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,MYSQL(Clear ${resultid}) 
exten => _X.,n,MYSQL(Disconnect ${connid}) 
exten => _X.,n,Dial(SIP/cs1000/${EXTEN}) 
exten => _X.,n,Hangup() 

Cela semble fonctionner très bien pour la plupart, si quelqu'un raccroche avant le contexte atteint la ligne MYSQL(clear...) il y a une connexion zombie gauche ouverte sur le serveur MySQL. Sur le wiki d'info de voip il est fait mention de faire le nettoyage de connexion dans l'extension h pour un contexte, mais il n'y a aucun échantillon de ceci. J'ai essayé les éléments suivants en vain:

[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}) 

J'imagine que je fais quelque chose de mal là-dedans, mais je ne peux pas dire tout à fait ce qu'il est.

Répondre

0

J'ai été en mesure d'obtenir ce principalement travailler cependant clair semble aimer lancer des erreurs sur les inserts et la documentation est minimale au mieux. Renouvelé sur l'utilisation de MYSQL() et a choisi d'utiliser system() pour envoyer l'instruction d'insertion à un démon python en attente.

+0

C'est une très mauvaise méthode. Il en résultera que le noyau se bloque sous la charge. Méthode correcte - utilisez le module astérisque cdr_mysql et les triggers/script externe. Au lieu de func_mysql, vous devez utiliser func_odbc ou la fonction REALTIME. – arheops