diff --git a/kamailio/nodes-role.cfg b/kamailio/nodes-role.cfg index c13458c..b0d88d0 100644 --- a/kamailio/nodes-role.cfg +++ b/kamailio/nodes-role.cfg @@ -35,16 +35,22 @@ route[NODES_ADVERTISE_ROUTE] event_route[kazoo:consumer-event-nodes-advertise] { - if($shtinc(nodes=>$(kzE{kz.json,Node})::count) == 1) { - xlog("L_INFO", "$(kzE{kz.json,Msg-ID})|nodes|hearbeat from new node $(kzE{kz.json,Node})\n"); - } + $var(count) = $shtinc(nodes=>$(kzE{kz.json,Node})::count); + if($var(count) == 0) { + xlog("L_INFO", "$(kzE{kz.json,Msg-ID})|nodes|hearbeat for reconnected node $(kzE{kz.json,Node})\n"); + $var(count) = $shtinc(nodes=>$(kzE{kz.json,Node})::count); + } else { + if($var(count) == 1) { + xlog("L_INFO", "$(kzE{kz.json,Msg-ID})|nodes|hearbeat from new node $(kzE{kz.json,Node})\n"); + } + } mq_add("node_heartbeat", "$(kzE{kz.json,Node})", "$kzE"); } event_route[htable:expired:nodes] { if($shtrecord(key) =~ "::count$$") { - if($shtrecord(value) == 0) { + if($shtrecord(value) == -1) { xlog("L_INFO", "htable|nodes|node $(shtrecord(key){s.rm,::count}) is still unreachable\n"); } mq_add("node_track", "$shtrecord(key)", ""); @@ -59,7 +65,7 @@ route[NODE_TRACK_ROUTE] $var(runloop) = 1; while(mq_fetch("node_track") == 1 && $var(runloop) < MAX_WHILE_LOOPS) { $var(Key) = $mqk(node_track); - $sht(nodes=>$var(Key)) = 0; + $sht(nodes=>$var(Key)) = -1; $var(runloop) = $var(runloop) + 1; } } @@ -85,28 +91,36 @@ route[CHECK_MEDIA_SERVERS] if($(var(Payload){kz.json,Media-Servers}) == "") { return; } - + $var(Media) = $(var(Payload){kz.json,Media-Servers}); $var(Zone) = $(var(Payload){kz.json,AMQP-Broker-Zone}); - + $var(Dot) = "."; $var(Perc) = "%"; - avp_delete("$avp(MediaKeys)"); + avp_delete("$avp(MediaKeys)/g"); if(kazoo_json_keys($var(Payload), "Media-Servers", "$avp(MediaKeys)") == 1) { $var(Count) = $cnt($avp(MediaKeys)); $var(Idx) = 0; while( $var(Idx) < $var(Count) ) { $var(MediaKey) = $(avp(MediaKeys)[$var(Idx)]{s.replace,$var(Dot),$var(Perc)}); - $var(MediaUrl1) = $(var(Payload){kz.json,Media-Servers.$var(MediaKey).Interface.URL}); - if($var(MediaUrl1) != "") { - $var(MediaUrl) = $(var(MediaUrl1){re.subst,/^sip:(.*)@(.*)/sip:\2/}); - if($shtinc(media=>$var(MediaUrl)::count) == 1) { - $sht(media=>$var(MediaUrl)::zone) = $var(Zone); - $shtex(media=>$var(MediaUrl)::zone) = 0; - route(MEDIA_SERVER_UP); - }; - $shtex(media=>$var(MediaUrl)::count) = ($(var(Payload){kz.json,Expires}{s.int}) / 1000) + NODES_FUDGE_FACTOR; - } + avp_delete("$avp(ProfileKeys)/g"); + if(kazoo_json_keys($var(Payload), "Media-Servers.$var(MediaKey).Interfaces", "$avp(ProfileKeys)") == 1) { + $var(ProfileCount) = $cnt($avp(ProfileKeys)); + $var(ProfileIdx) = 0; + xlog("L_INFO", "nodes|media|$var(Node) profile count for $(avp(MediaKeys)[$var(Idx)]) is : $var(ProfileCount)\n"); + while( $var(ProfileIdx) < $var(ProfileCount) ) { + $var(MediaRawUrl) = $(var(Payload){kz.json,Media-Servers.$var(MediaKey).Interfaces.$(avp(ProfileKeys)[$var(ProfileIdx)]).URL}); + $var(MediaUrl) = $(var(MediaRawUrl){re.subst,/^sip:(.*)@(.*)/sip:\2/}); + if($shtinc(media=>$var(MediaUrl)::count) == 1) { + $sht(media=>$var(MediaUrl)::zone) = $var(Zone); + $shtex(media=>$var(MediaUrl)::zone) = 0; + route(MEDIA_SERVER_UP); + }; + $shtex(media=>$var(MediaUrl)::count) = ($(var(Payload){kz.json,Expires}{s.int}) / 1000) + NODES_FUDGE_FACTOR; + + $var(ProfileIdx) = $var(ProfileIdx) + 1; + } + } $var(Idx) = $var(Idx) + 1; } };