2015-06-30 12:51:04 -04:00
from __future__ import print_function
from cPickle import load
from pprint import pprint
2015-06-30 21:59:13 -04:00
from time import ctime
2015-06-30 13:43:30 -04:00
from twisted . internet import reactor
from twisted . internet import task
from binascii import b2a_hex as h
2015-06-30 12:51:04 -04:00
# This is the only user-configuration necessary
# Tell the program where the pickle file is
2015-06-30 21:56:00 -04:00
# Tell the program how often to print a report
2015-06-30 21:38:04 -04:00
stat_file = ' ../dmrlink_stats.pickle '
2015-06-30 21:56:00 -04:00
frequency = 30
2015-06-30 12:51:04 -04:00
2015-06-30 13:43:30 -04:00
def int_id ( _hex_string ) :
return int ( h ( _hex_string ) , 16 )
2015-06-30 12:51:04 -04:00
def read_dict ( ) :
try :
with open ( stat_file , ' rb ' ) as file :
NETWORK = load ( file )
return NETWORK
except IOError as detail :
print ( ' I/O Error: {} ' . format ( detail ) )
except EOFError :
print ( ' EOFError ' )
2015-06-30 13:43:30 -04:00
def print_stats ( ) :
NETWORK = read_dict ( )
if NETWORK != " None " :
2015-06-30 21:59:13 -04:00
print ( ' NETWORK STATISTICS REPORT: ' , ctime ( ) )
2015-06-30 13:43:30 -04:00
for ipsc in NETWORK :
stat = NETWORK [ ipsc ] [ ' MASTER ' ] [ ' STATUS ' ]
print ( ipsc )
2015-06-30 21:47:22 -04:00
if ( NETWORK [ ipsc ] [ ' LOCAL ' ] [ ' MASTER_PEER ' ] ) :
print ( ' MASTER Information: ' )
print ( ' This DMRLink IPSC Instance is the Master ' )
else :
print ( ' MASTER Information: ' )
print ( ' RADIO ID: {} CONNECTED: {} , KEEP ALIVES: SENT {} RECEIVED {} MISSED {} ' . format ( str ( int_id ( NETWORK [ ipsc ] [ ' MASTER ' ] [ ' RADIO_ID ' ] ) ) . rjust ( 8 , ' 0 ' ) , stat [ ' CONNECTED ' ] , stat [ ' KEEP_ALIVES_SENT ' ] , stat [ ' KEEP_ALIVES_RECEIVED ' ] , stat [ ' KEEP_ALIVES_MISSED ' ] ) )
2015-06-30 13:43:30 -04:00
print ( ' PEER Information: ' )
for peer in NETWORK [ ipsc ] [ ' PEERS ' ] :
stat = NETWORK [ ipsc ] [ ' PEERS ' ] [ peer ] [ ' STATUS ' ]
2015-06-30 21:53:28 -04:00
if peer == NETWORK [ ipsc ] [ ' LOCAL ' ] [ ' RADIO_ID ' ] :
2015-06-30 21:54:15 -04:00
print ( ' RADIO ID: {} Is this DMRLink IPSC instance ' . format ( str ( int_id ( peer ) ) . rjust ( 8 , ' 0 ' ) ) )
2015-06-30 21:53:28 -04:00
else :
print ( ' RADIO ID: {} CONNECTED: {} , KEEP ALIVES: SENT {} RECEIVED {} MISSED {} ' . format ( str ( int_id ( peer ) ) . rjust ( 8 , ' 0 ' ) , stat [ ' CONNECTED ' ] , stat [ ' KEEP_ALIVES_SENT ' ] , stat [ ' KEEP_ALIVES_RECEIVED ' ] , stat [ ' KEEP_ALIVES_MISSED ' ] ) )
2015-06-30 13:43:30 -04:00
print ( )
2015-06-30 21:49:02 -04:00
print ( )
2015-06-30 13:43:30 -04:00
if __name__ == ' __main__ ' :
output_stats = task . LoopingCall ( print_stats )
2015-06-30 21:56:00 -04:00
output_stats . start ( frequency )
2015-06-30 13:43:30 -04:00
reactor . run ( )