diff --git a/kamailio/db_queries_kazoo.cfg b/kamailio/db_queries_kazoo.cfg new file mode 100644 index 0000000..aad4b0b --- /dev/null +++ b/kamailio/db_queries_kazoo.cfg @@ -0,0 +1,2 @@ +####### Database queries ######## +#!substdef "!DISPATCHER_CHECK_MEDIA_SERVER_INSERT_QUERY!insert into dispatcher (setid, destination) select \$var(SetId), \"\$var(MediaUrl)\" where not exists(select * from dispatcher where destination = \"\$var(MediaUrl)\")!g" diff --git a/kamailio/db_queries_mysql.cfg b/kamailio/db_queries_mysql.cfg new file mode 100644 index 0000000..853c53f --- /dev/null +++ b/kamailio/db_queries_mysql.cfg @@ -0,0 +1,2 @@ +####### Database queries ######## +#!substdef "!DISPATCHER_CHECK_MEDIA_SERVER_INSERT_QUERY!insert into dispatcher (setid, destination) select \$var(SetId), \"\$var(MediaUrl)\" from DUAL where not exists(select * from dispatcher where destination = \"\$var(MediaUrl)\")!g" diff --git a/kamailio/default.cfg b/kamailio/default.cfg index aac65bd..991cef3 100644 --- a/kamailio/default.cfg +++ b/kamailio/default.cfg @@ -172,6 +172,9 @@ loadmodule "avpops.so" ######## UAC Redirection module ######## loadmodule "uac_redirect.so" +#### json rpc #### +loadmodule "jsonrpcs.so" + ####### SQL OPS module ########## loadmodule "sqlops.so" modparam("sqlops","sqlcon", "cb=>KAZOO_DB_URL") @@ -182,6 +185,7 @@ loadmodule "db_kazoo.so" ####### Kazoo Integration module ########## loadmodule "kazoo.so" +modparam("kazoo", "pua_mode", MY_AMQP_PUA_MODE) modparam("kazoo", "amqp_primary_zone", "MY_AMQP_ZONE") modparam("kazoo", "amqp_query_timeout_avp", "$avp(kz_timeout)") modparam("kazoo", "node_hostname", "MY_HOSTNAME") diff --git a/kamailio/defs.cfg b/kamailio/defs.cfg index f483953..1c461d6 100644 --- a/kamailio/defs.cfg +++ b/kamailio/defs.cfg @@ -7,6 +7,10 @@ #!define KAZOO_LOG_LEVEL L_INFO #!endif +#!ifndef KAMAILIO_DBMS +#!substdef "!KAMAILIO_DBMS!kazoo!g" +#!endif + #!ifndef KAZOO_DATA_DIR #!substdef "!KAZOO_DATA_DIR!/etc/kazoo/kamailio/db!g" #!endif @@ -63,4 +67,12 @@ #!define PRESENCE_RESET_BLF_DEFER_UPDATE 0 #!endif +#!ifndef MY_AMQP_PUA_MODE +#!ifdef PRESENCE_ROLE +#!define MY_AMQP_PUA_MODE 1 +#!else +#!define MY_AMQP_PUA_MODE 0 +#!endif +#!endif + # vim: tabstop=4 softtabstop=4 shiftwidth=4 expandtab diff --git a/kamailio/dispatcher-role.cfg b/kamailio/dispatcher-role.cfg index a9bfaa2..89683b8 100644 --- a/kamailio/dispatcher-role.cfg +++ b/kamailio/dispatcher-role.cfg @@ -221,7 +221,7 @@ route[DISPATCHER_CHECK_MEDIA_SERVER] if($var(Zone) != "MY_AMQP_ZONE") { $var(SetId) = 2; } - sql_query("exec", "insert into dispatcher (setid, destination) select $var(SetId), \"$var(MediaUrl)\" where not exists(select * from dispatcher where destination = \"$var(MediaUrl)\")"); + sql_query("exec", "DISPATCHER_CHECK_MEDIA_SERVER_INSERT_QUERY"); if($sqlrows(exec) > 0) { xlog("L_WARNING", "reloading dispatcher table\n"); ds_reload(); @@ -229,26 +229,29 @@ route[DISPATCHER_CHECK_MEDIA_SERVER] } } -route[DISPATCHER_SUMMARY] +route[DISPATCHER_STATUS] { - $var(ds_groups_json) = ""; - if (sql_xquery("cb", "select * from dispatcher order by setid, id", "ra") == 1) - { - $var(Sep1) = ""; - while($xavp(ra) != $null) { - $var(ds_group) = $xavp(ra=>setid); - $var(Sep2)=""; - $var(ds_group_json)=""; - while($xavp(ra) != $null && $var(ds_group) == $xavp(ra=>setid) ) - { - $var(record) = $_s("$xavp(ra=>id)" : {"destination" : "$xavp(ra=>destination)", "flags" : "$xavp(ra=>flags)", "priority" : $xavp(ra=>priority), "attrs" : "$xavp(ra=>attrs)" , "description" : "$xavp(ra=>description)"}); - $var(ds_group_json) = $var(ds_group_json) + $var(Sep2) + $var(record); - $var(Sep2) = ","; - pv_unset("$xavp(ra)"); - } - $var(ds_groups_json) = $var(ds_groups_json) + $var(Sep1) + $_s("$var(ds_group)" : { $var(ds_group_json) }); - $var(Sep1)=", "; - } + jsonrpc_exec('{"jsonrpc": "2.0", "method": "dispatcher.list", "id": 1}'); + $var(Sets) = $(jsonrpl(body){kz.json, result.NRSETS}); + $var(i) = 0; + $var(ds_groups_json)=""; + $var(Sep1) = ""; + while($var(i) < $var(Sets)) { + $var(Set) = $(jsonrpl(body){kz.json, result.RECORDS[$var(i)].SET}); + $var(SetCount) = $(var(Set){kz.json.count,TARGETS}); + $var(Sep2)=""; + $var(ds_group_json)=""; + $var(c) = 0; + while($var(c) < $var(SetCount)) { + $var(Dest) = $(var(Set){kz.json,TARGETS[$var(c)].DEST}); + $var(record) = $_s("$(var(Dest){kz.json,URI})" : {"destination" : "$(var(Dest){kz.json,URI})", "flags" : "$(var(Dest){kz.json,FLAGS})", "priority" : $(var(Dest){kz.json,PRIORITY}), "attrs" : "$(var(Dest){kz.json,ATTRS.BODY})"}); + $var(ds_group_json) = $var(ds_group_json) + $var(Sep2) + $var(record); + $var(Sep2) = ","; + $var(c) = $var(c) + 1; + } + $var(ds_groups_json) = $var(ds_groups_json) + $var(Sep1) + $_s("$(var(Set){kz.json,ID})" : { $var(ds_group_json) }); + $var(Sep1)=", "; + $var(i) = $var(i) + 1; } } diff --git a/kamailio/kamailio.cfg b/kamailio/kamailio.cfg index 2749fbf..2528128 100644 --- a/kamailio/kamailio.cfg +++ b/kamailio/kamailio.cfg @@ -29,6 +29,9 @@ include_file "local.cfg" ####### defaults not configured in local ######## include_file "defs.cfg" +####### DBMS query selection ######## +include_file "db_queries_KAMAILIO_DBMS.cfg" + ####### Default Configuration ###### include_file "default.cfg" diff --git a/kamailio/nodes-role.cfg b/kamailio/nodes-role.cfg index 9fe4668..c8de709 100644 --- a/kamailio/nodes-role.cfg +++ b/kamailio/nodes-role.cfg @@ -35,8 +35,8 @@ route[NODES_ADVERTISE_ROUTE] $var(Registrar) = ""; #!endif -#!ifdef DISPATCHER_ROLE - route(DISPATCHER_SUMMARY); +#!ifdef DISPATCHER_ROLE + route(DISPATCHER_STATUS); $var(Dispatcher) = $_s("Dispatcher" : {"Groups" : { $var(ds_groups_json) }}); #!else $var(Dispatcher) = "";