From 4ad406a8c330116c27efa6bbfccbb0ab37b0cdd7 Mon Sep 17 00:00:00 2001 From: Jokob-sk Date: Sun, 11 Dec 2022 16:00:46 +1100 Subject: [PATCH] fixed logging + cleanup --- Dockerfile | 2 - back/pialert.py | 280 ++++++++++++++++++----------------- back/report_template.html | 3 +- docker-compose.yml | 16 +- front/log/report_output.html | 56 ------- front/maintenance.php | 29 ++-- 6 files changed, 178 insertions(+), 208 deletions(-) delete mode 100755 front/log/report_output.html diff --git a/Dockerfile b/Dockerfile index f3e10c06..dcc7172c 100755 --- a/Dockerfile +++ b/Dockerfile @@ -32,8 +32,6 @@ COPY . /home/pi/pialert RUN rm /etc/nginx/sites-available/default \ && ln -s /home/pi/pialert/install/default /etc/nginx/sites-available/default \ && sed -ie 's/listen 80/listen '${PORT}'/g' /etc/nginx/sites-available/default \ - # make the logs accessible in the old location - && ln -s /home/pi/pialert/front/log /home/pi/pialert/log \ # run the hardware vendors update && /home/pi/pialert/back/update_vendors.sh diff --git a/back/pialert.py b/back/pialert.py index 7bfccee9..596190ea 100755 --- a/back/pialert.py +++ b/back/pialert.py @@ -35,10 +35,6 @@ from base64 import b64encode from paho.mqtt import client as mqtt_client import threading - -# sys.stdout = open('pialert_new.log', 'w') -# sys.stderr = sys.stdout - #=============================================================================== # CONFIG VARIABLES #=============================================================================== @@ -127,6 +123,13 @@ def main (): global time_now, cycle, last_network_scan, last_internet_IP_scan, last_run, last_cleanup, last_update_vendors, mqtt_thread_up # second set of global variables global startTime, log_timestamp, sql_connection, sql + + # create log files + write_file(LOG_PATH + 'IP_changes.log', '') + write_file(LOG_PATH + 'stdout.log', '') + write_file(LOG_PATH + 'stderr.log', '') + write_file(LOG_PATH + 'pialert.log', '') + write_file(LOG_PATH + 'pialert_file.log', '') while True: # update NOW time @@ -148,8 +151,8 @@ def main (): reporting = False # Header - print ('\nLoop start') - print ('---------------------------') + file_print('\nLoop start') + file_print('---------------------------') log_timestamp = time_now @@ -196,16 +199,16 @@ def main (): # Final menssage if cycle != "": - print ('\nFinished cycle: ', cycle, '\n') + file_print('\nFinished cycle: ', cycle, '\n') cycle = "" # Footer - print ('\nLoop end') - print ('---------------------------') + file_print('\nLoop end') + file_print('---------------------------') else: # do something cycle = "" - print ('\n Wait 20s') + file_print('\n Wait 20s') #loop - recursion time.sleep(20) # wait for N seconds @@ -218,60 +221,60 @@ def check_internet_IP (): reporting = False # Header - print ('Check Internet IP') - print (' Timestamp:', startTime ) + file_print('Check Internet IP') + file_print(' Timestamp:', startTime ) # Get Internet IP - print ('\n Retrieving Internet IP...') + file_print('\n Retrieving Internet IP...') internet_IP = get_internet_IP() # TESTING - Force IP # internet_IP = "1.2.3.4" # Check result = IP if internet_IP == "" : - print (' Error retrieving Internet IP') - print (' Exiting...\n') + file_print(' Error retrieving Internet IP') + file_print(' Exiting...\n') return False - print (' ', internet_IP) + file_print(' ', internet_IP) # Get previous stored IP - print ('\n Retrieving previous IP...') + file_print('\n Retrieving previous IP...') openDB() previous_IP = get_previous_internet_IP () - print (' ', previous_IP) + file_print(' ', previous_IP) # Check IP Change if internet_IP != previous_IP : - print (' Saving new IP') + file_print(' Saving new IP') save_new_internet_IP (internet_IP) - print (' IP updated') + file_print(' IP updated') reporting = True else : - print (' No changes to perform') + file_print(' No changes to perform') closeDB() # Get Dynamic DNS IP if DDNS_ACTIVE : - print ('\n Retrieving Dynamic DNS IP...') + file_print('\n Retrieving Dynamic DNS IP...') dns_IP = get_dynamic_DNS_IP() # Check Dynamic DNS IP if dns_IP == "" : - print (' Error retrieving Dynamic DNS IP') - print (' Exiting...\n') + file_print(' Error retrieving Dynamic DNS IP') + file_print(' Exiting...\n') return False - print (' ', dns_IP) + file_print(' ', dns_IP) # Check DNS Change if dns_IP != internet_IP : - print (' Updating Dynamic DNS IP...') + file_print(' Updating Dynamic DNS IP...') message = set_dynamic_DNS_IP () - print (' ', message) + file_print(' ', message) reporting = True else : - print (' No changes to perform') + file_print(' No changes to perform') else : - print ('\n Skipping Dynamic DNS update...') + file_print('\n Skipping Dynamic DNS update...') return reporting @@ -284,7 +287,7 @@ def get_internet_IP (): try: cmd_output = subprocess.check_output (dig_args, universal_newlines=True) except subprocess.CalledProcessError as e: - print(e.output) + file_print(e.output) cmd_output = '' # no internet @@ -311,7 +314,7 @@ def get_dynamic_DNS_IP (): dig_output = subprocess.check_output (dig_args, universal_newlines=True) except subprocess.CalledProcessError as e: # An error occured, handle it - print(e.output) + file_print(e.output) dig_output = '' # probably no internet # Check result is an IP @@ -331,7 +334,7 @@ def set_dynamic_DNS_IP (): universal_newlines=True) except subprocess.CalledProcessError as e: # An error occured, handle it - print(e.output) + file_print(e.output) curl_output = "" return curl_output @@ -387,22 +390,22 @@ def check_IP_format (pIP): #=============================================================================== def cleanup_database (): # Header - print ('Cleanup Database') - print (' Timestamp:', startTime ) + file_print('Cleanup Database') + file_print(' Timestamp:', startTime ) openDB() # Cleanup Online History - print (' Cleanup Online_History...') + file_print(' Cleanup Online_History...') sql.execute ("DELETE FROM Online_History WHERE Scan_Date <= date('now', '-1 day')") - print (' Optimize Database...') + file_print(' Optimize Database...') # Cleanup Events - 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 - print (' Shrink Database...') + file_print(' Shrink Database...') sql.execute ("VACUUM;") closeDB() @@ -412,11 +415,11 @@ def cleanup_database (): #=============================================================================== def update_devices_MAC_vendors (pArg = ''): # Header - print ('Update HW Vendors') - print (' Timestamp:', startTime ) + file_print('Update HW Vendors') + file_print(' Timestamp:', startTime ) # Update vendors DB (iab oui) - print ('\nUpdating vendors DB (iab & oui)...') + file_print('\nUpdating vendors DB (iab & oui)...') # update_args = ['sh', PIALERT_BACK_PATH + '/update_vendors.sh', ' > ', LOG_PATH + '/update_vendors.log', '2>&1'] update_args = ['sh', PIALERT_BACK_PATH + '/update_vendors.sh', pArg] @@ -425,7 +428,7 @@ def update_devices_MAC_vendors (pArg = ''): update_output = subprocess.check_output (update_args) except subprocess.CalledProcessError as e: # An error occured, handle it - print(e.output) + file_print(e.output) # DEBUG # update_args = ['./vendors_db_update.sh'] @@ -437,7 +440,7 @@ def update_devices_MAC_vendors (pArg = ''): notFound = 0 # All devices loop - print ('\nSearching devices vendor', end='') + file_print('\nSearching devices vendor') openDB() for device in sql.execute ("SELECT * FROM Devices") : # Search vendor in HW Vendors DB @@ -448,24 +451,21 @@ def update_devices_MAC_vendors (pArg = ''): ignored += 1 else : recordsToUpdate.append ([vendor, device['dev_MAC']]) - # progress bar - print ('.', end='') - sys.stdout.flush() # Print log - print ('') - print (" Devices Ignored: ", ignored) - print (" Vendors Not Found:", notFound) - print (" Vendors updated: ", len(recordsToUpdate) ) + file_print('') + file_print(" Devices Ignored: ", ignored) + file_print(" Vendors Not Found:", notFound) + file_print(" Vendors updated: ", len(recordsToUpdate) ) # DEBUG - print list of record to update - # print (recordsToUpdate) + # file_print(recordsToUpdate) # update devices sql.executemany ("UPDATE Devices SET dev_Vendor = ? WHERE dev_MAC = ? ", recordsToUpdate ) # DEBUG - print number of rows updated - # print (sql.rowcount) + # file_print(sql.rowcount) # Close DB closeDB() @@ -495,7 +495,7 @@ def query_MAC_vendor (pMAC): grep_output = subprocess.check_output (grep_args) except subprocess.CalledProcessError as e: # An error occured, handle it - print(e.output) + file_print(e.output) grep_output = " There was an error, check logs for details" # Return Vendor @@ -514,44 +514,44 @@ def scan_network (): reporting = False # Header - print ('Scan Devices') - print (' ScanCycle:', cycle) - print (' Timestamp:', startTime ) + file_print('Scan Devices') + file_print(' ScanCycle:', cycle) + file_print(' Timestamp:', startTime ) # # Query ScanCycle properties print_log ('Query ScanCycle confinguration...') scanCycle_data = query_ScanCycle_Data (True) if scanCycle_data is None: - print ('\n*************** ERROR ***************') - print ('ScanCycle %s not found' % cycle ) - print (' Exiting...\n') + file_print('\n*************** ERROR ***************') + file_print('ScanCycle %s not found' % cycle ) + file_print(' Exiting...\n') return False # ScanCycle data cycle_interval = scanCycle_data['cic_EveryXmin'] # arp-scan command - print ('\nScanning...') - print (' arp-scan Method...') + file_print('\nScanning...') + file_print(' arp-scan Method...') print_log ('arp-scan starts...') arpscan_devices = execute_arpscan () print_log ('arp-scan ends') # DEBUG - print number of rows updated - # print ('aspr-scan result:', len(arpscan_devices)) + # file_print('aspr-scan result:', len(arpscan_devices)) # Pi-hole method - print (' Pi-hole Method...') + file_print(' Pi-hole Method...') openDB() print_log ('Pi-hole copy starts...') reporting = copy_pihole_network() or reporting # DHCP Leases method - print (' DHCP Leases Method...') + file_print(' DHCP Leases Method...') reporting = read_DHCP_leases () or reporting # Load current scan data - print ('\nProcessing scan results...') + file_print('\nProcessing scan results...') print_log ('Save scanned devices') save_scanned_devices (arpscan_devices, cycle_interval) @@ -561,17 +561,17 @@ def scan_network (): print_log ('Stats end') # Create Events - print ('\nUpdating DB Info...') - print (' Sessions Events (connect / discconnect) ...') + file_print('\nUpdating DB Info...') + file_print(' Sessions Events (connect / discconnect) ...') insert_events() # Create New Devices # after create events -> avoid 'connection' event - print (' Creating new devices...') + file_print(' Creating new devices...') create_new_devices () # Update devices info - print (' Updating Devices Info...') + file_print(' Updating Devices Info...') update_devices_data_from_scan () # Resolve devices names @@ -579,19 +579,19 @@ def scan_network (): update_devices_names() # Void false connection - disconnections - print (' Voiding false (ghost) disconnections...') + file_print(' Voiding false (ghost) disconnections...') void_ghost_disconnections () # Pair session events (Connection / Disconnection) - print (' Pairing session events (connection / disconnection) ...') + file_print(' Pairing session events (connection / disconnection) ...') pair_sessions_events() # Sessions snapshot - print (' Creating sessions snapshot...') + file_print(' Creating sessions snapshot...') create_sessions_snapshot () # Skip repeated notifications - print (' Skipping repeated notifications...') + file_print(' Skipping repeated notifications...') skip_repeated_notifications () # Commit changes @@ -627,12 +627,12 @@ def execute_arpscan (): # multiple interfaces if type(SCAN_SUBNETS) is list: - print(" arp-scan: Multiple interfaces") + file_print(" arp-scan: Multiple interfaces") for interface in SCAN_SUBNETS : arpscan_output += execute_arpscan_on_interface (interface) # one interface only else: - print(" arp-scan: One interface") + file_print(" arp-scan: One interface") arpscan_output += execute_arpscan_on_interface (SCAN_SUBNETS) @@ -658,12 +658,12 @@ def execute_arpscan (): # DEBUG - # print (devices_list) - # print (unique_mac) - # print (unique_devices) - # print (len(devices_list)) - # print (len(unique_mac)) - # print (len(unique_devices)) + # file_print(devices_list) + # file_print(unique_mac) + # file_print(unique_devices) + # file_print(len(devices_list)) + # file_print(len(unique_mac)) + # file_print(len(unique_devices)) # return list return unique_devices @@ -682,7 +682,7 @@ def execute_arpscan_on_interface (SCAN_SUBNETS): result = subprocess.check_output (arpscan_args, universal_newlines=True) except subprocess.CalledProcessError as e: # An error occured, handle it - print(e.output) + file_print(e.output) result = "" return result @@ -744,7 +744,7 @@ def read_DHCP_leases (): VALUES (?, ?, ?, ?, ?) """, data) # DEBUG - # print (sql.rowcount) + # file_print(sql.rowcount) return reporting #------------------------------------------------------------------------------- @@ -807,19 +807,19 @@ def print_scan_stats (): sql.execute ("""SELECT COUNT(*) FROM CurrentScan WHERE cur_ScanCycle = ? """, (cycle,)) - print (' Devices Detected.......:', str (sql.fetchone()[0]) ) + file_print(' Devices Detected.......:', str (sql.fetchone()[0]) ) # Devices arp-scan sql.execute ("""SELECT COUNT(*) FROM CurrentScan WHERE cur_ScanMethod='arp-scan' AND cur_ScanCycle = ? """, (cycle,)) - print (' arp-scan Method....:', str (sql.fetchone()[0]) ) + file_print(' arp-scan Method....:', str (sql.fetchone()[0]) ) # Devices Pi-hole sql.execute ("""SELECT COUNT(*) FROM CurrentScan WHERE cur_ScanMethod='PiHole' AND cur_ScanCycle = ? """, (cycle,)) - print (' Pi-hole Method.....: +' + str (sql.fetchone()[0]) ) + file_print(' Pi-hole Method.....: +' + str (sql.fetchone()[0]) ) # New Devices sql.execute ("""SELECT COUNT(*) FROM CurrentScan @@ -827,15 +827,15 @@ def print_scan_stats (): AND NOT EXISTS (SELECT 1 FROM Devices WHERE dev_MAC = cur_MAC) """, (cycle,)) - print (' New Devices........: ' + str (sql.fetchone()[0]) ) + file_print(' New Devices........: ' + str (sql.fetchone()[0]) ) # Devices in this ScanCycle sql.execute ("""SELECT COUNT(*) FROM Devices, CurrentScan WHERE dev_MAC = cur_MAC AND dev_ScanCycle = cur_ScanCycle AND dev_ScanCycle = ? """, (cycle,)) - print ('') - print (' Devices in this cycle..: ' + str (sql.fetchone()[0]) ) + file_print('') + file_print(' Devices in this cycle..: ' + str (sql.fetchone()[0]) ) # Down Alerts sql.execute ("""SELECT COUNT(*) FROM Devices @@ -845,7 +845,7 @@ def print_scan_stats (): WHERE dev_MAC = cur_MAC AND dev_ScanCycle = cur_ScanCycle) """, (cycle,)) - print (' Down Alerts........: ' + str (sql.fetchone()[0]) ) + file_print(' Down Alerts........: ' + str (sql.fetchone()[0]) ) # New Down Alerts sql.execute ("""SELECT COUNT(*) FROM Devices @@ -856,7 +856,7 @@ def print_scan_stats (): WHERE dev_MAC = cur_MAC AND dev_ScanCycle = cur_ScanCycle) """, (cycle,)) - print (' New Down Alerts....: ' + str (sql.fetchone()[0]) ) + file_print(' New Down Alerts....: ' + str (sql.fetchone()[0]) ) # New Connections sql.execute ("""SELECT COUNT(*) FROM Devices, CurrentScan @@ -864,7 +864,7 @@ def print_scan_stats (): AND dev_PresentLastScan = 0 AND dev_ScanCycle = ? """, (cycle,)) - print (' New Connections....: ' + str ( sql.fetchone()[0]) ) + file_print(' New Connections....: ' + str ( sql.fetchone()[0]) ) # Disconnections sql.execute ("""SELECT COUNT(*) FROM Devices @@ -874,7 +874,7 @@ def print_scan_stats (): WHERE dev_MAC = cur_MAC AND dev_ScanCycle = cur_ScanCycle) """, (cycle,)) - print (' Disconnections.....: ' + str ( sql.fetchone()[0]) ) + file_print(' Disconnections.....: ' + str ( sql.fetchone()[0]) ) # IP Changes sql.execute ("""SELECT COUNT(*) FROM Devices, CurrentScan @@ -882,7 +882,7 @@ def print_scan_stats (): AND dev_ScanCycle = ? AND dev_LastIP <> cur_IP """, (cycle,)) - print (' IP Changes.........: ' + str ( sql.fetchone()[0]) ) + file_print(' IP Changes.........: ' + str ( sql.fetchone()[0]) ) # Add to History sql.execute("SELECT * FROM Devices") @@ -1148,7 +1148,7 @@ def update_devices_data_from_scan (): recordsToUpdate.append ([vendor, device['dev_MAC']]) # DEBUG - print list of record to update - # print (recordsToUpdate) + # file_print(recordsToUpdate) sql.executemany ("UPDATE Devices SET dev_Vendor = ? WHERE dev_MAC = ? ", recordsToUpdate ) @@ -1163,7 +1163,7 @@ def update_devices_names (): notFound = 0 # Devices without name - print (' Trying to resolve devices without name...', end='') + 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 @@ -1174,22 +1174,19 @@ def update_devices_names (): elif newName == -2 : ignored += 1 else : - recordsToUpdate.append ([newName, device['dev_MAC']]) - # progress bar - print ('.', end='') - sys.stdout.flush() + recordsToUpdate.append ([newName, device['dev_MAC']]) # Print log - print ('') - print (" Names updated: ", len(recordsToUpdate) ) + file_print('') + file_print(" Names updated: ", len(recordsToUpdate) ) # DEBUG - print list of record to update - # print (recordsToUpdate) + # file_print(recordsToUpdate) # update devices sql.executemany ("UPDATE Devices SET dev_Name = ? WHERE dev_MAC = ? ", recordsToUpdate ) # DEBUG - print number of rows updated - # print (sql.rowcount) + # file_print(sql.rowcount) #------------------------------------------------------------------------------- def resolve_device_name (pMAC, pIP): @@ -1202,7 +1199,7 @@ def resolve_device_name (pMAC, pIP): return -2 # DEBUG - # print (pMAC, pIP) + # file_print(pMAC, pIP) # Resolve name with DIG dig_args = ['dig', '+short', '-x', pIP] @@ -1213,7 +1210,7 @@ def resolve_device_name (pMAC, pIP): newName = subprocess.check_output (dig_args, universal_newlines=True) except subprocess.CalledProcessError as e: # An error occured, handle it - print(e.output) + file_print(e.output) newName = "Error - check logs" # Check returns @@ -1390,7 +1387,7 @@ def email_reporting (): global mail_text global mail_html # Reporting section - print ('\nCheck if something to report...') + file_print('\nCheck if something to report...') openDB() # prepare variables for JSON construction @@ -1588,43 +1585,43 @@ def email_reporting (): # Send Mail if json_internet != [] or json_new_devices != [] or json_down_devices != [] or json_events != []: - print ('\nChanges detected, sending reports...') + file_print('\nChanges detected, sending reports...') if REPORT_MAIL and check_config('email'): - print (' Sending report by email...') + file_print(' Sending report by email...') send_email (mail_text, mail_html) else : - print (' Skip mail...') + file_print(' Skip mail...') if REPORT_APPRISE and check_config('apprise'): - print (' Sending report by Apprise...') + file_print(' Sending report by Apprise...') send_apprise (mail_html) else : - print (' Skip Apprise...') + file_print(' Skip Apprise...') if REPORT_WEBHOOK and check_config('webhook'): - print (' Sending report by webhook...') + file_print(' Sending report by webhook...') send_webhook (json_final, mail_text) else : - print (' Skip webhook...') + file_print(' Skip webhook...') if REPORT_NTFY and check_config('ntfy'): - print (' Sending report by NTFY...') + file_print(' Sending report by NTFY...') send_ntfy (mail_text) else : - print (' Skip NTFY...') + file_print(' Skip NTFY...') if REPORT_PUSHSAFER and check_config('pushsafer'): - print (' Sending report by PUSHSAFER...') + file_print(' Sending report by PUSHSAFER...') send_pushsafer (mail_text) else : - print (' Skip PUSHSAFER...') + file_print(' Skip PUSHSAFER...') # Update MQTT entities if REPORT_MQTT and check_config('mqtt'): - 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 : - print (' Skip MQTT...') + file_print(' Skip MQTT...') else : - print (' No changes to report...') + file_print(' No changes to report...') openDB() @@ -1637,7 +1634,7 @@ def email_reporting (): WHERE eve_PendingAlertEmail = 1""") # DEBUG - print number of rows updated - print (' Notifications:', sql.rowcount) + file_print(' Notifications:', sql.rowcount) # Commit changes sql_connection.commit() @@ -1648,42 +1645,42 @@ def check_config(service): if service == 'email': if SMTP_PASS == '' or SMTP_SERVER == '' or SMTP_USER == '' or REPORT_FROM == '' or REPORT_TO == '': - print (' Error: Email service not set up correctly. Check your pialert.conf SMTP_*, REPORT_FROM and REPORT_TO variables.') + file_print(' Error: Email service not set up correctly. Check your pialert.conf SMTP_*, REPORT_FROM and REPORT_TO variables.') return False else: return True if service == 'apprise': if APPRISE_URL == '' or APPRISE_HOST == '': - print (' Error: Apprise service not set up correctly. Check your pialert.conf APPRISE_* variables.') + file_print(' Error: Apprise service not set up correctly. Check your pialert.conf APPRISE_* variables.') return False else: return True if service == 'webhook': if WEBHOOK_URL == '': - print (' Error: Webhook service not set up correctly. Check your pialert.conf WEBHOOK_* variables.') + file_print(' Error: Webhook service not set up correctly. Check your pialert.conf WEBHOOK_* variables.') return False else: return True if service == 'ntfy': if NTFY_HOST == '' or NTFY_TOPIC == '': - print (' Error: NTFY service not set up correctly. Check your pialert.conf NTFY_* variables.') + file_print(' Error: NTFY service not set up correctly. Check your pialert.conf NTFY_* variables.') return False else: return True if service == 'pushsafer': if PUSHSAFER_TOKEN == 'ApiKey': - print (' Error: Pushsafer service not set up correctly. Check your pialert.conf PUSHSAFER_TOKEN variable.') + file_print(' Error: Pushsafer service not set up correctly. Check your pialert.conf PUSHSAFER_TOKEN variable.') return False else: return True if service == 'mqtt': if MQTT_BROKER == '' or MQTT_PORT == '' or MQTT_USER == '' or MQTT_PASSWORD == '': - print (' Error: MQTT service not set up correctly. Check your pialert.conf MQTT_* variables.') + file_print(' Error: MQTT service not set up correctly. Check your pialert.conf MQTT_* variables.') return False else: return True @@ -1862,7 +1859,7 @@ def send_webhook (_json, _html): logResult (stdout, stderr) except subprocess.CalledProcessError as e: # An error occured, handle it - print(e.output) + file_print(e.output) #------------------------------------------------------------------------------- def send_apprise (html): @@ -1882,7 +1879,7 @@ def send_apprise (html): logResult (stdout, stderr) except subprocess.CalledProcessError as e: # An error occured, handle it - print(e.output) + file_print(e.output) #------------------------------------------------------------------------------- mqtt_connected_to_broker = False @@ -1901,7 +1898,7 @@ def publish_mqtt(client, topic, message): status = result[0] if status != 0: - print("Waiting to reconnect to MQTT broker") + file_print("Waiting to reconnect to MQTT broker") time.sleep(0.1) return True @@ -1991,10 +1988,10 @@ def mqtt_create_client(): global mqtt_connected_to_broker if rc == 0: - print("Connected to broker") + file_print("Connected to broker") mqtt_connected_to_broker = True # Signal connection else: - print("Connection failed") + file_print("Connection failed") mqtt_connected_to_broker = False @@ -2096,11 +2093,11 @@ def start_mqtt_thread (): # flag to check if thread is running mqtt_thread_up = True - print(" Starting MQTT sending") + file_print(" Starting MQTT sending") x = threading.Thread(target=mqtt_start, args=(1,), daemon=True) # start_sending_mqtt(client) - print(" Threading: Starting MQTT thread") + file_print(" Threading: Starting MQTT thread") x.start() @@ -2232,6 +2229,17 @@ def to_binary_sensor(input): #=============================================================================== # UTIL #=============================================================================== +def file_print(*args): + + result = '' + + file = open(LOG_PATH + "/pialert_file.log", "a") + for arg in args: + result += str(arg) + print(result) + file.write(result + '\n') + file.close() +#------------------------------------------------------------------------------- def print_log (pText): global log_timestamp @@ -2243,7 +2251,7 @@ def print_log (pText): log_timestamp2 = datetime.datetime.now() # Print line + time + elapsed time + text - print ('--------------------> ', + file_print('--------------------> ', log_timestamp2, ' ', log_timestamp2 - log_timestamp, ' ', pText) diff --git a/back/report_template.html b/back/report_template.html index 4ef981db..283d47a2 100755 --- a/back/report_template.html +++ b/back/report_template.html @@ -107,8 +107,7 @@ - - +
Pi.Alert - Pi.Alert     () Pi.Alert -
diff --git a/docker-compose.yml b/docker-compose.yml index 41aa7e20..fcd96fbc 100755 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -4,7 +4,7 @@ services: build: . container_name: pialert network_mode: "host" - restart: always + restart: unless-stopped volumes: - ${APP_DATA_LOCATION}/pialert/config:/home/pi/pialert/config - ${APP_DATA_LOCATION}/pialert/db/pialert.db:/home/pi/pialert/db/pialert.db @@ -12,10 +12,20 @@ services: - ${APP_DATA_LOCATION}/pialert/db/setting_darkmode:/home/pi/pialert/db/setting_darkmode # (optional) useful for debugging if you have issues setting up the container - ${LOGS_LOCATION}:/home/pi/pialert/front/log - # comment out below 2 lines, they are only for development purposes + # comment out / delete below lines, they are only for development purposes - ${DEV_LOCATION}/back/pialert.py:/home/pi/pialert/back/pialert.py - - ${DEV_LOCATION}/front:/home/pi/pialert/front - ${DEV_LOCATION}/back/update_vendors.sh:/home/pi/pialert/back/update_vendors.sh + - ${DEV_LOCATION}/front/css:/home/pi/pialert/front/css + - ${DEV_LOCATION}/front/js:/home/pi/pialert/front/js + - ${DEV_LOCATION}/front/php:/home/pi/pialert/front/php + - ${DEV_LOCATION}/front/deviceDetails.php:/home/pi/pialert/front/deviceDetails.php + - ${DEV_LOCATION}/front/devices.php:/home/pi/pialert/front/devices.php + - ${DEV_LOCATION}/front/events.php:/home/pi/pialert/front/events.php + - ${DEV_LOCATION}/front/help_faq.php:/home/pi/pialert/front/help_faq.php + - ${DEV_LOCATION}/front/index.php:/home/pi/pialert/front/index.php + - ${DEV_LOCATION}/front/maintenance.php:/home/pi/pialert/front/maintenance.php + - ${DEV_LOCATION}/front/network.php:/home/pi/pialert/front/network.php + - ${DEV_LOCATION}/front/presence.php:/home/pi/pialert/front/presence.php environment: - TZ=${TZ} - PORT=${PORT} diff --git a/front/log/report_output.html b/front/log/report_output.html deleted file mode 100755 index 69ff6b5f..00000000 --- a/front/log/report_output.html +++ /dev/null @@ -1,56 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - -
- Pi.Alert Report -
- - - - - - -
Report Date: 2021-01-01 08:00 Scan Cycle: 1 Server: pi4
-
- -
- - - - - - -
Puche 2021 (+jokob-sk 2022) Pi.Alert GNU GPLv3
-
-
- - diff --git a/front/maintenance.php b/front/maintenance.php index ed5b5576..e40c121a 100755 --- a/front/maintenance.php +++ b/front/maintenance.php @@ -376,15 +376,16 @@ if ($_REQUEST['tab'] == '1') {
+
- IP_changes.log + pialert_file.log
- +
-
+
pialert.log @@ -396,13 +397,13 @@ if ($_REQUEST['tab'] == '1') {
- stderr.log + IP_changes.log
- +
-
+
stdout.log @@ -411,7 +412,17 @@ if ($_REQUEST['tab'] == '1') {
-
+
+
+
+ stderr.log +
+
+ +
+
+