Move rule_timer_loop, statTrimmer, kaReporting to background threads to prevent reactor blocking during voice broadcasts - all logs preserved

pull/26/head
Joaquin Madrid Belando 2 weeks ago
parent 11a8226b00
commit f75fb358d0

@ -363,6 +363,7 @@ def deactivate_all_dynamic_bridges(system_name):
### MODIFIED: Core logic updated to handle special TGIDs (9990-9999) correctly with SINGLE_MODE
def rule_timer_loop():
logger.debug('(ROUTER) routerHBP Rule timer loop started')
_now = time()
_remove_bridges = deque()
@ -401,9 +402,9 @@ def rule_timer_loop():
if _system['SYSTEM'] not in _active_dynamic_bridges:
_active_dynamic_bridges[_system['SYSTEM']] = []
_active_dynamic_bridges[_system['SYSTEM']].append((_bridge, _system))
pass
logger.debug('(ROUTER) Conference Bridge ACTIVE (INFINITE TIMER): System: %s Bridge: %s, TS: %s, TGID: %s', _system['SYSTEM'], _bridge, _system['TS'], int_id(_system['TGID']))
else:
pass
logger.debug('(ROUTER) Conference Bridge INACTIVE (no change): System: %s Bridge: %s, TS: %s, TGID: %s', _system['SYSTEM'], _bridge, _system['TS'], int_id(_system['TGID']))
elif _system['TO_TYPE'] == 'OFF':
if _system['ACTIVE'] == False:
# Activar inmediatamente sin timer
@ -412,6 +413,7 @@ def rule_timer_loop():
logger.info('(ROUTER) Conference Bridge ACTIVATED (NO TIMEOUT): System: %s, Bridge: %s, TS: %s, TGID: %s', _system['SYSTEM'], _bridge, _system['TS'], int_id(_system['TGID']))
else:
_bridge_used = True
logger.debug('(ROUTER) Conference Bridge ACTIVE (no change): System: %s Bridge: %s, TS: %s, TGID: %s', _system['SYSTEM'], _bridge, _system['TS'], int_id(_system['TGID']))
else:
# COMPORTAMIENTO ORIGINAL (SINGLE MODE ACTIVADO o bridges estáticos o TGIDs especiales)
if _system['TO_TYPE'] == 'ON':
@ -427,7 +429,7 @@ def rule_timer_loop():
_bridge_used = True
logger.info('(ROUTER) Conference Bridge ACTIVE (ON timer running): System: %s Bridge: %s, TS: %s, TGID: %s, Timeout in: %.2fs,', _system['SYSTEM'], _bridge, _system['TS'], int_id(_system['TGID']), timeout_in)
elif _system['ACTIVE'] == False:
pass
logger.debug('(ROUTER) Conference Bridge INACTIVE (no change): System: %s Bridge: %s, TS: %s, TGID: %s', _system['SYSTEM'], _bridge, _system['TS'], int_id(_system['TGID']))
elif _system['TO_TYPE'] == 'OFF':
if _system['ACTIVE'] == False:
if _system['TIMER'] < _now:
@ -440,11 +442,13 @@ def rule_timer_loop():
logger.info('(ROUTER) Conference Bridge INACTIVE (OFF timer running): System: %s Bridge: %s, TS: %s, TGID: %s, Timeout in: %.2fs,', _system['SYSTEM'], _bridge, _system['TS'], int_id(_system['TGID']), timeout_in)
elif _system['ACTIVE'] == True:
_bridge_used = True
logger.debug('(ROUTER) Conference Bridge ACTIVE (no change): System: %s Bridge: %s, TS: %s, TGID: %s', _system['SYSTEM'], _bridge, _system['TS'], int_id(_system['TGID']))
else:
if _system['SYSTEM'][0:3] != 'OBP':
_bridge_used = True
elif _system['SYSTEM'][0:3] == 'OBP' and _system['TO_TYPE'] == 'STAT':
_bridge_used = True
logger.debug('(ROUTER) Conference Bridge NO ACTION: System: %s, Bridge: %s, TS: %s, TGID: %s', _system['SYSTEM'], _bridge, _system['TS'], int_id(_system['TGID']))
if _bridge_used == False:
_remove_bridges.append(_bridge)
@ -454,12 +458,12 @@ def rule_timer_loop():
logger.debug('(ROUTER) Unused conference bridge %s removed',_bridgerem)
if CONFIG['REPORTS']['REPORT']:
report_server.send_clients(b'bridge updated')
reactor.callFromThread(report_server.send_clients, b'bridge updated')
### END MODIFIED ###
def statTrimmer():
pass
logger.debug('(ROUTER) STAT trimmer loop started')
_remove_bridges = deque()
for _bridge in BRIDGES:
_bridge_stat = False
@ -539,7 +543,7 @@ def bridgeDebug():
logger.info('(BRIDGEDEBUG) The server currently has %s STATic bridges',statroll)
def kaReporting():
pass
logger.debug('(ROUTER) KeepAlive reporting loop started')
for system in systems:
if CONFIG['SYSTEMS'][system]['MODE'] == 'OPENBRIDGE':
if CONFIG['SYSTEMS'][system]['ENHANCED_OBP']:
@ -3706,7 +3710,9 @@ if __name__ == '__main__':
# logger.info('(API) API not started')
# Initialize the rule timer -- this if for user activated stuff
rule_timer_task = task.LoopingCall(rule_timer_loop)
def _rule_timer_in_thread():
return threads.deferToThread(rule_timer_loop)
rule_timer_task = task.LoopingCall(_rule_timer_in_thread)
rule_timer = rule_timer_task.start(52)
rule_timer.addErrback(loopingErrHandle)
@ -3739,12 +3745,16 @@ if __name__ == '__main__':
#STAT trimmer - once every 5 mins (roughly - shifted so all timed tasks don't run at once
if CONFIG['GLOBAL']['GEN_STAT_BRIDGES']:
stat_trimmer_task = task.LoopingCall(statTrimmer)
def _stat_trimmer_in_thread():
return threads.deferToThread(statTrimmer)
stat_trimmer_task = task.LoopingCall(_stat_trimmer_in_thread)
stat_trimmer = stat_trimmer_task.start(303)#3600
stat_trimmer.addErrback(loopingErrHandle)
#KA Reporting
ka_task = task.LoopingCall(kaReporting)
def _ka_reporting_in_thread():
return threads.deferToThread(kaReporting)
ka_task = task.LoopingCall(_ka_reporting_in_thread)
ka = ka_task.start(60)
ka.addErrback(loopingErrHandle)

Loading…
Cancel
Save

Powered by TurnKey Linux.