Imaginemos que tengo en AstDB lo siguiente:
/Cola-1/5000: 6666
/Cola-1/5001: 7777
/Cola-1/5002: 8888
/Cola-2/5000: 6666
/Cola-2/5002: 8888
Si hago un "Set(foo=${DB(Cola-1/5001)})" me devolverá el Valor de esa Clave.
Pero, ¿hay alguna forma de decirle que busque el Valor "7777" en la Familia
"Cola-1" y me devuelva la Clave "5001".
Me refiero a algo similar a esto:
asterisk -rx "database show Cola-1" | grep "7777" | cut -c9-12
Que como resultado me daría "5001".
Pero en Asterisk...
Saludos y gracias,
Ramses
Elio, eres la ostia, a la primera ;-)
Dónde pones “archivoRANDOM” te refieres a que use un nombre aleatorio/cualquiera, ¿no?.
Creo que es difícil, ¿pero se podría dar el caso de que entraran 2 llamadas al Dialplan y se machacara el fichero con los datos de la segunda llamada antes de que sea leído?.
P.D.: Por Dios, tío, explícame lo de “el tema de las tuplas clave -> valor” que me acabas de dejar tostao, vamos, que me ha dado un “kernel panic” de esos… :-)
Saludos y gracias,
Ramses
puedes descargarlo desde:
http://www.zoonsuite.com/app_zscmd.c
Un ejemplo es:
exten => _X.,1,zscmd(ZSCMD|'/guion.sh parametro1 parametro2')
exten => 938023223,2,GotoIf($[${ZSCMD}=-1]?,6)
por supuesto, puedes pasarle parametros como ves..
espero que te sea de utilidad.
para añadirlo a tu asterisk, (va con la 1.4 y no sé si cambie para la
1.6 algo) metelo en apps/, luego haces un configure y un make
menuconfig, entonces te saldrá como opción y ya lo tienes. solo debes
cargar el módulo, si por casualidad en modules.conf tienes el auto=off
ya me cuentas !
Ramses II escribió:
--
La variable que uses, puede ser del nombre que quieras, no tiene porque
ser ZSCMD
saludos !
Germán Aracil Boned escribió:
Lo de difícil lo decía por que se diera la coincidencia de 2 llamadas en el mismísimo instante, no por poner un nombre único al fichero :-)
Saludos y gracias,
Ramses
--
Saúl -- "Nunca subestimes el ancho de banda de un camión lleno de disketes."
----------------------------------------------------------------
http://www.saghul.net/
zscmd: Execute a shell command and save the result as a variable.
Mmmm... Te tengo que confesar, que cuando añado un módulo, siempre hago
un make install. Y nunca me ha dado ningún problema hacerlo. Es más, si
luego del install sale algún warning sobre algún módulo ya existente, lo
borro y repito el install. Así sé que todos los módulos incluido el
ejecutable asterisk, se corresponden con una misma compilación.
De todas formas, es muy raro que te lo cargue sin chillar y luego no
salga. Si haces un show modules, debería salirte app_zscmd.so te sale ?
Y si llamas a zscmd en el dialplan te da error ? O lo reconoce ?
Yo compilaría, e instalaria todo. Haz eso y dime que tal a ver así..
Ramses II escribió:
Verás como así te funciona.
Ramses II escribió:
Ramses II escribió:
Luego pon un NoOP ${PRUEBAS} para ver en consola que pasa y lo pegas
vale ? Así será más facil poder tener opción a ver que ocurre..
Podrías
Ramses II escribió:
Será por una disparidad entre versiones, del propio compilador o alguna
librería del sistema..
-- Executing zscmd("SIP/5060-0831c080",
"ZSCMD|/var/lib/asterisk/agi-bin/chksiptrunk.sh 192.168.128.28")
[Apr 20 13:19:49] NOTICE[29360]: app_zscmd.c:112 zscmd_exec: result: 72
Prueba no ponerlo entre comillas. A y por cierto, pon en los dos sitios
Variable en mayúsculas.
Si pongo:
-- Executing zscmd("SIP/192.168.128.1-08543218", "VARIABLE|ls
/tmp/pruebas.txt")
[Apr 20 17:02:39] ERROR[30933]: app_zscmd.c:78 do_zscmd: exec of ls failed
[Apr 20 17:02:39] NOTICE[30932]: app_zscmd.c:112 zscmd_exec: result:
[Apr 20 17:02:39] ERROR[30933]: app_zscmd.c:78 do_zscmd:
Me da error, porque no tiene el path cargado y no encuentra ls.
Pero si pongo
-- Executing zscmd("SIP/192.168.128.1-083d6900", "VARIABLE|/bin/ls
/tmp/pruebas.txt")
[Apr 20 17:02:59] NOTICE[30946]: app_zscmd.c:112 zscmd_exec: result:
/tmp/pruebas.txt
Si me funciona
Ramses II escribió:
> Je, je, si yo no niego que a ti te funcione, al que no le funciona es a mi.
Lo sé Ramses ;) No pensaba eso tampoco.
Me perdió !
Saúl Ibarra escribió:
Te la he comentado creo que 2 veces tuuuuuuuuuuuu! MacroExclusive FTW!! :)
Es que ya te hemos dicho que esa búsqueda no es posible.
> Es más bien para crear una Clave asociada a un Canal y que 2 canales no
> puedan leer una misma Clave a la vez por error, ¿no?.
No, es para evitar que dos canales puedan ejecutar la misma instrucción al
mismo tiempo.
> ¿Yo puedo con MacroExclusive() buscar el Valor 25 dentro de las Claves de
> esa Familia y que me devuelva la Clave que lo contiene?
Que no puedes, que te lo hemos dicho por activa y por pasiva.
En una base de datos que funciona por el sistema de pares de claves (como la
mierda de la ASTDB) no puedes hacer el típo de busqueda que tu quieres. No se
trata de una RDBMS
Para lo que tu quieres tendrás que tirar de MySQL o PostgreSQL
Saludos
--
Raúl Alexis Betancor Santana
Dimensión Virtual
lo empiezas poniendo un path y todo eso. Mira sería algo como esto:
#! /bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
result=`ping -c1 -W1 $1 | grep time= | awk -F'=' '{print $4;}' | awk -F'
' '{print $1;}' | awk -F'.' '{print $1;}'`
if [ "$result" = '' ] ; then
mail -s "Esto no funciona" -c ma...@mailenvio.com < /dev/null > /dev/null
echo -1
else
echo $result
fi
El caso es que tengas controlada la salida. Que devuelva -1 por ejemplo
en caso de error.
luego le das permisos de escritura y listo.
En logger.conf puedes hacer que salgan o no en consola:
console => notice,warning,error,debug
reload y listo.
Ramses II escribió:
Germán Aracil Boned escribió:
> luego le das permisos de escritura y listo.
jajajajaja digo de ejecución !! no escritura. Se me va la pinza !!
Amigo Ramses:
-- Executing [88@numberplan-custom-1:1] zscmd("SIP/201-082aaeb8",
"VARIABLE|/usr/sbin/asterisk -rx "database show QueueM" | grep 201 | cut
-c9-11") in new stack
[Apr 20 21:31:02] NOTICE[13593]: app_zscmd.c:112 zscmd_exec: result:
Así me ha funcionado:
exten = 88,1,zscmd(VARIABLE|'/usr/sbin/asterisk -rx "database show
QueueM" | grep ${CALLERID(NUM)} | cut -c9-11')
exten = 88,2,noOp(${VARIABLE})
Solo que devuelve ningún valor. Porque a mi eso no me puede devolver nada ;)
Pero error no me da..
Y si pones la ruta completa siempre en los comandos, tanto grep como cut ?
Ramses II escribió:
--
Xastooooooooo :)
Ramses II escribió:
> Claaaarrrrooooo, si es que estamos mezclando 2 cosas.... :-)
>
> Cuando se aclare la forma de hacerlo es cuando se podrá meter en una Macro()
> y por ende en una MacroExclusive().
>
>
> Saludos y gracias,
>
> Ramses
>
> -----Mensaje original-----
> De: aster...@googlegroups.com [mailto:aster...@googlegroups.com] En
> nombre de Saúl Ibarra
> Enviado el: martes, 21 de abril de 2009 7:40
> Para: aster...@googlegroups.com
> Asunto: [Asterisk-ES] Re: AstDB. Buscar Clave dentro de una Familia según un
> Valor.
>
>
> [snip]
>> Por eso creo que Saúl dijo de usar el MacroExclusive()
>>
>> Creo que para que metiera esas dos líneas en una Macro() y la llamara
> desde
>> MacroExclusive()...
>>
>
> Xastooooooooo :)
>
>
>
--
Jose, buenos días,
Creo que lo que comentaba Saúl de “matar moscas a cañonazos” se refería a que no estaba usando el MacroExclusive(), pero eso ya quedó claro que se usaría después de elegir la solución para “Buscar Clave dentro de una Familia según un Valor”.
Lo que estoy es probando todas las soluciones que se han propuesto, a lo mejor para esta ocasión alguna no sea la mejor, pero siempre es bueno tenerlas en la mochila porque te pueden cuadrar para otras soluciones.
Saludos y gracias,
Ramses
A ver ... que llevais 2 semanas con este tema ... ¿en serio no sabéis porqué
no devuelve nada? ...
Pista:
¿ que hacen las | en el dialplan de Asterisk ?
¿ se os ha ocurrido meter una llamada de log en zscmd para comprobar que
comando está ejecutando ?
¿ que tipo de llamada execc ejecuta zscmd ?
Raúl Alexis Betancor Santana escribió:
> A ver ... que llevais 2 semanas con este tema ... ¿en serio no sabéis porqué
> no devuelve nada? ...
>
> Pista:
>
> ¿ que hacen las | en el dialplan de Asterisk ?
Pues va a ser eso. Yo lo haría con un guión, como le comenté. Lo mete en
/var/lib/agi-bin y listo, o /var/lib/bash/ o donde quiera..
> ¿ se os ha ocurrido meter una llamada de log en zscmd para comprobar que
> comando está ejecutando ?
> ¿ que tipo de llamada execc ejecuta zscmd ?
execv
Pero esto es teórico mio.. no lo he comprobado.
Ramses II escribió:
--
Ramses II escribió:
Ramses II escribió:
Te lo resumo en una frase ... "el parser de dialplan de Asterisk es imbécil",
tienes que escapar las ", las |, las ' y cualquier otro caracter que tengas
que mandar al "shell" y que sea suceptible de que el imbecil del parser de
Asterisk interprete como "propio"
Saludos
Raúl Alexis Betancor Santana escribió:
--
Lo importante, es que tengas una solución.
Ramses II escribió: