mirror of
https://github.com/ShaYmez/HBmonitor.git
synced 2024-11-21 23:45:17 -05:00
Updates
This commit is contained in:
parent
3d7b372b13
commit
2ae84b8fe8
@ -106,7 +106,7 @@ def alias_short(_id, _dict):
|
|||||||
return ', '.join(alias)
|
return ', '.join(alias)
|
||||||
else:
|
else:
|
||||||
return str(alias)
|
return str(alias)
|
||||||
|
|
||||||
def alias_call(_id, _dict):
|
def alias_call(_id, _dict):
|
||||||
alias = get_alias(_id, _dict, 'CALLSIGN')
|
alias = get_alias(_id, _dict, 'CALLSIGN')
|
||||||
if type(alias) == list:
|
if type(alias) == list:
|
||||||
@ -119,7 +119,7 @@ def alias_call(_id, _dict):
|
|||||||
|
|
||||||
# Build the HBlink connections table
|
# Build the HBlink connections table
|
||||||
def build_hblink_table(_config, _stats_table):
|
def build_hblink_table(_config, _stats_table):
|
||||||
for _hbp, _hbp_data in _config.iteritems():
|
for _hbp, _hbp_data in _config.iteritems():
|
||||||
if _hbp_data['ENABLED'] == True:
|
if _hbp_data['ENABLED'] == True:
|
||||||
if _hbp_data['MODE'] == 'MASTER':
|
if _hbp_data['MODE'] == 'MASTER':
|
||||||
_stats_table['MASTERS'][_hbp] = {}
|
_stats_table['MASTERS'][_hbp] = {}
|
||||||
@ -168,20 +168,18 @@ def build_hblink_table(_config, _stats_table):
|
|||||||
_stats_table['OPENBRIDGES'][_hbp]['TARGET_IP'] = _hbp_data['TARGET_IP']
|
_stats_table['OPENBRIDGES'][_hbp]['TARGET_IP'] = _hbp_data['TARGET_IP']
|
||||||
_stats_table['OPENBRIDGES'][_hbp]['TARGET_PORT'] = _hbp_data['TARGET_PORT']
|
_stats_table['OPENBRIDGES'][_hbp]['TARGET_PORT'] = _hbp_data['TARGET_PORT']
|
||||||
return(_stats_table)
|
return(_stats_table)
|
||||||
|
|
||||||
def update_hblink_table(_config, _stats_table):
|
def update_hblink_table(_config, _stats_table):
|
||||||
|
pass
|
||||||
pprint(_config)
|
'''
|
||||||
print
|
|
||||||
pprint(_stats_table)
|
|
||||||
for _hbp, _hbp_data in _config.iteritems():
|
for _hbp, _hbp_data in _config.iteritems():
|
||||||
_stats_peers = _stats_table['MASTERS'][_hbp]['PEERS']
|
_stats_peers = _stats_table['MASTERS'][_hbp]['PEERS']
|
||||||
|
|
||||||
# if this peer is the master
|
# if this peer is the master
|
||||||
if _stats_table[_ipsc]['MASTER'] == False:
|
if _stats_table[_ipsc]['MASTER'] == False:
|
||||||
_peer = _config[_ipsc]['MASTER']['RADIO_ID']
|
_peer = _config[_ipsc]['MASTER']['RADIO_ID']
|
||||||
_config_peer_data = _config[_ipsc]['MASTER']
|
_config_peer_data = _config[_ipsc]['MASTER']
|
||||||
|
|
||||||
_stats_peers[_peer]['RADIO_ID'] = int_id(_peer)
|
_stats_peers[_peer]['RADIO_ID'] = int_id(_peer)
|
||||||
update_peer(_stats_peers, _peer, _config_peer_data)
|
update_peer(_stats_peers, _peer, _config_peer_data)
|
||||||
|
|
||||||
@ -189,26 +187,26 @@ def update_hblink_table(_config, _stats_table):
|
|||||||
for _peer, _config_peer_data in _config[_ipsc]['PEERS'].iteritems():
|
for _peer, _config_peer_data in _config[_ipsc]['PEERS'].iteritems():
|
||||||
if _peer != _config[_ipsc]['LOCAL']['RADIO_ID']:
|
if _peer != _config[_ipsc]['LOCAL']['RADIO_ID']:
|
||||||
_stats_peers = _stats_table[_ipsc]['PEERS']
|
_stats_peers = _stats_table[_ipsc]['PEERS']
|
||||||
|
|
||||||
# update the peer if we already have it
|
# update the peer if we already have it
|
||||||
if _peer in _stats_table[_ipsc]['PEERS']:
|
if _peer in _stats_table[_ipsc]['PEERS']:
|
||||||
update_peer(_stats_peers, _peer, _config_peer_data)
|
update_peer(_stats_peers, _peer, _config_peer_data)
|
||||||
|
|
||||||
# addit if we don't have it
|
# addit if we don't have it
|
||||||
if _peer not in _stats_table[_ipsc]['PEERS']:
|
if _peer not in _stats_table[_ipsc]['PEERS']:
|
||||||
add_peer(_stats_peers, _peer, _config_peer_data, 'peer')
|
add_peer(_stats_peers, _peer, _config_peer_data, 'peer')
|
||||||
|
|
||||||
# for peers that need to be removed, never the master. This is complicated
|
# for peers that need to be removed, never the master. This is complicated
|
||||||
peers_to_delete = []
|
peers_to_delete = []
|
||||||
|
|
||||||
# find any peers missing in the config update
|
# find any peers missing in the config update
|
||||||
for _peer, _stats_peer_data in _stats_table[_ipsc]['PEERS'].iteritems():
|
for _peer, _stats_peer_data in _stats_table[_ipsc]['PEERS'].iteritems():
|
||||||
if _peer not in _config[_ipsc]['PEERS'] and _peer != _config[_ipsc]['MASTER']['RADIO_ID']:
|
if _peer not in _config[_ipsc]['PEERS'] and _peer != _config[_ipsc]['MASTER']['RADIO_ID']:
|
||||||
peers_to_delete.append(_peer)
|
peers_to_delete.append(_peer)
|
||||||
|
|
||||||
# delte anything identified from the right part of the stats table
|
# delte anything identified from the right part of the stats table
|
||||||
delete_peers(peers_to_delete, _stats_table[_ipsc]['PEERS'])
|
delete_peers(peers_to_delete, _stats_table[_ipsc]['PEERS'])
|
||||||
|
'''
|
||||||
#
|
#
|
||||||
# CONFBRIDGE TABLE FUNCTIONS
|
# CONFBRIDGE TABLE FUNCTIONS
|
||||||
#
|
#
|
||||||
@ -216,7 +214,7 @@ def build_bridge_table(_bridges):
|
|||||||
_stats_table = {}
|
_stats_table = {}
|
||||||
_now = time()
|
_now = time()
|
||||||
_cnow = strftime('%Y-%m-%d %H:%M:%S', localtime(_now))
|
_cnow = strftime('%Y-%m-%d %H:%M:%S', localtime(_now))
|
||||||
|
|
||||||
for _bridge, _bridge_data in _bridges.iteritems():
|
for _bridge, _bridge_data in _bridges.iteritems():
|
||||||
_stats_table[_bridge] = {}
|
_stats_table[_bridge] = {}
|
||||||
|
|
||||||
@ -224,7 +222,7 @@ def build_bridge_table(_bridges):
|
|||||||
_stats_table[_bridge][system['SYSTEM']] = {}
|
_stats_table[_bridge][system['SYSTEM']] = {}
|
||||||
_stats_table[_bridge][system['SYSTEM']]['TS'] = system['TS']
|
_stats_table[_bridge][system['SYSTEM']]['TS'] = system['TS']
|
||||||
_stats_table[_bridge][system['SYSTEM']]['TGID'] = int_id(system['TGID'])
|
_stats_table[_bridge][system['SYSTEM']]['TGID'] = int_id(system['TGID'])
|
||||||
|
|
||||||
if system['TO_TYPE'] == 'ON' or system['TO_TYPE'] == 'OFF':
|
if system['TO_TYPE'] == 'ON' or system['TO_TYPE'] == 'OFF':
|
||||||
if system['TIMER'] - _now > 0:
|
if system['TIMER'] - _now > 0:
|
||||||
_stats_table[_bridge][system['SYSTEM']]['EXP_TIME'] = int(system['TIMER'] - _now)
|
_stats_table[_bridge][system['SYSTEM']]['EXP_TIME'] = int(system['TIMER'] - _now)
|
||||||
@ -237,22 +235,22 @@ def build_bridge_table(_bridges):
|
|||||||
else:
|
else:
|
||||||
_stats_table[_bridge][system['SYSTEM']]['EXP_TIME'] = 'N/A'
|
_stats_table[_bridge][system['SYSTEM']]['EXP_TIME'] = 'N/A'
|
||||||
_stats_table[_bridge][system['SYSTEM']]['TO_ACTION'] = 'None'
|
_stats_table[_bridge][system['SYSTEM']]['TO_ACTION'] = 'None'
|
||||||
|
|
||||||
if system['ACTIVE'] == True:
|
if system['ACTIVE'] == True:
|
||||||
_stats_table[_bridge][system['SYSTEM']]['ACTIVE'] = 'Connected'
|
_stats_table[_bridge][system['SYSTEM']]['ACTIVE'] = 'Connected'
|
||||||
_stats_table[_bridge][system['SYSTEM']]['COLOR'] = GREEN
|
_stats_table[_bridge][system['SYSTEM']]['COLOR'] = GREEN
|
||||||
elif system['ACTIVE'] == False:
|
elif system['ACTIVE'] == False:
|
||||||
_stats_table[_bridge][system['SYSTEM']]['ACTIVE'] = 'Disconnected'
|
_stats_table[_bridge][system['SYSTEM']]['ACTIVE'] = 'Disconnected'
|
||||||
_stats_table[_bridge][system['SYSTEM']]['COLOR'] = RED
|
_stats_table[_bridge][system['SYSTEM']]['COLOR'] = RED
|
||||||
|
|
||||||
for i in range(len(system['ON'])):
|
for i in range(len(system['ON'])):
|
||||||
system['ON'][i] = str(int_id(system['ON'][i]))
|
system['ON'][i] = str(int_id(system['ON'][i]))
|
||||||
|
|
||||||
_stats_table[_bridge][system['SYSTEM']]['TRIG_ON'] = ', '.join(system['ON'])
|
_stats_table[_bridge][system['SYSTEM']]['TRIG_ON'] = ', '.join(system['ON'])
|
||||||
|
|
||||||
for i in range(len(system['OFF'])):
|
for i in range(len(system['OFF'])):
|
||||||
system['OFF'][i] = str(int_id(system['OFF'][i]))
|
system['OFF'][i] = str(int_id(system['OFF'][i]))
|
||||||
|
|
||||||
_stats_table[_bridge][system['SYSTEM']]['TRIG_OFF'] = ', '.join(system['OFF'])
|
_stats_table[_bridge][system['SYSTEM']]['TRIG_OFF'] = ', '.join(system['OFF'])
|
||||||
return _stats_table
|
return _stats_table
|
||||||
|
|
||||||
@ -294,7 +292,7 @@ def table_update(p):
|
|||||||
CTABLE['MASTERS'][system]['PEERS'][sourcePeer][timeSlot]['TYPE'] = ''
|
CTABLE['MASTERS'][system]['PEERS'][sourcePeer][timeSlot]['TYPE'] = ''
|
||||||
CTABLE['MASTERS'][system]['PEERS'][sourcePeer][timeSlot]['SUB'] = ''
|
CTABLE['MASTERS'][system]['PEERS'][sourcePeer][timeSlot]['SUB'] = ''
|
||||||
CTABLE['MASTERS'][system]['PEERS'][sourcePeer][timeSlot]['SRC'] = ''
|
CTABLE['MASTERS'][system]['PEERS'][sourcePeer][timeSlot]['SRC'] = ''
|
||||||
CTABLE['MASTERS'][system]['PEERS'][sourcePeer][timeSlot]['DEST'] = ''
|
CTABLE['MASTERS'][system]['PEERS'][sourcePeer][timeSlot]['DEST'] = ''
|
||||||
|
|
||||||
build_stats()
|
build_stats()
|
||||||
#
|
#
|
||||||
@ -304,25 +302,25 @@ def process_message(_message):
|
|||||||
global CTABLE, CONFIG, BRIDGES, CONFIG_RX, BRIDGES_RX
|
global CTABLE, CONFIG, BRIDGES, CONFIG_RX, BRIDGES_RX
|
||||||
opcode = _message[:1]
|
opcode = _message[:1]
|
||||||
_now = strftime('%Y-%m-%d %H:%M:%S %Z', localtime(time()))
|
_now = strftime('%Y-%m-%d %H:%M:%S %Z', localtime(time()))
|
||||||
|
|
||||||
if opcode == OPCODE['CONFIG_SND']:
|
if opcode == OPCODE['CONFIG_SND']:
|
||||||
logging.debug('got CONFIG_SND opcode')
|
logging.debug('got CONFIG_SND opcode')
|
||||||
CONFIG = load_dictionary(_message)
|
CONFIG = load_dictionary(_message)
|
||||||
CONFIG_RX = strftime('%Y-%m-%d %H:%M:%S', localtime(time()))
|
CONFIG_RX = strftime('%Y-%m-%d %H:%M:%S', localtime(time()))
|
||||||
if CTABLE:
|
if False: #CTABLE:
|
||||||
update_hblink_table(CONFIG, CTABLE)
|
update_hblink_table(CONFIG, CTABLE)
|
||||||
else:
|
else:
|
||||||
build_hblink_table(CONFIG, CTABLE)
|
build_hblink_table(CONFIG, CTABLE)
|
||||||
|
|
||||||
elif opcode == OPCODE['BRIDGE_SND']:
|
elif opcode == OPCODE['BRIDGE_SND']:
|
||||||
logging.debug('got BRIDGE_SND opcode')
|
logging.debug('got BRIDGE_SND opcode')
|
||||||
BRIDGES = load_dictionary(_message)
|
BRIDGES = load_dictionary(_message)
|
||||||
BRIDGES_RX = strftime('%Y-%m-%d %H:%M:%S', localtime(time()))
|
BRIDGES_RX = strftime('%Y-%m-%d %H:%M:%S', localtime(time()))
|
||||||
BTABLE['BRIDGES'] = build_bridge_table(BRIDGES)
|
BTABLE['BRIDGES'] = build_bridge_table(BRIDGES)
|
||||||
|
|
||||||
elif opcode == OPCODE['LINK_EVENT']:
|
elif opcode == OPCODE['LINK_EVENT']:
|
||||||
logging.info('LINK_EVENT Received: {}'.format(repr(_message[1:])))
|
logging.info('LINK_EVENT Received: {}'.format(repr(_message[1:])))
|
||||||
|
|
||||||
elif opcode == OPCODE['BRDG_EVENT']:
|
elif opcode == OPCODE['BRDG_EVENT']:
|
||||||
logging.info('BRIDGE EVENT: {}'.format(repr(_message[1:])))
|
logging.info('BRIDGE EVENT: {}'.format(repr(_message[1:])))
|
||||||
p = _message[1:].split(",")
|
p = _message[1:].split(",")
|
||||||
@ -338,7 +336,7 @@ def process_message(_message):
|
|||||||
log_message = '{}: UNKNOWN GROUP VOICE LOG MESSAGE'.format(_now)
|
log_message = '{}: UNKNOWN GROUP VOICE LOG MESSAGE'.format(_now)
|
||||||
else:
|
else:
|
||||||
log_message = '{}: UNKNOWN LOG MESSAGE'.format(_now)
|
log_message = '{}: UNKNOWN LOG MESSAGE'.format(_now)
|
||||||
|
|
||||||
dashboard_server.broadcast('l' + log_message)
|
dashboard_server.broadcast('l' + log_message)
|
||||||
LOGBUF.append(log_message)
|
LOGBUF.append(log_message)
|
||||||
else:
|
else:
|
||||||
@ -362,7 +360,7 @@ class report(NetstringReceiver):
|
|||||||
|
|
||||||
def connectionLost(self, reason):
|
def connectionLost(self, reason):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def stringReceived(self, data):
|
def stringReceived(self, data):
|
||||||
process_message(data)
|
process_message(data)
|
||||||
|
|
||||||
@ -370,7 +368,7 @@ class report(NetstringReceiver):
|
|||||||
class reportClientFactory(ReconnectingClientFactory):
|
class reportClientFactory(ReconnectingClientFactory):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
logging.info('reportClient object for connecting to HBlink.py created at: %s', self)
|
logging.info('reportClient object for connecting to HBlink.py created at: %s', self)
|
||||||
|
|
||||||
def startedConnecting(self, connector):
|
def startedConnecting(self, connector):
|
||||||
logging.info('Initiating Connection to Server.')
|
logging.info('Initiating Connection to Server.')
|
||||||
if 'dashboard_server' in locals() or 'dashboard_server' in globals():
|
if 'dashboard_server' in locals() or 'dashboard_server' in globals():
|
||||||
@ -396,7 +394,7 @@ class reportClientFactory(ReconnectingClientFactory):
|
|||||||
# WEBSOCKET COMMUNICATION WITH THE DASHBOARD CLIENT
|
# WEBSOCKET COMMUNICATION WITH THE DASHBOARD CLIENT
|
||||||
#
|
#
|
||||||
class dashboard(WebSocketServerProtocol):
|
class dashboard(WebSocketServerProtocol):
|
||||||
|
|
||||||
def onConnect(self, request):
|
def onConnect(self, request):
|
||||||
logging.info('Client connecting: %s', request.peer)
|
logging.info('Client connecting: %s', request.peer)
|
||||||
|
|
||||||
@ -444,7 +442,7 @@ class dashboardFactory(WebSocketServerFactory):
|
|||||||
for c in self.clients:
|
for c in self.clients:
|
||||||
c.sendMessage(msg.encode('utf8'))
|
c.sendMessage(msg.encode('utf8'))
|
||||||
logging.debug('message sent to %s', c.peer)
|
logging.debug('message sent to %s', c.peer)
|
||||||
|
|
||||||
#
|
#
|
||||||
# STATIC WEBSERVER
|
# STATIC WEBSERVER
|
||||||
#
|
#
|
||||||
@ -464,37 +462,37 @@ if __name__ == '__main__':
|
|||||||
logging.basicConfig(level=logging.INFO,filename = (LOG_PATH + LOG_NAME), filemode='a')
|
logging.basicConfig(level=logging.INFO,filename = (LOG_PATH + LOG_NAME), filemode='a')
|
||||||
|
|
||||||
logging.info('web_tables.py starting up')
|
logging.info('web_tables.py starting up')
|
||||||
|
|
||||||
# Download alias files
|
# Download alias files
|
||||||
result = try_download(PATH, 'peer_ids.csv', PEER_URL, (FILE_RELOAD * 86400))
|
result = try_download(PATH, 'peer_ids.csv', PEER_URL, (FILE_RELOAD * 86400))
|
||||||
logging.info(result)
|
logging.info(result)
|
||||||
|
|
||||||
result = try_download(PATH, 'subscriber_ids.csv', SUBSCRIBER_URL, (FILE_RELOAD * 86400))
|
result = try_download(PATH, 'subscriber_ids.csv', SUBSCRIBER_URL, (FILE_RELOAD * 86400))
|
||||||
logging.info(result)
|
logging.info(result)
|
||||||
|
|
||||||
# Make Alias Dictionaries
|
# Make Alias Dictionaries
|
||||||
peer_ids = mk_full_id_dict(PATH, PEER_FILE, 'peer')
|
peer_ids = mk_full_id_dict(PATH, PEER_FILE, 'peer')
|
||||||
if peer_ids:
|
if peer_ids:
|
||||||
logging.info('ID ALIAS MAPPER: peer_ids dictionary is available')
|
logging.info('ID ALIAS MAPPER: peer_ids dictionary is available')
|
||||||
|
|
||||||
subscriber_ids = mk_full_id_dict(PATH, SUBSCRIBER_FILE, 'subscriber')
|
subscriber_ids = mk_full_id_dict(PATH, SUBSCRIBER_FILE, 'subscriber')
|
||||||
if subscriber_ids:
|
if subscriber_ids:
|
||||||
logging.info('ID ALIAS MAPPER: subscriber_ids dictionary is available')
|
logging.info('ID ALIAS MAPPER: subscriber_ids dictionary is available')
|
||||||
|
|
||||||
talkgroup_ids = mk_full_id_dict(PATH, TGID_FILE, 'tgid')
|
talkgroup_ids = mk_full_id_dict(PATH, TGID_FILE, 'tgid')
|
||||||
if talkgroup_ids:
|
if talkgroup_ids:
|
||||||
logging.info('ID ALIAS MAPPER: talkgroup_ids dictionary is available')
|
logging.info('ID ALIAS MAPPER: talkgroup_ids dictionary is available')
|
||||||
|
|
||||||
local_subscriber_ids = mk_full_id_dict(PATH, LOCAL_SUB_FILE, 'subscriber')
|
local_subscriber_ids = mk_full_id_dict(PATH, LOCAL_SUB_FILE, 'subscriber')
|
||||||
if local_subscriber_ids:
|
if local_subscriber_ids:
|
||||||
logging.info('ID ALIAS MAPPER: local_subscriber_ids added to subscriber_ids dictionary')
|
logging.info('ID ALIAS MAPPER: local_subscriber_ids added to subscriber_ids dictionary')
|
||||||
subscriber_ids.update(local_subscriber_ids)
|
subscriber_ids.update(local_subscriber_ids)
|
||||||
|
|
||||||
local_peer_ids = mk_full_id_dict(PATH, LOCAL_PEER_FILE, 'peer')
|
local_peer_ids = mk_full_id_dict(PATH, LOCAL_PEER_FILE, 'peer')
|
||||||
if local_peer_ids:
|
if local_peer_ids:
|
||||||
logging.info('ID ALIAS MAPPER: local_peer_ids added peer_ids dictionary')
|
logging.info('ID ALIAS MAPPER: local_peer_ids added peer_ids dictionary')
|
||||||
peer_ids.update(local_peer_ids)
|
peer_ids.update(local_peer_ids)
|
||||||
|
|
||||||
# Jinja2 Stuff
|
# Jinja2 Stuff
|
||||||
env = Environment(
|
env = Environment(
|
||||||
loader=PackageLoader('web_tables', 'templates'),
|
loader=PackageLoader('web_tables', 'templates'),
|
||||||
@ -503,18 +501,18 @@ if __name__ == '__main__':
|
|||||||
|
|
||||||
dtemplate = env.get_template('hblink_table.html')
|
dtemplate = env.get_template('hblink_table.html')
|
||||||
btemplate = env.get_template('bridge_table.html')
|
btemplate = env.get_template('bridge_table.html')
|
||||||
|
|
||||||
# Create Static Website index file
|
# Create Static Website index file
|
||||||
index_html = get_template(PATH + 'index_template.html')
|
index_html = get_template(PATH + 'index_template.html')
|
||||||
index_html = index_html.replace('<<<system_name>>>', REPORT_NAME)
|
index_html = index_html.replace('<<<system_name>>>', REPORT_NAME)
|
||||||
|
|
||||||
# Start update loop
|
# Start update loop
|
||||||
update_stats = task.LoopingCall(build_stats)
|
update_stats = task.LoopingCall(build_stats)
|
||||||
update_stats.start(FREQUENCY)
|
update_stats.start(FREQUENCY)
|
||||||
|
|
||||||
# Connect to HBlink
|
# Connect to HBlink
|
||||||
reactor.connectTCP(HBLINK_IP, HBLINK_PORT, reportClientFactory())
|
reactor.connectTCP(HBLINK_IP, HBLINK_PORT, reportClientFactory())
|
||||||
|
|
||||||
# Create websocket server to push content to clients
|
# Create websocket server to push content to clients
|
||||||
dashboard_server = dashboardFactory('ws://*:9000')
|
dashboard_server = dashboardFactory('ws://*:9000')
|
||||||
dashboard_server.protocol = dashboard
|
dashboard_server.protocol = dashboard
|
||||||
|
Loading…
Reference in New Issue
Block a user