|
|
|
@ -8,18 +8,20 @@ |
|
|
|
#!define NODES_FUDGE_FACTOR 10 |
|
|
|
#!endif |
|
|
|
|
|
|
|
modparam("htable", "htable", "nodes=>size=8;initval=0;autoexpire=180;"); |
|
|
|
modparam("htable", "htable", "media=>size=8;initval=0;autoexpire=180;"); |
|
|
|
modparam("htable", "htable", "nodes=>size=8;initval=0;autoexpire=60"); |
|
|
|
modparam("htable", "htable", "media=>size=8;initval=0;autoexpire=60"); |
|
|
|
|
|
|
|
####### RTIMER module ########## |
|
|
|
#!ifndef RTIMER_LOADED |
|
|
|
loadmodule "rtimer.so" |
|
|
|
#!trydef RTIMER_LOADED |
|
|
|
#!endif |
|
|
|
modparam("rtimer", "timer", "name=ta;interval=5;mode=2;") |
|
|
|
modparam("rtimer", "exec", "timer=ta;route=NODES_ADVERTISE_ROUTE") |
|
|
|
modparam("rtimer", "exec", "timer=ta;route=NODE_TRACK_ROUTE") |
|
|
|
modparam("rtimer", "timer", "name=ta;interval=2;mode=2;") |
|
|
|
modparam("rtimer", "timer", "name=retry;interval=5;mode=2;") |
|
|
|
modparam("rtimer", "timer", "name=pub;interval=10;mode=1;") |
|
|
|
modparam("rtimer", "exec", "timer=ta;route=NODE_HEARTBEAT_ROUTE") |
|
|
|
modparam("rtimer", "exec", "timer=retry;route=NODE_TRACK_ROUTE") |
|
|
|
modparam("rtimer", "exec", "timer=pub;route=NODES_ADVERTISE_ROUTE") |
|
|
|
|
|
|
|
|
|
|
|
modparam("mqueue","mqueue", "name=node_track") |
|
|
|
@ -59,7 +61,7 @@ route(LISTENER_STATUS); |
|
|
|
#!endif |
|
|
|
|
|
|
|
$var(Roles) = $_s("Roles" : {"Proxy" : $var(listeners) $var(Dispatcher) $var(Presence) $var(Registrar)}); |
|
|
|
$var(Payload) = '{"Event-Category" : "nodes", "Event-Name" : "advertise", "Expires" : 5000, "Used-Memory" : $(stat(real_used_size){s.int}), "Startup" : $Tb, "WhApps" : {"kamailio" : {"Startup" : $Tb }}, $var(Roles)}'; |
|
|
|
$var(Payload) = '{"Event-Category" : "nodes", "Event-Name" : "advertise", "Expires" : 15000, "Used-Memory" : $(stat(real_used_size){s.int}), "Startup" : $Tb, "WhApps" : {"kamailio" : {"Startup" : $Tb }}, $var(Roles)}'; |
|
|
|
kazoo_publish("nodes", "", $var(Payload)); |
|
|
|
} |
|
|
|
|
|
|
|
@ -68,11 +70,13 @@ event_route[kazoo:consumer-event-nodes-advertise] |
|
|
|
{ |
|
|
|
$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"); |
|
|
|
xlog("L_WARNING", "$(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"); |
|
|
|
xlog("L_WARNING", "$(kzE{kz.json,Msg-ID})|nodes|hearbeat from new node $(kzE{kz.json,Node})\n"); |
|
|
|
} else { |
|
|
|
xlog("L_DEBUG", "$(kzE{kz.json,Msg-ID})|nodes|hearbeat from existing node $(kzE{kz.json,Node})\n"); |
|
|
|
} |
|
|
|
} |
|
|
|
mq_add("node_heartbeat", "$(kzE{kz.json,Node})", "$kzE"); |
|
|
|
@ -82,13 +86,13 @@ event_route[htable:expired:nodes] |
|
|
|
{ |
|
|
|
if($shtrecord(key) =~ "::count$$") { |
|
|
|
if($shtrecord(value) == -1) { |
|
|
|
xlog("L_INFO", "htable|nodes|node $(shtrecord(key){s.rm,::count}) is still unreachable\n"); |
|
|
|
xlog("L_WARNING", "htable|nodes|node $(shtrecord(key){s.rm,::count}) is still unreachable\n"); |
|
|
|
} |
|
|
|
mq_add("node_track", "$shtrecord(key)", ""); |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
xlog("L_INFO", "htable|nodes|hearbeat expired for node $shtrecord(key)\n"); |
|
|
|
xlog("L_WARNING", "htable|nodes|hearbeat expired for node $shtrecord(key)\n"); |
|
|
|
} |
|
|
|
|
|
|
|
route[NODE_TRACK_ROUTE] |
|
|
|
@ -108,6 +112,7 @@ route[NODE_HEARTBEAT_ROUTE] |
|
|
|
while(mq_fetch("node_heartbeat") == 1 && $var(runloop) < MAX_WHILE_LOOPS) { |
|
|
|
$var(Node) = $mqk(node_heartbeat); |
|
|
|
$var(Payload) = $mqv(node_heartbeat); |
|
|
|
xlog("L_DEBUG", "$(var(Payload){kz.json,Msg-ID})|nodes|processing hearbeat for node $var(Node)\n"); |
|
|
|
|
|
|
|
route(CHECK_MEDIA_SERVERS); |
|
|
|
|
|
|
|
@ -149,6 +154,7 @@ route[CHECK_MEDIA_SERVERS] |
|
|
|
route(MEDIA_SERVER_UP); |
|
|
|
}; |
|
|
|
$var(MediaExpire) = ($(var(Payload){kz.json,Expires}{s.int}) / 1000) + NODES_FUDGE_FACTOR; |
|
|
|
xlog("L_DEBUG", "nodes|media|$var(Node) media expiration $var(MediaExpire) for $var(MediaUrl)\n"); |
|
|
|
$shtex(media=>$var(MediaUrl)::count) = $var(MediaExpire); |
|
|
|
$var(ProfileIdx) = $var(ProfileIdx) + 1; |
|
|
|
} |
|
|
|
@ -167,7 +173,7 @@ event_route[htable:expired:media] |
|
|
|
|
|
|
|
route[MEDIA_SERVER_UP] |
|
|
|
{ |
|
|
|
xlog("L_INFO", "nodes|media|$var(Node) reported new media server $var(MediaUrl) in zone $var(Zone)\n"); |
|
|
|
xlog("L_WARNING", "nodes|media|$var(Node) reported new media server $var(MediaUrl) in zone $var(Zone)\n"); |
|
|
|
|
|
|
|
#!ifdef DISPATCHER_ROLE |
|
|
|
route(DISPATCHER_CHECK_MEDIA_SERVER); |
|
|
|
@ -181,7 +187,7 @@ route[MEDIA_SERVER_UP] |
|
|
|
|
|
|
|
route[MEDIA_SERVER_DOWN] |
|
|
|
{ |
|
|
|
xlog("L_INFO", "htable|media|hearbeat expired for media server $var(MediaUrl) in zone $var(Zone)\n"); |
|
|
|
xlog("L_WARNING", "htable|media|hearbeat expired for media server $var(MediaUrl) in zone $var(Zone)\n"); |
|
|
|
|
|
|
|
#!ifdef PRESENCE_ROLE |
|
|
|
route(RESET_PUBLISHER); |
|
|
|
|