|
|
@ -1,15 +1,79 @@ |
|
|
######## Nodes role - pushes info to kazoo ######## |
|
|
######## Nodes role - pushes info to kazoo ######## |
|
|
|
|
|
|
|
|
|
|
|
#!ifndef NODES_EXPIRE |
|
|
|
|
|
#!define NODES_EXPIRE 10 |
|
|
|
|
|
#!endif |
|
|
|
|
|
|
|
|
|
|
|
#!ifndef NODES_FUDGE_FACTOR |
|
|
|
|
|
#!define NODES_FUDGE_FACTOR 3 |
|
|
|
|
|
#!endif |
|
|
|
|
|
|
|
|
|
|
|
modparam("htable", "htable", "nodes=>size=8;initval=0;autoexpire=180"); |
|
|
|
|
|
|
|
|
|
|
|
####### TIMER module ########## |
|
|
#!ifndef TIMER_LOADED |
|
|
#!ifndef TIMER_LOADED |
|
|
loadmodule "timer.so" |
|
|
loadmodule "timer.so" |
|
|
#!trydef TIMER_LOADED |
|
|
#!trydef TIMER_LOADED |
|
|
#!endif |
|
|
#!endif |
|
|
modparam("timer", "declare_timer", "NODES_TIMER=NODES_TIMER_ROUTE,5000,slow,enable"); |
|
|
|
|
|
|
|
|
modparam("timer", "declare_timer", "NODES_ADVERTISE_TIMER=NODES_ADVERTISE_ROUTE,5000,slow,enable"); |
|
|
|
|
|
modparam("timer", "declare_timer", "NODE_TRACK_TIMER=NODE_TRACK_ROUTE,500,fast,enable"); |
|
|
|
|
|
|
|
|
|
|
|
####### MQUEUE module ########## |
|
|
|
|
|
#!ifndef MQUEUE_LOADED |
|
|
|
|
|
loadmodule "mqueue.so" |
|
|
|
|
|
#!trydef MQUEUE_LOADED |
|
|
|
|
|
#!endif |
|
|
|
|
|
modparam("mqueue","mqueue", "name=node_track") |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
####### NODES Logic ######## |
|
|
####### NODES Logic ######## |
|
|
route[NODES_TIMER_ROUTE] |
|
|
|
|
|
|
|
|
route[NODES_ADVERTISE_ROUTE] |
|
|
{ |
|
|
{ |
|
|
$var(Payload) = '{"Event-Category" : "nodes", "Event-Name" : "advertise", "Expires" : 5000, "Used-Memory" : $(stat(real_used_size){s.int}), "Registrations" : $(stat(registered_users){s.int}), "WhApps" : {"kamailio" : {"Startup" : $Tb }} }'; |
|
|
$var(Payload) = '{"Event-Category" : "nodes", "Event-Name" : "advertise", "Expires" : 5000, "Used-Memory" : $(stat(real_used_size){s.int}), "Registrations" : $(stat(registered_users){s.int}), "WhApps" : {"kamailio" : {"Startup" : $Tb }} }'; |
|
|
kazoo_publish("nodes", "", $var(Payload)); |
|
|
kazoo_publish("nodes", "", $var(Payload)); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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"); |
|
|
|
|
|
} |
|
|
|
|
|
$sht(nodes=>$(kzE{kz.json,Node})) = $kzE; |
|
|
|
|
|
$shtex(nodes=>$(kzE{kz.json,Node})) = ($(kzE{kz.json,Expires}{s.int}) / 1000) + NODES_FUDGE_FACTOR; |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
event_route[htable:expired:nodes] |
|
|
|
|
|
{ |
|
|
|
|
|
if($shtrecord(key) =~ "::count$$") { |
|
|
|
|
|
if($shtrecord(value) == 0) { |
|
|
|
|
|
xlog("L_INFO", "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"); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
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; |
|
|
|
|
|
$var(runloop) = $var(runloop) + 1; |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
#!ifndef NODES_CUSTOM_BINDINGS |
|
|
|
|
|
route[NODES_BINDINGS] |
|
|
|
|
|
{ |
|
|
|
|
|
$var(payload) = "{ 'exchange' : 'nodes' , 'type' : 'fanout', 'queue' : 'nodes-MY_HOSTNAME', 'exclusive' : 0, 'federate' : 1}"; |
|
|
|
|
|
kazoo_subscribe("$var(payload)"); |
|
|
|
|
|
} |
|
|
|
|
|
#!endif |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# vim: tabstop=4 softtabstop=4 shiftwidth=4 expandtab |
|
|
# vim: tabstop=4 softtabstop=4 shiftwidth=4 expandtab |