Browse Source

support multiple profiles in nodes

KAZOO-5650
lazedo 9 years ago
committed by GitHub
parent
commit
7e3788a824
1 changed files with 32 additions and 18 deletions
  1. +32
    -18
      kamailio/nodes-role.cfg

+ 32
- 18
kamailio/nodes-role.cfg View File

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


Loading…
Cancel
Save