diff --git a/back/pialert.py b/back/pialert.py index af98c5b4..9af8e129 100755 --- a/back/pialert.py +++ b/back/pialert.py @@ -234,6 +234,7 @@ mqtt_thread_up = False # timestamps of last execution times time_now = datetime.datetime.now() log_timestamp = time_now +startTime = time_now now_minus_24h = time_now - timedelta(hours = 24) last_network_scan = now_minus_24h @@ -275,12 +276,11 @@ def main (): reporting = False # Header - file_print('\nLoop start') - file_print('---------------------------') + file_print('[', time_now.replace (microsecond=0), '] Loop start ') # Timestamp startTime = time_now - startTime = startTime.replace (second=0, microsecond=0) + startTime = startTime.replace (microsecond=0) # re-load user configuration importConfig() @@ -317,16 +317,14 @@ def main (): # Final menssage if cycle != "": - file_print('\nFinished cycle: ', cycle, '\n') + file_print('[', time_now.replace (microsecond=0), '] Last action: ', cycle) cycle = "" # Footer - file_print('\nLoop end') - file_print('---------------------------') + file_print('[', time_now.replace (microsecond=0), '] Loop end') else: # do something - cycle = "" - file_print('\n Wait 20s') + cycle = "" #loop - recursion time.sleep(20) # wait for N seconds @@ -339,11 +337,10 @@ def check_internet_IP (): reporting = False # Header - file_print('Check Internet IP') - file_print(' Timestamp:', startTime ) + file_print('[', startTime, '] Check Internet IP:') # Get Internet IP - file_print('\n Retrieving Internet IP...') + file_print(' Retrieving Internet IP:') internet_IP = get_internet_IP() # TESTING - Force IP # internet_IP = "1.2.3.4" @@ -351,15 +348,15 @@ def check_internet_IP (): # Check result = IP if internet_IP == "" : file_print(' Error retrieving Internet IP') - file_print(' Exiting...\n') + file_print(' Exiting...') return False - file_print(' ', internet_IP) + file_print(' ', internet_IP) # Get previous stored IP - file_print('\n Retrieving previous IP...') + file_print(' Retrieving previous IP:') openDB() previous_IP = get_previous_internet_IP () - file_print(' ', previous_IP) + file_print(' ', previous_IP) # Check IP Change if internet_IP != previous_IP : @@ -373,26 +370,26 @@ def check_internet_IP (): # Get Dynamic DNS IP if DDNS_ACTIVE : - file_print('\n Retrieving Dynamic DNS IP...') + file_print(' Retrieving Dynamic DNS IP') dns_IP = get_dynamic_DNS_IP() # Check Dynamic DNS IP if dns_IP == "" : file_print(' Error retrieving Dynamic DNS IP') - file_print(' Exiting...\n') + file_print(' Exiting...') return False file_print(' ', dns_IP) # Check DNS Change if dns_IP != internet_IP : - file_print(' Updating Dynamic DNS IP...') + file_print(' Updating Dynamic DNS IP') message = set_dynamic_DNS_IP () file_print(' ', message) reporting = True else : file_print(' No changes to perform') else : - file_print('\n Skipping Dynamic DNS update...') + file_print(' Skipping Dynamic DNS update') return reporting @@ -470,7 +467,7 @@ def get_previous_internet_IP (): def save_new_internet_IP (pNewIP): # Log new IP into logfile append_line_to_file (logPath + '/IP_changes.log', - str(startTime) +'\t'+ pNewIP +'\n') + '['+str(startTime) +']\t'+ pNewIP +'\n') # Save event sql.execute ("""INSERT INTO Events (eve_MAC, eve_IP, eve_DateTime, @@ -507,23 +504,22 @@ def check_IP_format (pIP): # Cleanup Online History chart #=============================================================================== def cleanup_database (): - # Header - file_print('Cleanup Database') - file_print(' Timestamp:', startTime ) + # Header + file_print('[', startTime, '] Cleanup Database:' ) openDB() # Cleanup Online History - file_print(' Cleanup Online_History...') + file_print(' Cleanup Online_History') sql.execute ("DELETE FROM Online_History WHERE Scan_Date <= date('now', '-1 day')") - file_print(' Optimize Database...') + file_print(' Optimize Database') # Cleanup Events - file_print(' Cleanup Events, up to the lastest '+str(DAYS_TO_KEEP_EVENTS)+' days...') + file_print(' Cleanup Events, up to the lastest '+str(DAYS_TO_KEEP_EVENTS)+' days') sql.execute ("DELETE FROM Events WHERE eve_DateTime <= date('now', '-"+str(DAYS_TO_KEEP_EVENTS)+" day')") # Shrink DB - file_print(' Shrink Database...') + file_print(' Shrink Database') sql.execute ("VACUUM;") closeDB() @@ -532,12 +528,11 @@ def cleanup_database (): # UPDATE DEVICE MAC VENDORS #=============================================================================== def update_devices_MAC_vendors (pArg = ''): - # Header - file_print('Update HW Vendors') - file_print(' Timestamp:', startTime ) + # Header + file_print('[', startTime, '] Update HW Vendors:' ) # Update vendors DB (iab oui) - file_print('\nUpdating vendors DB (iab & oui)...') + file_print('\nUpdating vendors DB (iab & oui)') # update_args = ['sh', PIALERT_BACK_PATH + '/update_vendors.sh', ' > ', logPath + '/update_vendors.log', '2>&1'] update_args = ['sh', PIALERT_BACK_PATH + '/update_vendors.sh', pArg] @@ -654,12 +649,12 @@ def scan_network (): # # devtest end # Header - file_print('Scan Devices') + file_print('[', startTime, '] Scan Devices:' ) file_print(' ScanCycle:', cycle) - file_print(' Timestamp:', startTime ) + # # Query ScanCycle properties - print_log ('Query ScanCycle confinguration...') + print_log ('Query ScanCycle confinguration') scanCycle_data = query_ScanCycle_Data (True) if scanCycle_data is None: file_print('\n*************** ERROR ***************') @@ -670,10 +665,8 @@ def scan_network (): # ScanCycle data cycle_interval = scanCycle_data['cic_EveryXmin'] - # arp-scan command - file_print('\nScanning...') - file_print(' arp-scan Method...') - print_log ('arp-scan starts...') + # arp-scan command + file_print(' arp-scan start') arpscan_devices = execute_arpscan () print_log ('arp-scan ends') @@ -681,18 +674,16 @@ def scan_network (): # file_print('aspr-scan result:', len(arpscan_devices)) # Pi-hole method - file_print(' Pi-hole Method...') - openDB() - print_log ('Pi-hole copy starts...') + file_print(' Pi-hole start') + openDB() reporting = copy_pihole_network() or reporting # DHCP Leases method - file_print(' DHCP Leases Method...') + file_print(' DHCP Leases start') reporting = read_DHCP_leases () or reporting # Load current scan data - file_print('\nProcessing scan results...') - print_log ('Save scanned devices') + file_print('Processing scan results') save_scanned_devices (arpscan_devices, cycle_interval) # Print stats @@ -701,37 +692,37 @@ def scan_network (): print_log ('Stats end') # Create Events - file_print('\nUpdating DB Info...') - file_print(' Sessions Events (connect / discconnect) ...') + file_print('Updating DB Info') + file_print(' Sessions Events (connect / discconnect)') insert_events() # Create New Devices # after create events -> avoid 'connection' event - file_print(' Creating new devices...') + file_print(' Creating new devices') create_new_devices () # Update devices info - file_print(' Updating Devices Info...') + file_print(' Updating Devices Info') update_devices_data_from_scan () # Resolve devices names - print_log (' Resolve devices names...') + print_log (' Resolve devices names') update_devices_names() # Void false connection - disconnections - file_print(' Voiding false (ghost) disconnections...') + file_print(' Voiding false (ghost) disconnections') void_ghost_disconnections () # Pair session events (Connection / Disconnection) - file_print(' Pairing session events (connection / disconnection) ...') + file_print(' Pairing session events (connection / disconnection) ') pair_sessions_events() # Sessions snapshot - file_print(' Creating sessions snapshot...') + file_print(' Creating sessions snapshot') create_sessions_snapshot () # Skip repeated notifications - file_print(' Skipping repeated notifications...') + file_print(' Skipping repeated notifications') skip_repeated_notifications () # Commit changes @@ -949,13 +940,13 @@ def print_scan_stats (): sql.execute ("""SELECT COUNT(*) FROM CurrentScan WHERE cur_ScanMethod='arp-scan' AND cur_ScanCycle = ? """, (cycle,)) - file_print(' arp-scan Method....:', str (sql.fetchone()[0]) ) + file_print(' arp-scan detected....: ', str (sql.fetchone()[0]) ) # Devices Pi-hole sql.execute ("""SELECT COUNT(*) FROM CurrentScan WHERE cur_ScanMethod='PiHole' AND cur_ScanCycle = ? """, (cycle,)) - file_print(' Pi-hole Method.....: +' + str (sql.fetchone()[0]) ) + file_print(' Pi-hole detected.....: +' + str (sql.fetchone()[0]) ) # New Devices sql.execute ("""SELECT COUNT(*) FROM CurrentScan @@ -1299,7 +1290,7 @@ def update_devices_names (): notFound = 0 # Devices without name - file_print(' Trying to resolve devices without name...') + file_print(' Trying to resolve devices without name') # BUGFIX #97 - Updating name of Devices w/o IP for device in sql.execute ("SELECT * FROM Devices WHERE dev_Name IN ('(unknown)','') AND dev_LastIP <> '-'") : # Resolve device name @@ -1312,8 +1303,7 @@ def update_devices_names (): else : recordsToUpdate.append ([newName, device['dev_MAC']]) - # Print log - file_print('') + # Print log file_print(" Names updated: ", len(recordsToUpdate) ) # DEBUG - print list of record to update # file_print(recordsToUpdate) @@ -1523,7 +1513,7 @@ def email_reporting (): global mail_text global mail_html # Reporting section - file_print('\nCheck if something to report...') + file_print('\nCheck if something to report') openDB() # prepare variables for JSON construction @@ -1708,43 +1698,43 @@ def email_reporting (): # Send Mail if json_internet != [] or json_new_devices != [] or json_down_devices != [] or json_events != []: - file_print('\nChanges detected, sending reports...') + file_print('\nChanges detected, sending reports') if REPORT_MAIL and check_config('email'): - file_print(' Sending report by email...') + file_print(' Sending report by email') send_email (mail_text, mail_html) else : - file_print(' Skip mail...') + file_print(' Skip mail') if REPORT_APPRISE and check_config('apprise'): - file_print(' Sending report by Apprise...') + file_print(' Sending report by Apprise') send_apprise (mail_html) else : - file_print(' Skip Apprise...') + file_print(' Skip Apprise') if REPORT_WEBHOOK and check_config('webhook'): - file_print(' Sending report by webhook...') + file_print(' Sending report by webhook') send_webhook (json_final, mail_text) else : - file_print(' Skip webhook...') + file_print(' Skip webhook') if REPORT_NTFY and check_config('ntfy'): - file_print(' Sending report by NTFY...') + file_print(' Sending report by NTFY') send_ntfy (mail_text) else : - file_print(' Skip NTFY...') + file_print(' Skip NTFY') if REPORT_PUSHSAFER and check_config('pushsafer'): - file_print(' Sending report by PUSHSAFER...') + file_print(' Sending report by PUSHSAFER') send_pushsafer (mail_text) else : - file_print(' Skip PUSHSAFER...') + file_print(' Skip PUSHSAFER') # Update MQTT entities if REPORT_MQTT and check_config('mqtt'): - file_print(' Establishing MQTT thread...') + file_print(' Establishing MQTT thread') # mqtt_thread_up = True # prevent this code to be run multiple times concurrently # start_mqtt_thread () mqtt_start() else : - file_print(' Skip MQTT...') + file_print(' Skip MQTT') else : - file_print(' No changes to report...') + file_print(' No changes to report') openDB() @@ -1757,7 +1747,7 @@ def email_reporting (): WHERE eve_PendingAlertEmail = 1""") # DEBUG - print number of rows updated - file_print(' Notifications:', sql.rowcount) + file_print(' Notifications: ', sql.rowcount) # Commit changes sql_connection.commit() @@ -2428,7 +2418,7 @@ def openDB (): return # Log - print_log ('Opening DB...') + print_log ('Opening DB') # Open DB and Cursor @@ -2448,7 +2438,7 @@ def closeDB (): return # Log - print_log ('Closing DB...') + print_log ('Closing DB') # Close DB sql_connection.commit() diff --git a/front/css/pialert.css b/front/css/pialert.css index 5ced3308..a9252a8e 100755 --- a/front/css/pialert.css +++ b/front/css/pialert.css @@ -24,6 +24,16 @@ { color:white; background-color: black; + font-family: 'Courier New', monospace; + +} +.logs-small +{ + height: 100px; +} +.span-padding +{ + padding:10px; } .text-center { text-align: center; diff --git a/front/js/pialert_common.js b/front/js/pialert_common.js index 22f70b83..5623d938 100755 --- a/front/js/pialert_common.js +++ b/front/js/pialert_common.js @@ -67,6 +67,14 @@ function deleteAllCookies() { // ----------------------------------------------------------------------------- +function showModalOk (title, message) { + // set captions + $('#modal-ok-title').html (title); + $('#modal-ok-message').html (message); + + // Show modal + $('#modal-ok').modal('show'); +} function showModalDefault (title, message, btnCancel, btnOK, callbackFunction) { // set captions $('#modal-default-title').html (title); diff --git a/front/maintenance.php b/front/maintenance.php index 96616cf7..7351ef35 100755 --- a/front/maintenance.php +++ b/front/maintenance.php @@ -172,16 +172,6 @@ if (submit && isset($_POST['langselector_set'])) { } } -// Set Tab ---------------------------------------------------------------------------- - -if ($_REQUEST['tab'] == '1') { - $pia_tab_setting = 'active'; $pia_tab_tool = ''; $pia_tab_backup = ''; -} elseif ($_REQUEST['tab'] == '2') { - $pia_tab_setting = ''; $pia_tab_tool = 'active'; $pia_tab_backup = ''; -} elseif ($_REQUEST['tab'] == '3') { - $pia_tab_setting = ''; $pia_tab_tool = ''; $pia_tab_backup = 'active'; -} else { $pia_tab_setting = 'active'; $pia_tab_tool = ''; $pia_tab_backup = '';} - ?>
@@ -230,10 +220,18 @@ if ($_REQUEST['tab'] == '1') {