From 0bbd30790fd2034efc4d7e6a87bfa07845f51641 Mon Sep 17 00:00:00 2001 From: lazedo Date: Thu, 17 Sep 2020 10:29:29 +0000 Subject: [PATCH] check for media servers reconnection (cherry picked from commit 21c7772c71cb911a4bd080149827d2a6a0149544) --- kamailio/nodes-role.cfg | 33 +++++++++++++++++++++++++++++---- 1 file changed, 29 insertions(+), 4 deletions(-) diff --git a/kamailio/nodes-role.cfg b/kamailio/nodes-role.cfg index f1a8fbd..7eebb8c 100644 --- a/kamailio/nodes-role.cfg +++ b/kamailio/nodes-role.cfg @@ -118,6 +118,7 @@ route[CHECK_MEDIA_SERVERS] return; } + $var(Msg-ID) = $(var(Payload){kz.json,Msg-ID}); $var(Media) = $(var(Payload){kz.json,Media-Servers}); $var(Zone) = $(var(Payload){kz.json,AMQP-Broker-Zone}); @@ -131,6 +132,17 @@ route[CHECK_MEDIA_SERVERS] $var(MediaName) = $(avp(MediaKeys)[$var(Idx)]); $var(MediaKey) = $(var(MediaName){s.replace,$var(Dot),$var(Perc)}); avp_delete("$avp(ProfileKeys)/g"); + + $var(MediaReconnected) = 0; + $var(MediaConnected) = $(var(Payload){kz.json,Media-Servers.$var(MediaKey).Startup}); + $var(ExistingMediaConnected) = $sht(media=>$var(MediaKey)::connected::$var(Node)); + xlog("L_DEBUG", "$var(Msg-ID)|nodes|$var(MediaKey) from $var(Node) => $var(MediaConnected) vs $var(ExistingMediaConnected)\n"); + if($var(ExistingMediaConnected) != $null && $var(MediaConnected) > $var(ExistingMediaConnected)) { + $var(MediaReconnected) = 1; + } + $sht(media=>$var(MediaKey)::connected::$var(Node)) = $var(MediaConnected); + $shtex(media=>$var(MediaKey)::connected::$var(Node)) = 0; + if(kazoo_json_keys($var(Payload), "Media-Servers.$var(MediaKey).Interfaces", "$avp(ProfileKeys)") == 1) { $var(ProfileCount) = $cnt($avp(ProfileKeys)); $var(ProfileIdx) = 0; @@ -157,9 +169,11 @@ route[CHECK_MEDIA_SERVERS] $shtex(media=>$var(MediaUrl)::uuid) = 0; $var(Zone) = $sht(media=>$var(MediaUrl)::zone); route(MEDIA_SERVER_RESTART); + } else if($var(MediaReconnected) == 1) { + route(MEDIA_SERVER_RECONNECTED); }; $var(MediaExpire) = ($(var(Payload){kz.json,Expires}{s.int}) / 1000) + NODES_FUDGE_EXPIRE; - xlog("L_DEBUG", "nodes|media|$var(Node) media expiration $var(MediaExpire) for $var(MediaUrl)\n"); + xlog("L_DEBUG", "$var(Msg-ID)|nodes|$var(Node) media expiration $var(MediaExpire) for $var(MediaUrl)\n"); $shtex(media=>$var(MediaUrl)::count) = $var(MediaExpire); $var(ProfileIdx) = $var(ProfileIdx) + 1; } @@ -178,7 +192,7 @@ event_route[htable:expired:media] route[MEDIA_SERVER_UP] { - xlog("L_NOTICE", "nodes|media|$var(Node) reported new media server $var(MediaUrl) in zone $var(Zone)\n"); + xlog("L_NOTICE", "$var(Msg-ID)|nodes|$var(Node) reported new media server $var(MediaUrl) in zone $var(Zone)\n"); #!ifdef DISPATCHER_ROLE route(DISPATCHER_CHECK_MEDIA_SERVER); @@ -186,13 +200,14 @@ route[MEDIA_SERVER_UP] #!ifdef PRESENCE_ROLE route(PRESENCE_FAST_PICKUP_START); + route(RESET_PUBLISHER); #!endif } route[MEDIA_SERVER_DOWN] { - xlog("L_WARNING", "htable|media|heartbeat expired for media server $var(MediaUrl) in zone $var(Zone)\n"); + xlog("L_WARNING", "expired|nodes|heartbeat expired for media server $var(MediaUrl) in zone $var(Zone)\n"); #!ifdef PRESENCE_ROLE route(RESET_PUBLISHER); @@ -202,7 +217,17 @@ route[MEDIA_SERVER_DOWN] route[MEDIA_SERVER_RESTART] { - xlog("L_NOTICE", "htable|media|media server $var(MediaUrl) restarted in zone $var(Zone)\n"); + xlog("L_NOTICE", "$var(Msg-ID)|nodes|media server $var(MediaUrl) restarted in zone $var(Zone)\n"); + +#!ifdef PRESENCE_ROLE + route(RESET_PUBLISHER); +#!endif + +} + +route[MEDIA_SERVER_RECONNECTED] +{ + xlog("L_NOTICE", "$var(Msg-ID)|nodes|media server $var(MediaUrl) reconnected to $var(Node) in zone $var(Zone)\n"); #!ifdef PRESENCE_ROLE route(RESET_PUBLISHER);