mirror of
https://github.com/ShaYmez/pYSFReflector.git
synced 2024-11-16 21:21:58 -05:00
Implementing different LogLevels (FileLog)
Also added short description in Readme.MD
This commit is contained in:
parent
90f45c1cb3
commit
8d2abd1c62
10
README.md
10
README.md
@ -60,3 +60,13 @@ This results in having only one logfile for each program and having it rotated b
|
||||
If you are using the php-based Dashbord by DG9VH (https://github.com/dg9vh/YSFReflector-Dashboard) please leave it at `FileRotate=1`, if you are using the websockets based version (recommended at https://github.com/dg9vh/WSYSFDash) you can use `FileRotate=0`. Take care to configure the dashboard's logtailer.ini in sync to this.
|
||||
|
||||
To configure log rotation in Linux take a look at https://www.tecmint.com/install-logrotate-to-manage-log-rotation-in-linux/.
|
||||
|
||||
### Setting FileLevel in Logging
|
||||
actually the FileLevel-Logging is done in 3 variant loglevels: 0 to 2. Here is a short description what is logged in the different levels:
|
||||
|
||||
* Level 2: Only messages on startup and error-messages are logged
|
||||
* Level 1: All from level 2 plus normal messages created when running the reflector. This level is recommended if you are running a dashboard with the reflector.
|
||||
* Level 0: All from level 1 and 2 plus some additional information about remote-commands not needed in regular situations. This level shows the full log.
|
||||
|
||||
|
||||
|
||||
|
82
YSFReflector
82
YSFReflector
@ -129,19 +129,19 @@ def ElencoNodi(cl):
|
||||
time.sleep(120)
|
||||
cl_lo = []
|
||||
if (len(cl) == 0):
|
||||
printlog('No repeaters/gateways linked')
|
||||
printlog(1, 'No repeaters/gateways linked')
|
||||
else:
|
||||
printlog('Currently linked repeaters/gateways:')
|
||||
printlog(1, 'Currently linked repeaters/gateways:')
|
||||
for c in cl:
|
||||
printlog(' ' + c[2].ljust(10) + ': ' + str(c[0]) + ':' + str(c[1]) + ' ' + str(c[3]) + '/60 : ' + datetime.utcfromtimestamp(c[6]).strftime("%Y-%m-%d %H:%M:%S"))
|
||||
printlog(1, ' ' + c[2].ljust(10) + ': ' + str(c[0]) + ':' + str(c[1]) + ' ' + str(c[3]) + '/60 : ' + datetime.utcfromtimestamp(c[6]).strftime("%Y-%m-%d %H:%M:%S"))
|
||||
if (c[5] == 1):
|
||||
cl_lo.append(c)
|
||||
if (len(cl_lo) == 0):
|
||||
printlog('No repeaters/gateways muted')
|
||||
printlog(1, 'No repeaters/gateways muted')
|
||||
else:
|
||||
printlog('Currently muted repeaters/gateways:')
|
||||
printlog(1, 'Currently muted repeaters/gateways:')
|
||||
for c in cl_lo:
|
||||
printlog(' ' + c[2].ljust(10) + ': ' + str(c[0]) + ':' + str(c[1]) + ' ' + str(c[3]) + '/60')
|
||||
printlog(1, ' ' + c[2].ljust(10) + ': ' + str(c[0]) + ':' + str(c[1]) + ' ' + str(c[3]) + '/60')
|
||||
|
||||
|
||||
def TimeoutNodi(cl):
|
||||
@ -150,7 +150,7 @@ def TimeoutNodi(cl):
|
||||
for c in cl:
|
||||
c[3] += 1
|
||||
if (c[3] > 60):
|
||||
printlog('Removing ' + c[2].ljust(10) + ' (' + c[0] + ':' + str(c[1]) + ') disappeared')
|
||||
printlog(1, 'Removing ' + c[2].ljust(10) + ' (' + c[0] + ':' + str(c[1]) + ') disappeared')
|
||||
cl.remove(c)
|
||||
|
||||
|
||||
@ -160,7 +160,7 @@ def TimeoutTX(t, t_lock, r_lock, lista_lh, lista_lhd):
|
||||
t[1] += 0.1
|
||||
if ((t[1] > 1.0) and (t[0] != 0)):
|
||||
t[0] = 0
|
||||
printlog('Network watchdog has expired')
|
||||
printlog(1, 'Network watchdog has expired')
|
||||
inserisci_lista(lista_lh, [check_string(t[2]), check_string(t[3]), check_string(t[4]), t[5], datetime.utcfromtimestamp(t[6]).strftime("%d-%m-%Y %H-%M-%S"), round(time.time() - t[6]) ], 20)
|
||||
inserisci_listaD(lista_lhd, [check_string(t[2]), check_string(t[3]), check_string(t[4]), t[5], datetime.utcfromtimestamp(t[6]).strftime("%d-%m-%Y %H-%M-%S"), round(time.time() - t[6]) ], 20)
|
||||
t[1] = 0
|
||||
@ -179,7 +179,7 @@ def TimeoutTX(t, t_lock, r_lock, lista_lh, lista_lhd):
|
||||
|
||||
for x in pop_list:
|
||||
t_lock.pop(x)
|
||||
printlog('Removed from blockeds queue ' + str(x))
|
||||
printlog(1, 'Removed from blockeds queue ' + str(x))
|
||||
time.sleep(0.1)
|
||||
|
||||
|
||||
@ -266,7 +266,7 @@ def blacklist(f_bl, t_reload, cli):
|
||||
GW_TMP = []
|
||||
IP_TMP = []
|
||||
WL_TMP = []
|
||||
printlog('Reload the Blacklist from File')
|
||||
printlog(1, 'Reload the Blacklist from File')
|
||||
for row in file:
|
||||
content = row.strip()
|
||||
|
||||
@ -303,19 +303,19 @@ def blacklist(f_bl, t_reload, cli):
|
||||
ipl = ip2long(ipa)
|
||||
except:
|
||||
ipl = 0
|
||||
printlog('Invalid hostname ' + c_split[1])
|
||||
printlog(2, 'Invalid hostname ' + c_split[1])
|
||||
if (ipl > 0):
|
||||
if (not inlist(IP_TMP, ipl)):
|
||||
bisect.insort(IP_TMP, ipl)
|
||||
|
||||
file.close()
|
||||
except Exception as ex:
|
||||
printlog('Failed to load Blacklist from File ' + str(ex) )
|
||||
printlog(2, 'Failed to load Blacklist from File ' + str(ex) )
|
||||
BLACK_LIST = BL_TMP.copy()
|
||||
WHITE_LIST = WL_TMP.copy()
|
||||
GW_BL = GW_TMP.copy()
|
||||
IP_BL = IP_TMP.copy()
|
||||
printlog('Loaded ' + str(len(BLACK_LIST)) + '/CS ' + str(len(WHITE_LIST)) + '/AL ' + str(len(GW_BL)) + '/GW ' + str(len(IP_BL)) + '/IP')
|
||||
printlog(1, 'Loaded ' + str(len(BLACK_LIST)) + '/CS ' + str(len(WHITE_LIST)) + '/AL ' + str(len(GW_BL)) + '/GW ' + str(len(IP_BL)) + '/IP')
|
||||
f_time_old = f_time
|
||||
update_clients(cli)
|
||||
else:
|
||||
@ -342,6 +342,16 @@ def ReadConfig(f,p):
|
||||
except:
|
||||
file_rotate = "1" # to keep file-rotation by default with timestamp
|
||||
|
||||
try:
|
||||
display_level = int(config['Log']['DisplayLevel'])
|
||||
except:
|
||||
display_level = 1
|
||||
|
||||
try:
|
||||
file_level = int(config['Log']['FileLevel'])
|
||||
except:
|
||||
file_level = 1
|
||||
|
||||
try:
|
||||
en_ext_cmd = int(config['Log']['EnableExtendedCommands'])
|
||||
except:
|
||||
@ -385,6 +395,8 @@ def ReadConfig(f,p):
|
||||
p.append(file_rotate) # 8
|
||||
p.append(CheckRE) # 9
|
||||
p.append(en_ext_cmd) #10
|
||||
p.append(display_level) #11
|
||||
p.append(file_level) #12
|
||||
|
||||
|
||||
|
||||
@ -450,11 +462,11 @@ def RunServer(config):
|
||||
recvPackets = queue.Queue()
|
||||
|
||||
print('Starting pYSFReflector-' + version)
|
||||
printlog('Starting pYSFReflector-' + version)
|
||||
printlog(2, 'Starting pYSFReflector-' + version)
|
||||
if (en_ext_cmd == 1):
|
||||
printlog('Extended Commands Enabled')
|
||||
printlog(2, 'Extended Commands Enabled')
|
||||
else:
|
||||
printlog('Extended Commands Disabled')
|
||||
printlog(2, 'Extended Commands Disabled')
|
||||
threading.Thread(target=RecvData,args=(s,recvPackets)).start()
|
||||
threading.Thread(target=ElencoNodi,args=(clients,)).start()
|
||||
threading.Thread(target=TimeoutNodi,args=(clients,)).start()
|
||||
@ -485,13 +497,13 @@ def RunServer(config):
|
||||
c=[addr[0], addr[1], (data[4:14]).decode().strip(), 0, id, lonly, time.time()]
|
||||
id += 1
|
||||
clients.append(c)
|
||||
printlog('Adding ' + c[2].ljust(10) + ' (' + c[0] + ':' + str(c[1]) + ')')
|
||||
printlog(1, 'Adding ' + c[2].ljust(10) + ' (' + c[0] + ':' + str(c[1]) + ')')
|
||||
s.sendto(b'YSFPREFLECTOR ',addr)
|
||||
|
||||
if (cmd == b'YSFU'):
|
||||
for c in clients:
|
||||
if ((c[0] == addr[0]) and (c[1] == addr[1])):
|
||||
printlog('Removing ' + c[2].ljust(10) + ' (' + c[0] + ':' + str(c[1]) + ') unlinked')
|
||||
printlog(1, 'Removing ' + c[2].ljust(10) + ' (' + c[0] + ':' + str(c[1]) + ') unlinked')
|
||||
clients.remove(c)
|
||||
break
|
||||
|
||||
@ -522,14 +534,14 @@ def RunServer(config):
|
||||
# time start
|
||||
tx[6] = time.time()
|
||||
id_str += 1
|
||||
printlog('Received data from ' + tx[3].ljust(10) + ' to ' + tx[4].ljust(10) + ' at ' + tx[2].ljust(10))
|
||||
printlog(1, 'Received data from ' + tx[3].ljust(10) + ' to ' + tx[4].ljust(10) + ' at ' + tx[2].ljust(10))
|
||||
|
||||
else:
|
||||
if (id_corr not in rx_lock):
|
||||
rx_lock.append(id_corr)
|
||||
inserisci_lista(BL, [check_string(data[4:14].decode().strip()) + '/' + block_r, check_string(data[14:24].decode().strip()), check_string(data[24:34].decode().strip()), -1, datetime.utcfromtimestamp(time.time()).strftime("%d-%m-%Y %H-%M-%S"), -1 ], 20)
|
||||
inserisci_listaD(BLD, [check_string(data[4:14].decode().strip()) + '/' + block_r, check_string(data[14:24].decode().strip()), check_string(data[24:34].decode().strip()), -1, datetime.utcfromtimestamp(time.time()).strftime("%d-%m-%Y %H-%M-%S"), -1 ], 20)
|
||||
printlog('Data from ' + data[14:24].decode().strip().ljust(10) + ' at ' + data[4:14].decode().strip().ljust(10) + ' blocked/' + block_r)
|
||||
printlog(1, 'Data from ' + data[14:24].decode().strip().ljust(10) + ' at ' + data[4:14].decode().strip().ljust(10) + ' blocked/' + block_r)
|
||||
rx_lock_tout[id_corr] = 0
|
||||
|
||||
if ((id_corr == tx[0]) and (id_corr != 0)):
|
||||
@ -541,7 +553,7 @@ def RunServer(config):
|
||||
|
||||
if ((data[34] & 0x01) == 0x01):
|
||||
if (tx[0] != 0):
|
||||
printlog('Received end of transmission')
|
||||
printlog(1, 'Received end of transmission')
|
||||
inserisci_lista(LH, [check_string(tx[2]), check_string(tx[3]), check_string(tx[4]), tx[5], datetime.utcfromtimestamp(tx[6]).strftime("%d-%m-%Y %H-%M-%S"), round(time.time() - tx[6]) ], 20)
|
||||
inserisci_listaD(LHD, [check_string(tx[2]), check_string(tx[3]), check_string(tx[4]), tx[5], datetime.utcfromtimestamp(tx[6]).strftime("%d-%m-%Y %H-%M-%S"), round(time.time() - tx[6]) ], 20)
|
||||
tx[0] = 0
|
||||
@ -552,7 +564,7 @@ def RunServer(config):
|
||||
tx[6] = 0
|
||||
|
||||
if (cmd == b'YSFS'):
|
||||
printlog('YSF server status enquiry from ' + addr[0] + ':' + str(addr[1]))
|
||||
printlog(0, 'YSF server status enquiry from ' + addr[0] + ':' + str(addr[1]))
|
||||
if (len(clients) > 999):
|
||||
num_cli = 999
|
||||
else:
|
||||
@ -562,12 +574,12 @@ def RunServer(config):
|
||||
|
||||
|
||||
if (cmd == b'YSFV'):
|
||||
printlog('Received command ' + cmd.decode() + ' from: ' + addr[0] + ':' + str(addr[1]))
|
||||
printlog(0, 'Received command ' + cmd.decode() + ' from: ' + addr[0] + ':' + str(addr[1]))
|
||||
info = 'YSFV' + 'pYSFReflector' + ' ' + version
|
||||
s.sendto(str.encode(info),addr)
|
||||
|
||||
if (cmd == b'YSFI'):
|
||||
printlog('Received command ' + cmd.decode() + ' from: ' + addr[0] + ':' + str(addr[1]))
|
||||
printlog(0, 'Received command ' + cmd.decode() + ' from: ' + addr[0] + ':' + str(addr[1]))
|
||||
# info = 'YSFV' + 'pYSFReflector' + ' ' + version
|
||||
# s.sendto(str.encode(info),addr)
|
||||
|
||||
@ -576,42 +588,42 @@ def RunServer(config):
|
||||
## Extended Commands ##
|
||||
if (en_ext_cmd == 1):
|
||||
if (cmd == b'QSRU'):
|
||||
printlog('Received command ' + cmd.decode() + ' from: ' + addr[0] + ':' + str(addr[1]))
|
||||
printlog(0, 'Received command ' + cmd.decode() + ' from: ' + addr[0] + ':' + str(addr[1]))
|
||||
info = 'ASRU;' + str(round(time.time()-time_start)) + ';'
|
||||
s.sendto(str.encode(info),addr)
|
||||
|
||||
if (cmd == b'QSRI'):
|
||||
printlog('Received command ' + cmd.decode() + ' from: ' + addr[0] + ':' + str(addr[1]))
|
||||
printlog(0, 'Received command ' + cmd.decode() + ' from: ' + addr[0] + ':' + str(addr[1]))
|
||||
info = 'ASRI;' + str(refl_id) + ':' + refl_name + ':' + refl_desc + ':' + 'pYSFReflector' + ':' + version + ':' + str(CheckRE) + ';'
|
||||
s.sendto(str.encode(info),addr)
|
||||
|
||||
if (cmd == b'QGWL'):
|
||||
printlog('Received command ' + cmd.decode() + ' from: ' + addr[0] + ':' + str(addr[1]))
|
||||
printlog(0, 'Received command ' + cmd.decode() + ' from: ' + addr[0] + ':' + str(addr[1]))
|
||||
info = 'AGWL;' + lista_gw(clients)
|
||||
s.sendto(str.encode(info),addr)
|
||||
|
||||
if (cmd == b'QLHL'):
|
||||
printlog('Received command ' + cmd.decode() + ' from: ' + addr[0] + ':' + str(addr[1]))
|
||||
printlog(0, 'Received command ' + cmd.decode() + ' from: ' + addr[0] + ':' + str(addr[1]))
|
||||
info = 'ALHL;' + lista_invio(LH)
|
||||
s.sendto(str.encode(info),addr)
|
||||
|
||||
if (cmd == b'QREJ'):
|
||||
printlog('Received command ' + cmd.decode() + ' from: ' + addr[0] + ':' + str(addr[1]))
|
||||
printlog(0, 'Received command ' + cmd.decode() + ' from: ' + addr[0] + ':' + str(addr[1]))
|
||||
info = 'AREJ;' + lista_invio(BL)
|
||||
s.sendto(str.encode(info),addr)
|
||||
|
||||
if (cmd == b'QLHD'):
|
||||
printlog('Received command ' + cmd.decode() + ' from: ' + addr[0] + ':' + str(addr[1]))
|
||||
printlog(0, 'Received command ' + cmd.decode() + ' from: ' + addr[0] + ':' + str(addr[1]))
|
||||
info = 'ALHD;' + lista_invio(LHD)
|
||||
s.sendto(str.encode(info),addr)
|
||||
|
||||
if (cmd == b'QRED'):
|
||||
printlog('Received command ' + cmd.decode() + ' from: ' + addr[0] + ':' + str(addr[1]))
|
||||
printlog(0, 'Received command ' + cmd.decode() + ' from: ' + addr[0] + ':' + str(addr[1]))
|
||||
info = 'ARED;' + lista_invio(BLD)
|
||||
s.sendto(str.encode(info),addr)
|
||||
|
||||
if (cmd == b'QACL'):
|
||||
printlog('Received command ' + cmd.decode() + ' from: ' + addr[0] + ':' + str(addr[1]))
|
||||
printlog(0, 'Received command ' + cmd.decode() + ' from: ' + addr[0] + ':' + str(addr[1]))
|
||||
s_info = ''
|
||||
info = 'AACL;CS/' + str(len(BLACK_LIST)) + '|' + 'AL/' + str(len(WHITE_LIST)) + '|' + 'GW/' + str(len(GW_BL)) + '|' + 'IP/' + str(len(IP_BL)) + ';'
|
||||
i = 0
|
||||
@ -655,10 +667,11 @@ def RunServer(config):
|
||||
s.close()
|
||||
|
||||
|
||||
def printlog(mess):
|
||||
def printlog(log_level, mess):
|
||||
global filelog
|
||||
global log_basename
|
||||
global file_rotate
|
||||
global file_level
|
||||
if file_rotate == "1":
|
||||
log_file = log_basename + '-' + str(datetime.utcnow().strftime('%Y-%m-%d')) + '.log'
|
||||
else:
|
||||
@ -670,6 +683,7 @@ def printlog(mess):
|
||||
filelog = open(log_file,'x')
|
||||
except:
|
||||
pass
|
||||
if file_level <= log_level:
|
||||
str_log = check_string('M: ' + str(datetime.utcnow().strftime('%Y-%m-%d %H:%M:%S.%f'))[:-3] + ' ' + mess)
|
||||
try:
|
||||
filelog.write(str_log + '\n')
|
||||
@ -701,6 +715,8 @@ except:
|
||||
|
||||
log_basename = config[3] + '/' + config[4]
|
||||
file_rotate = config[8]
|
||||
display_level = config[11]
|
||||
file_level = config[12]
|
||||
### log
|
||||
if file_rotate == "1":
|
||||
log_file = log_basename + '-' + str(datetime.utcnow().strftime('%Y-%m-%d')) + '.log'
|
||||
|
@ -13,7 +13,7 @@ Description=<reflector description>
|
||||
# Logging levels, 0=No logging
|
||||
# not managed
|
||||
DisplayLevel=1
|
||||
# not managed
|
||||
#Set this to 0 to have full logging capabilities, 1 for normal log and 2 for very silent log
|
||||
FileLevel=1
|
||||
FilePath=/var/log
|
||||
FileRoot=YSFReflector
|
||||
|
Loading…
Reference in New Issue
Block a user