From 79b3c3b542a5f4685998dcb9bf5b78d9698e74d2 Mon Sep 17 00:00:00 2001 From: Daniel Finke Date: Tue, 27 Jun 2017 07:49:01 +0000 Subject: [PATCH 1/4] Alternate conditional insert syntax in DISPATCHER_CHECK_MEDIA_SERVER for MySQL --- kamailio/dispatcher-role.cfg | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/kamailio/dispatcher-role.cfg b/kamailio/dispatcher-role.cfg index a9bfaa2..1a34794 100644 --- a/kamailio/dispatcher-role.cfg +++ b/kamailio/dispatcher-role.cfg @@ -221,7 +221,12 @@ 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)\")"); + if ("KAZOO_DB_URL" =~ "^mysql") { + sql_query("exec", "insert into dispatcher (setid, destination) select $var(SetId), \"$var(MediaUrl)\" from DUAL where not exists(select * from dispatcher where destination = \"$var(MediaUrl)\")"); + } + else { + sql_query("exec", "insert into dispatcher (setid, destination) select $var(SetId), \"$var(MediaUrl)\" where not exists(select * from dispatcher where destination = \"$var(MediaUrl)\")"); + } if($sqlrows(exec) > 0) { xlog("L_WARNING", "reloading dispatcher table\n"); ds_reload(); From fa151404a57c4690e93412e0307a000b2cd1e886 Mon Sep 17 00:00:00 2001 From: lazedo Date: Thu, 29 Jun 2017 02:01:53 +0100 Subject: [PATCH 2/4] KAZOO-5597 add condition for kazoo module pua mode --- kamailio/default.cfg | 1 + kamailio/defs.cfg | 8 ++++++++ 2 files changed, 9 insertions(+) diff --git a/kamailio/default.cfg b/kamailio/default.cfg index aac65bd..e25eec1 100644 --- a/kamailio/default.cfg +++ b/kamailio/default.cfg @@ -182,6 +182,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..4e71af0 100644 --- a/kamailio/defs.cfg +++ b/kamailio/defs.cfg @@ -63,4 +63,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 From a64a0b6e03729a326fc7414a135410b010ca960e Mon Sep 17 00:00:00 2001 From: lazedo Date: Thu, 29 Jun 2017 02:03:07 +0100 Subject: [PATCH 3/4] KAZOO-5597 use runtime data in nodes info for dispatcher --- kamailio/default.cfg | 3 +++ kamailio/dispatcher-role.cfg | 41 +++++++++++++++++++----------------- kamailio/nodes-role.cfg | 4 ++-- 3 files changed, 27 insertions(+), 21 deletions(-) diff --git a/kamailio/default.cfg b/kamailio/default.cfg index e25eec1..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") diff --git a/kamailio/dispatcher-role.cfg b/kamailio/dispatcher-role.cfg index a9bfaa2..1c0eae6 100644 --- a/kamailio/dispatcher-role.cfg +++ b/kamailio/dispatcher-role.cfg @@ -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/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) = ""; From 68f83a779acc0b56d751ed513a0056e4fdda6c20 Mon Sep 17 00:00:00 2001 From: Daniel Finke Date: Thu, 29 Jun 2017 09:03:48 +0000 Subject: [PATCH 4/4] Add db_queries_KAMAILIO_DBMS.cfg files, specify your DBMS in local.cfg otherwise it's "kazoo" from defs.cfg --- kamailio/db_queries_kazoo.cfg | 2 ++ kamailio/db_queries_mysql.cfg | 2 ++ kamailio/defs.cfg | 4 ++++ kamailio/dispatcher-role.cfg | 7 +------ kamailio/kamailio.cfg | 3 +++ 5 files changed, 12 insertions(+), 6 deletions(-) create mode 100644 kamailio/db_queries_kazoo.cfg create mode 100644 kamailio/db_queries_mysql.cfg 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/defs.cfg b/kamailio/defs.cfg index f483953..198bc41 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 diff --git a/kamailio/dispatcher-role.cfg b/kamailio/dispatcher-role.cfg index 1a34794..d16359d 100644 --- a/kamailio/dispatcher-role.cfg +++ b/kamailio/dispatcher-role.cfg @@ -221,12 +221,7 @@ route[DISPATCHER_CHECK_MEDIA_SERVER] if($var(Zone) != "MY_AMQP_ZONE") { $var(SetId) = 2; } - if ("KAZOO_DB_URL" =~ "^mysql") { - sql_query("exec", "insert into dispatcher (setid, destination) select $var(SetId), \"$var(MediaUrl)\" from DUAL where not exists(select * from dispatcher where destination = \"$var(MediaUrl)\")"); - } - else { - 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(); 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"