#!trydef PRESENCE_RESET_BLF_DEFER_UPDATE 0 kazoo.presence_reset_blf_defer_update = PRESENCE_RESET_BLF_DEFER_UPDATE descr "defers blf reset" ##### PRESENCE RESET ROUTINES route[PRESENCE_RESET_ROUTE] { $var(runloop) = 1; while(mq_fetch("blf_reset") == 1 && $var(runloop) < MAX_WHILE_LOOPS) { $var(Key) = $mqk(blf_reset); $sht(nodes=>$var(Key)) = 0; $var(runloop) = $var(runloop) + 1; } } route[RESET_PUBLISHER] { xlog("L_INFO", "event|presence_reset|$var(Msg-ID) received presence reset for publisher $var(MediaUrl)\n"); if($sel(cfg_get.kazoo.presence_reset_blf_defer_update) == 0) { $var(Query) = $_s(KZQ_RESET_PUBLISHER_UPDATE); sql_query("exec", "$var(Query)"); } $var(Query) = $_s(KZQ_PRESENCE_RESET); sql_query("exec", "$var(Query)"); $var(presentities) = $sqlrows(exec); xlog("L_INFO", "event|presence_reset|$var(Msg-ID) removed $var(presentities) presentities from publisher $var(MediaUrl)\n"); if($var(presentities) > 0) { route(PRESENCE_PUBLISHER_CLEANUP); } } route[PRESENCE_ZONE_UNAVAILABLE] { if($(kzE{kz.json,name}) == "presence") { $var(Zone) = $(kzE{kz.json,zone}); xlog("L_WARN", "event|presence_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", "event|presence_reset|removed $var(presentities) presentities from zone $var(Zone)\n"); if($var(presentities) > 0) { route(PRESENCE_PUBLISHER_CLEANUP); } } route[RESET_ALL] { xlog("L_INFO", "event|presence_reset|$var(Msg-ID) received presence reset ALL\n"); sql_query("exec", "delete from presentity"); $var(presentities) = $sqlrows(exec); xlog("L_INFO", "event|presence_reset|$(kzE{kz.json,Msg-ID}) removed $var(presentities) presentities\n"); } route[RESET_ZONE] { xlog("L_INFO", "event|presence_reset|$(kzE{kz.json,Msg-ID}) received presence reset for this zone (MY_AMQP_ZONE)\n"); route(RESET_ALL); } route[RESET_SERVER] { xlog("L_INFO", "event|presence_reset|$(kzE{kz.json,Msg-ID}) received presence reset for this server (MY_HOSTNAME)\n"); route(RESET_ALL); } route[RESET_ACCOUNT] { xlog("L_INFO", "event|presence_reset|$(kzE{kz.json,Msg-ID}) received presence reset for realm $(kzE{kz.json,Realm})\n"); sql_query("exec", 'KZQ_RESET_ACCOUNT_UPDATE'); $var(watchers) = $sqlrows(exec); sql_query("exec", 'KZQ_RESET_ACCOUNT_RESET'); $var(presentities) = $sqlrows(exec); xlog("L_INFO", "event|presence_reset|$(kzE{kz.json,Msg-ID}) removed $var(presentities) presentities and expired $var(watchers) subscribers for realm $(kzE{kz.json,Realm})\n"); if($var(watchers) > 0) { route(PRESENCE_PUBLISHER_CLEANUP); } } route[RESET_WILDCARD] { if($(kzE{kz.json,Realm}) == "*" && $(kzE{kz.json,Username}) == "*") { xlog("L_INFO", "event|presence_reset|$(kzE{kz.json,Msg-ID}) received presence reset for cluster\n"); route(RESET_ALL); } else { if($(kzE{kz.json,Realm}) == "*") { if($(kzE{kz.json,Username}) == "MY_AMQP_ZONE") { route(RESET_ZONE); } else { if($(kzE{kz.json,Username}) == "MY_HOSTNAME") { route(RESET_SERVER); } else { if($(kzE{kz.json,Username}) =~ "sip:") { $var(Msg-ID) = $(kzE{kz.json,Msg-ID}); $var(MediaUrl) = $(kzE{kz.json,Username}); route(RESET_PUBLISHER); } else { xlog("L_INFO", "event|presence_reset|$(kzE{kz.json,Msg-ID}) received presence wildcard reset for $(kzE{kz.json,Username}). 'MY_AMQP_ZONE/MY_HOSTNAME' doesn't care\n"); } } } } else { route(RESET_ACCOUNT); } } } event_route[kazoo:consumer-event-presence-reset] { if($(kzE{kz.json,Username}) == "*" || $(kzE{kz.json,Realm}) == "*") { route(RESET_WILDCARD); exit(); } xlog("L_INFO", "event|presence_reset|$(kzE{kz.json,Msg-ID}) received presence reset for $(kzE{kz.json,Username})@$(kzE{kz.json,Realm})\n"); $var(presentity) = $_s(sip:$(kzE{kz.json,Username})@$(kzE{kz.json,Realm})); route(COUNT_SUBSCRIBERS); sql_query("exec", 'KZQ_EVENT_PRESENCE_RESET_DELETE'); if($xavp(watchers=>message-summary) > 0) { xlog("L_INFO", "event|presence_reset|$(kzE{kz.json,Msg-ID}) notifying $xavp(watchers=>message-summary) message-summary subscribers of $var(presentity)\n"); pres_refresh_watchers("$var(presentity)", "message-summary", 1); } else { xlog("L_DEBUG", "event|presence_reset|$(kzE{kz.json,Msg-ID}) skip message-summary subscriber notification for $var(presentity)\n"); } if($xavp(watchers=>presence) > 0) { xlog("L_INFO", "event|presence_reset|$(kzE{kz.json,Msg-ID}) notifying $xavp(watchers=>presence) presence subscribers of $var(presentity)\n"); pres_refresh_watchers("$var(presentity)", "presence", 1); } else { xlog("L_DEBUG", "event|presence_reset|$(kzE{kz.json,Msg-ID}) skip presence subscriber notification for $var(presentity)\n"); } if($xavp(watchers=>dialog) > 0) { xlog("L_INFO", "event|presence_reset|$(kzE{kz.json,Msg-ID}) notifying $xavp(watchers=>dialog) dialog subscribers of $var(presentity)\n"); pres_refresh_watchers("$var(presentity)", "dialog", 1); } else { xlog("L_DEBUG", "event|presence_reset|$(kzE{kz.json,Msg-ID}) skip dialog subscriber notification for $var(presentity)\n"); } } route[MEDIA_SERVER_UP_RESET_PUBLISHER] { route(RESET_PUBLISHER); } route[MEDIA_SERVER_DOWN_RESET_PUBLISHER] { route(RESET_PUBLISHER); } route[MEDIA_SERVER_RESTART_RESET_PUBLISHER] { route(RESET_PUBLISHER); } route[MEDIA_SERVER_RECONNECTED_RESET_PUBLISHER] { route(RESET_PUBLISHER); }