From 8de93984bef4ef5715445ef10d73d9411b7b11e8 Mon Sep 17 00:00:00 2001 From: lazedo Date: Fri, 30 Nov 2018 18:39:22 +0000 Subject: [PATCH] handle the case where listener is not available for a zone --- kamailio/db_queries_kazoo.cfg | 3 +++ kamailio/kazoo-bindings.cfg | 50 ++++++++++++++++++++++++++++++++--- kamailio/presence-notify.cfg | 6 +++-- kamailio/presence-reset.cfg | 24 +++++++++++++++++ kamailio/presence-role.cfg | 2 +- 5 files changed, 79 insertions(+), 6 deletions(-) diff --git a/kamailio/db_queries_kazoo.cfg b/kamailio/db_queries_kazoo.cfg index 1aa3635..e022c02 100644 --- a/kamailio/db_queries_kazoo.cfg +++ b/kamailio/db_queries_kazoo.cfg @@ -18,3 +18,6 @@ # # #!substdef "!KZQ_RESET_ACCOUNT_UPDATE!update active_watchers set expires = \$TS where watcher_domain=\"\$(kzE{kz.json,Realm})\"!g" #!substdef "!KZQ_RESET_ACCOUNT_UPDATE!INSERT INTO tmp_probe select distinct a.event, a.presentity_uri from presentities a inner join active_watchers b on a.presentity_uri = b.presentity_uri and a.event = b.event where domain=\"\$(kzE{kz.json,Realm})\" and state in('early', 'confirmed', 'onthephone', 'busy')!g" #!substdef "!KZQ_RESET_ACCOUNT_RESET!delete from presentity where domain=\"\$(kzE{kz.json,Realm})\"!g" + +#!substdef "!KZQ_RESET_PUBLISHER_ZONE_UPDATE!INSERT INTO tmp_probe select distinct a.event, a.presentity_uri from presentities a inner join wdispatcher c on a.sender = c.destination inner join active_watchers b on a.presentity_uri = b.presentity_uri and a.event = b.event where zone = \"\$var(Zone)\" and state in('early', 'confirmed', 'onthephone', 'busy')!g" +#!substdef "!KZQ_PRESENCE_ZONE_RESET!delete from presentity where id in(select a.id from presentities a join wdispatcher c on a.sender = c.destination where zone = \"\$var(Zone)\")!g" diff --git a/kamailio/kazoo-bindings.cfg b/kamailio/kazoo-bindings.cfg index cf243b7..7118dc2 100644 --- a/kamailio/kazoo-bindings.cfg +++ b/kamailio/kazoo-bindings.cfg @@ -46,17 +46,17 @@ event_route[kazoo:mod-init] event_route[kazoo:consumer-event] { - xlog("L_INFO","unhandled AMQP event, payload: $kzE\n"); + xlog("L_DEBUG","unhandled AMQP event, payload: $kzE\n"); } event_route[kazoo:consumer-event-connection-open] { - xlog("L_INFO","connection to $(kzE{kz.json,host}) opened\n"); + xlog("L_NOTICE","connection to $(kzE{kz.json,host}) opened\n"); } event_route[kazoo:consumer-event-connection-closed] { - xlog("L_INFO","connection to $(kzE{kz.json,host}) closed\n"); + xlog("L_WARN","connection to $(kzE{kz.json,host}) closed\n"); } event_route[kazoo:consumer-event-connection-zone-available] @@ -69,4 +69,48 @@ event_route[kazoo:consumer-event-connection-zone-unavailable] xlog("L_WARN","amqp zone $(kzE{kz.json,zone}) is unavailable\n"); } +event_route[kazoo:consumer-event-connection-available] +{ + xlog("L_DEBUG","amqp zone $(kzE{kz.json,zone}) is available\n"); +} + +event_route[kazoo:consumer-event-connection-unavailable] +{ + xlog("L_DEBUG","amqp zone $(kzE{kz.json,zone}) is unavailable\n"); +} + +event_route[kazoo:consumer-event-connection-zone-listener-available] +{ + xlog("L_DEBUG","amqp zone $(kzE{kz.json,zone}) is available\n"); +} + +event_route[kazoo:consumer-event-connection-zone-listener-unavailable] +{ + xlog("L_DEBUG","amqp zone $(kzE{kz.json,zone}) is unavailable\n"); +} + +event_route[kazoo:consumer-event-connection-listener-zone-available] +{ + xlog("L_DEBUG","amqp zone $(kzE{kz.json,zone}) is available\n"); +} + +event_route[kazoo:consumer-event-connection-listener-zone-unavailable] +{ + xlog("L_DEBUG","amqp zone $(kzE{kz.json,zone}) is unavailable\n"); + + #!ifdef PRESENCE_ROLE + route(PRESENCE_ZONE_UNAVAILABLE); + #!endif +} + +event_route[kazoo:consumer-event-connection-listener-available] +{ + xlog("L_DEBUG","amqp zone $(kzE{kz.json,zone}) is available\n"); +} + +event_route[kazoo:consumer-event-connection-listener-unavailable] +{ + xlog("L_DEBUG","amqp zone $(kzE{kz.json,zone}) is unavailable\n"); +} + # vim: tabstop=4 softtabstop=4 shiftwidth=4 expandtab diff --git a/kamailio/presence-notify.cfg b/kamailio/presence-notify.cfg index c6c9a2c..1ff7c09 100644 --- a/kamailio/presence-notify.cfg +++ b/kamailio/presence-notify.cfg @@ -154,7 +154,9 @@ route[PRESENCE_PUBLISHER_CLEANUP] if($var(sqlres) < 0) { xlog("L_ERROR", "$var(ci)|log|error cleaning tmp_probe\n"); } else { - $var(nrows) = $sqlrows(cb); - xlog("L_INFO", "presence publisher cleanup processed $var(nrows) rows\n"); + $var(nrows) = $sqlrows(cb); + if($var(nrows) > 0) { + xlog("L_INFO", "presence publisher cleanup processed $var(nrows) rows\n"); + } } } diff --git a/kamailio/presence-reset.cfg b/kamailio/presence-reset.cfg index 7511110..027fa8d 100644 --- a/kamailio/presence-reset.cfg +++ b/kamailio/presence-reset.cfg @@ -42,6 +42,30 @@ route[RESET_PUBLISHER] } } +route[PRESENCE_ZONE_UNAVAILABLE] +{ + if($(kzE{kz.json,name}) == "presence") { + $var(Zone) = $(kzE{kz.json,zone}); + xlog("L_WARN", "amqp|reset|resetting publisher zone $var(Zone)\n"); + route(RESET_PUBLISHER_ZONE); + } +} + +route[RESET_PUBLISHER_ZONE] +{ + if($sel(cfg_get.kazoo.presence_reset_blf_defer_update) == 0) { + $var(Query) = $_s(KZQ_RESET_PUBLISHER_ZONE_UPDATE); + sql_query("exec", "$var(Query)"); + } + $var(Query) = $_s(KZQ_PRESENCE_ZONE_RESET); + sql_query("exec", "$var(Query)"); + $var(presentities) = $sqlrows(exec); + xlog("L_INFO", "$var(Msg-ID)|reset|removed $var(presentities) presentities from publisher $var(MediaUrl)\n"); + if($var(presentities) > 0) { + route(PRESENCE_PUBLISHER_CLEANUP); + } +} + route[RESET_ALL] { xlog("L_INFO", "$var(Msg-ID)|reset|received presence reset ALL\n"); diff --git a/kamailio/presence-role.cfg b/kamailio/presence-role.cfg index 3028ea2..260ef1b 100644 --- a/kamailio/presence-role.cfg +++ b/kamailio/presence-role.cfg @@ -469,7 +469,7 @@ route[PRESENCE_BINDINGS] #!import_file "presence-custom-bindings.cfg" #!ifndef PRESENCE_CUSTOM_BINDINGS - $var(payload) = $_s({ "exchange" : "presence", "type" : "topic", "queue" : "presence-dialog-MY_HOSTNAME", "routing" : ["dialog.*.*", "update.*.*", "mwi_updates.*.*"], "exclusive" : 0, "federate" : 1 }); + $var(payload) = $_s({ "name" : "presence", "exchange" : "presence", "type" : "topic", "queue" : "presence-dialog-MY_HOSTNAME", "routing" : ["dialog.*.*", "update.*.*", "mwi_updates.*.*"], "exclusive" : 0, "federate" : 1 }); kazoo_subscribe("$var(payload)"); #!endif