|
|
|
@ -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; |
|
|
|
} |
|
|
|
}; |
|
|
|
|