add exception logging
This commit is contained in:
		
							parent
							
								
									74ca23af73
								
							
						
					
					
						commit
						db068d859e
					
				| @ -2,6 +2,8 @@ | ||||
| # | ||||
| ############################################################################### | ||||
| #   Copyright (C) 2016-2019 Cortney T. Buffington, N0MJS <n0mjs@me.com> | ||||
| #   GPS/Data - Copyright (C) 2020 Eric Craw, KF7EEL <kf7eel@qsl.net> | ||||
| #   Annotated modifications Copyright (C) 2021 Xavier FRS2013 | ||||
| # | ||||
| #   This program is free software; you can redistribute it and/or modify | ||||
| #   it under the terms of the GNU General Public License as published by | ||||
| @ -42,7 +44,7 @@ from twisted.protocols.basic import NetstringReceiver | ||||
| from twisted.internet import reactor, task | ||||
| 
 | ||||
| # Things we import from the main hblink module | ||||
| from hblink import HBSYSTEM, OPENBRIDGE, systems, hblink_handler, reportFactory, REPORT_OPCODES, mk_aliases | ||||
| from hblink import HBSYSTEM, OPENBRIDGE, systems, hblink_handler, reportFactory, REPORT_OPCODES, mk_aliases, aprs_upload, sendAprs | ||||
| from dmr_utils3.utils import bytes_3, int_id, get_alias | ||||
| from dmr_utils3 import decode, bptc, const | ||||
| import config | ||||
| @ -55,6 +57,7 @@ import pickle | ||||
| # The module needs logging, but handlers, etc. are controlled by the parent | ||||
| import logging | ||||
| logger = logging.getLogger(__name__) | ||||
| import traceback | ||||
| 
 | ||||
| # Import UNIT time from rules.py | ||||
| from rules import UNIT_TIME, STATIC_UNIT | ||||
| @ -108,7 +111,7 @@ __email__      = 'n0mjs@me.com' | ||||
| # AT-D878 - Compressed UDP | ||||
| # MD-380 - Unified Data Transport | ||||
| hdr_type = '' | ||||
| btf = '' | ||||
| btf = -1 | ||||
| ssid = '' | ||||
| 
 | ||||
| # From dmr_utils3, modified to decode entire packet. Works for 1/2 rate coded data.  | ||||
| @ -249,16 +252,18 @@ def process_sms(_rf_src, sms): | ||||
|     elif '@BB' in sms: | ||||
|         dashboard_bb_write(get_alias(int_id(_rf_src), subscriber_ids), int_id(_rf_src), strftime('%H:%M:%S - %m/%d/%y'), re.sub('@BB|@BB ','',sms)) | ||||
|     elif '@' and ' E-' in sms: | ||||
|         email_message = re.sub('.*@|.* E-', '', sms) | ||||
|         to_email = re.sub(' E-.*', '', sms) | ||||
|         email_message = str(re.sub('.*@|.* E-', '', sms)) | ||||
|         to_email = str(re.sub(' E-.*', '', sms)) | ||||
|         email_subject = 'New message from ' + str(get_alias(int_id(_rf_src), subscriber_ids)) | ||||
|         logger.info('Email to: ' + to_email) | ||||
|         logger.info('Message: ' + email_message) | ||||
|         try: | ||||
|             send_email(to_email, email_subject, email_message) | ||||
|             logger.info('Email sent.') | ||||
|         except: | ||||
|         except Exception as error_exception: | ||||
|             logger.info('Failed to send email.') | ||||
|             logger.info(error_exception) | ||||
|             logger.info(str(traceback.extract_tb(error_exception.__traceback__))) | ||||
|     elif '@MH' in sms: | ||||
|         grid_square = re.sub('@MH ', '', sms) | ||||
|         if len(grid_square) < 6: | ||||
| @ -313,8 +318,10 @@ def process_sms(_rf_src, sms): | ||||
|             aprs_send(aprs_loc_packet) | ||||
|             dashboard_loc_write(str(get_alias(int_id(_rf_src), subscriber_ids)) + '-' + ssid, aprs_lat, aprs_lon, strftime('%H:%M:%S - %m/%d/%y')) | ||||
|             #logger.info('Sent manual position to APRS') | ||||
|         except: | ||||
|         except Exception as error_exception: | ||||
|             logger.info('Exception. Not uploaded') | ||||
|             logger.info(error_exception) | ||||
|             logger.info(str(traceback.extract_tb(error_exception.__traceback__))) | ||||
|         packet_assembly = '' | ||||
|            | ||||
|              | ||||
| @ -334,15 +341,19 @@ def process_sms(_rf_src, sms): | ||||
|             aprslib.parse(aprs_msg_pkt) | ||||
|             aprs_send(aprs_msg_pkt) | ||||
|             #logger.info('Packet sent.') | ||||
|         except: | ||||
|         except Exception as error_exception: | ||||
|             logger.info('Error uploading MSG packet.') | ||||
|             logger.info(error_exception) | ||||
|             logger.info(str(traceback.extract_tb(error_exception.__traceback__))) | ||||
|     try: | ||||
|         if sms in cmd_list: | ||||
|             logger.info('Executing command/script.') | ||||
|             os.popen(cmd_list[sms]).read() | ||||
|             packet_assembly = '' | ||||
|     except: | ||||
|     except Exception as error_exception: | ||||
|         logger.info('Exception. Command possibly not in list, or other error.') | ||||
|         logger.info(error_exception) | ||||
|         logger.info(str(traceback.extract_tb(error_exception.__traceback__))) | ||||
|         packet_assembly = '' | ||||
|     else: | ||||
|         pass | ||||
| @ -1486,8 +1497,10 @@ class routerHBP(HBSYSTEM): | ||||
|                         aprs_send(aprs_loc_packet) | ||||
|                         dashboard_loc_write(str(get_alias(int_id(_rf_src), subscriber_ids)) + '-' + ssid, aprs_lat, aprs_lon, strftime('%H:%M:%S - %m/%d/%y')) | ||||
|                         #logger.info('Sent APRS packet') | ||||
|                     except: | ||||
|                     except Exception as error_exception: | ||||
|                         logger.info('Error. Failed to send packet. Packet may be malformed.') | ||||
|                         logger.info(error_exception) | ||||
|                         logger.info(str(traceback.extract_tb(error_exception.__traceback__))) | ||||
|                     udt_block = 1 | ||||
|                     hdr_type = '' | ||||
|                 else: | ||||
| @ -1572,9 +1585,11 @@ class routerHBP(HBSYSTEM): | ||||
|                                 logger.info('User comment: ' + comment) | ||||
|                                 logger.info('User SSID: ' + ssid) | ||||
|                                 logger.info('User icon: ' + icon_table + icon_icon) | ||||
|                             except: | ||||
|                             except Exception as error_exception: | ||||
|                                 logger.info('Error or user settings file not found, proceeding with default settings.') | ||||
|                                 aprs_loc_packet = str(get_alias(int_id(_rf_src), subscriber_ids)) + '-' + str(user_ssid) + '>APHBL3,TCPIP*:/' + str(datetime.datetime.utcnow().strftime("%H%M%Sh")) + str(loc.lat[0:7]) + str(loc.lat_dir) + '/' + str(loc.lon[0:8]) + str(loc.lon_dir) + '[' + str(round(loc.true_course)).zfill(3) + '/' + str(round(loc.spd_over_grnd)).zfill(3) + '/' + aprs_comment + ' DMR ID: ' + str(int_id(_rf_src)) | ||||
|                                 logger.info(error_exception) | ||||
|                                 logger.info(str(traceback.extract_tb(error_exception.__traceback__))) | ||||
|                             try: | ||||
|                             # Try parse of APRS packet. If it fails, it will not upload to APRS-IS | ||||
|                                 aprslib.parse(aprs_loc_packet) | ||||
| @ -1583,8 +1598,10 @@ class routerHBP(HBSYSTEM): | ||||
|                                 float(loc.lon) | ||||
|                                 aprs_send(aprs_loc_packet) | ||||
|                                 dashboard_loc_write(str(get_alias(int_id(_rf_src), subscriber_ids)) + '-' + ssid, str(loc.lat[0:7]) + str(loc.lat_dir), str(loc.lon[0:8]) + str(loc.lon_dir), strftime('%H:%M:%S - %m/%d/%y')) | ||||
|                             except: | ||||
|                             except Exception as error_exception: | ||||
|                                 logger.info('Failed to parse packet. Packet may be deformed. Not uploaded.') | ||||
|                                 logger.info(error_exception) | ||||
|                                 logger.info(str(traceback.extract_tb(error_exception.__traceback__))) | ||||
|                             #final_packet = '' | ||||
|                             # Get callsign based on DMR ID | ||||
|                             # End APRS-IS upload | ||||
| @ -1812,6 +1829,7 @@ if __name__ == '__main__': | ||||
|                 systems[system] = routerHBP(system, CONFIG, report_server) | ||||
|             reactor.listenUDP(CONFIG['SYSTEMS'][system]['PORT'], systems[system], interface=CONFIG['SYSTEMS'][system]['IP']) | ||||
|             logger.debug('(GLOBAL) %s instance created: %s, %s', CONFIG['SYSTEMS'][system]['MODE'], system, systems[system]) | ||||
|     aprs_upload(CONFIG) | ||||
| 
 | ||||
|     def loopingErrHandle(failure): | ||||
|         logger.error('(GLOBAL) STOPPING REACTOR TO AVOID MEMORY LEAK: Unhandled error in timed loop.\n %s', failure) | ||||
|  | ||||
							
								
								
									
										44
									
								
								gps_data.py
									
									
									
									
									
								
							
							
						
						
									
										44
									
								
								gps_data.py
									
									
									
									
									
								
							| @ -48,6 +48,7 @@ import const | ||||
| # The module needs logging logging, but handlers, etc. are controlled by the parent | ||||
| import logging | ||||
| logger = logging.getLogger(__name__) | ||||
| import traceback | ||||
| 
 | ||||
| # Other modules we need for data and GPS | ||||
| from bitarray import bitarray | ||||
| @ -70,12 +71,12 @@ from gps_functions import cmd_list | ||||
| # Module for maidenhead grids | ||||
| try: | ||||
|     import maidenhead as mh | ||||
| except: | ||||
| except Exception as error_exception: | ||||
|     logger.info('Error importing maidenhead module, make sure it is installed.') | ||||
| # Module for sending email | ||||
| try: | ||||
|     import smtplib | ||||
| except: | ||||
| except Exception as error_exception: | ||||
|     logger.info('Error importing smtplib module, make sure it is installed.') | ||||
| 
 | ||||
| #Modules for APRS settings | ||||
| @ -92,6 +93,8 @@ __maintainer__ = 'Eric Craw, KF7EEL' | ||||
| __email__      = 'kf7eel@qsl.net' | ||||
| __status__     = 'pre-alpha' | ||||
| 
 | ||||
| # Known to work with: AT-D878 | ||||
| 
 | ||||
| # Must have the following at line 1054 in bridge.py to forward group vcsbk, also there is a typo there: | ||||
| # self.group_received(_peer_id, _rf_src, _dst_id, _seq, _slot, _frame_type, _dtype_vseq, _stream_id, _data) | ||||
| 
 | ||||
| @ -101,7 +104,7 @@ __status__     = 'pre-alpha' | ||||
| # AT-D878 - Compressed UDP | ||||
| # MD-380 - Unified Data Transport | ||||
| hdr_type = '' | ||||
| btf = '' | ||||
| btf = -1 | ||||
| ssid = '' | ||||
| 
 | ||||
| # From dmr_utils3, modified to decode entire packet. Works for 1/2 rate coded data.  | ||||
| @ -242,16 +245,18 @@ def process_sms(_rf_src, sms): | ||||
|     elif '@BB' in sms: | ||||
|         dashboard_bb_write(get_alias(int_id(_rf_src), subscriber_ids), int_id(_rf_src), time.strftime('%H:%M:%S - %m/%d/%y'), re.sub('@BB|@BB ','',sms)) | ||||
|     elif '@' and ' E-' in sms: | ||||
|         email_message = re.sub('.*@|.* E-', '', sms) | ||||
|         to_email = re.sub(' E-.*', '', sms) | ||||
|         email_message = str(re.sub('.*@|.* E-', '', sms)) | ||||
|         to_email = str(re.sub(' E-.*', '', sms)) | ||||
|         email_subject = 'New message from ' + str(get_alias(int_id(_rf_src), subscriber_ids)) | ||||
|         logger.info('Email to: ' + to_email) | ||||
|         logger.info('Message: ' + email_message) | ||||
|         try: | ||||
|             send_email(to_email, email_subject, email_message) | ||||
|             logger.info('Email sent.') | ||||
|         except: | ||||
|         except Exception as error_exception: | ||||
|             logger.info('Failed to send email.') | ||||
|             logger.info(error_exception) | ||||
|             logger.info(str(traceback.extract_tb(error_exception.__traceback__))) | ||||
|     elif '@MH' in sms: | ||||
|         grid_square = re.sub('@MH ', '', sms) | ||||
|         if len(grid_square) < 6: | ||||
| @ -306,8 +311,10 @@ def process_sms(_rf_src, sms): | ||||
|             aprs_send(aprs_loc_packet) | ||||
|             dashboard_loc_write(str(get_alias(int_id(_rf_src), subscriber_ids)) + '-' + ssid, aprs_lat, aprs_lon, time.strftime('%H:%M:%S - %m/%d/%y')) | ||||
|             #logger.info('Sent manual position to APRS') | ||||
|         except: | ||||
|         except Exception as error_exception: | ||||
|             logger.info('Exception. Not uploaded') | ||||
|             logger.info(error_exception) | ||||
|             logger.info(str(traceback.extract_tb(error_exception.__traceback__))) | ||||
|         packet_assembly = '' | ||||
|            | ||||
|              | ||||
| @ -327,16 +334,20 @@ def process_sms(_rf_src, sms): | ||||
|             aprslib.parse(aprs_msg_pkt) | ||||
|             aprs_send(aprs_msg_pkt) | ||||
|             #logger.info('Packet sent.') | ||||
|         except: | ||||
|         except Exception as error_exception: | ||||
|             logger.info('Error uploading MSG packet.') | ||||
|             logger.info(error_exception) | ||||
|             logger.info(str(traceback.extract_tb(error_exception.__traceback__))) | ||||
|     try: | ||||
|         if sms in cmd_list: | ||||
|             logger.info('Executing command/script.') | ||||
|             os.popen(cmd_list[sms]).read() | ||||
|             packet_assembly = '' | ||||
|     except: | ||||
|     except Exception as error_exception: | ||||
|         logger.info('Exception. Command possibly not in list, or other error.') | ||||
|         packet_assembly = '' | ||||
|         logger.info(error_exception) | ||||
|         logger.info(str(traceback.extract_tb(error_exception.__traceback__))) | ||||
|     else: | ||||
|         pass | ||||
| 
 | ||||
| @ -434,8 +445,10 @@ class DATA_SYSTEM(HBSYSTEM): | ||||
|                         aprs_send(aprs_loc_packet) | ||||
|                         dashboard_loc_write(str(get_alias(int_id(_rf_src), subscriber_ids)) + '-' + ssid, aprs_lat, aprs_lon, time.strftime('%H:%M:%S - %m/%d/%y')) | ||||
|                         #logger.info('Sent APRS packet') | ||||
|                     except: | ||||
|                     except Exception as error_exception: | ||||
|                         logger.info('Error. Failed to send packet. Packet may be malformed.') | ||||
|                         logger.info(error_exception) | ||||
|                         logger.info(str(traceback.extract_tb(error_exception.__traceback__))) | ||||
|                     udt_block = 1 | ||||
|                     hdr_type = '' | ||||
|                 else: | ||||
| @ -459,7 +472,7 @@ class DATA_SYSTEM(HBSYSTEM): | ||||
|                     btf = btf - 1 | ||||
|                     logger.info('Block #: ' + str(btf)) | ||||
|                     #logger.info(_seq) | ||||
|                     logger.info('Data block from ' + str(get_alias(int_id(_rf_src), subscriber_ids)) + '. DMR ID: ' + str(int_id(_rf_src)) + '. Destination: ' + str(int_id(_dst_id))) | ||||
|                     logger.info('Data block from ' + str(get_alias(int_id(_rf_src), subscriber_ids)) + '. DMR ID: ' + str(int_id(_rf_src))) | ||||
|                     logger.info(ahex(bptc_decode(_data))) | ||||
|                     if _seq == 0: | ||||
|                         n_packet_assembly = 0 | ||||
| @ -474,7 +487,6 @@ class DATA_SYSTEM(HBSYSTEM): | ||||
|                     if btf == 0: | ||||
|                         final_packet = str(bitarray(re.sub("\)|\(|bitarray|'", '', packet_assembly)).tobytes().decode('utf-8', 'ignore')) | ||||
|                         sms_hex = str(ba2hx(bitarray(re.sub("\)|\(|bitarray|'", '', packet_assembly)))) | ||||
| 
 | ||||
|                         sms_hex_string = re.sub("b'|'", '', str(sms_hex)) | ||||
|                         #NMEA GPS sentence | ||||
|                         if '$GPRMC' in final_packet or '$GNRMC' in final_packet: | ||||
| @ -521,9 +533,11 @@ class DATA_SYSTEM(HBSYSTEM): | ||||
|                                 logger.info('User comment: ' + comment) | ||||
|                                 logger.info('User SSID: ' + ssid) | ||||
|                                 logger.info('User icon: ' + icon_table + icon_icon) | ||||
|                             except: | ||||
|                             except Exception as error_exception: | ||||
|                                 logger.info('Error or user settings file not found, proceeding with default settings.') | ||||
|                                 aprs_loc_packet = str(get_alias(int_id(_rf_src), subscriber_ids)) + '-' + str(user_ssid) + '>APHBL3,TCPIP*:/' + str(datetime.datetime.utcnow().strftime("%H%M%Sh")) + str(loc.lat[0:7]) + str(loc.lat_dir) + '/' + str(loc.lon[0:8]) + str(loc.lon_dir) + '[' + str(round(loc.true_course)).zfill(3) + '/' + str(round(loc.spd_over_grnd)).zfill(3) + '/' + aprs_comment + ' DMR ID: ' + str(int_id(_rf_src)) | ||||
|                                 logger.info(error_exception) | ||||
|                                 logger.info(str(traceback.extract_tb(error_exception.__traceback__))) | ||||
|                             try: | ||||
|                             # Try parse of APRS packet. If it fails, it will not upload to APRS-IS | ||||
|                                 aprslib.parse(aprs_loc_packet) | ||||
| @ -532,8 +546,10 @@ class DATA_SYSTEM(HBSYSTEM): | ||||
|                                 float(loc.lon) | ||||
|                                 aprs_send(aprs_loc_packet) | ||||
|                                 dashboard_loc_write(str(get_alias(int_id(_rf_src), subscriber_ids)) + '-' + ssid, str(loc.lat[0:7]) + str(loc.lat_dir), str(loc.lon[0:8]) + str(loc.lon_dir), time.strftime('%H:%M:%S - %m/%d/%y')) | ||||
|                             except: | ||||
|                             except Exception as error_exception: | ||||
|                                 logger.info('Failed to parse packet. Packet may be deformed. Not uploaded.') | ||||
|                                 logger.info(error_exception) | ||||
|                                 logger.info(str(traceback.extract_tb(error_exception.__traceback__))) | ||||
|                             #final_packet = '' | ||||
|                             # Get callsign based on DMR ID | ||||
|                             # End APRS-IS upload | ||||
|  | ||||
| @ -3,7 +3,8 @@ bitarray>=0.8.1 | ||||
| Twisted>=16.3.0 | ||||
| dmr_utils3>=0.1.19 | ||||
| configparser>=3.0.0 | ||||
| aprslib | ||||
| aprslib>=0.6.42 | ||||
| traceback | ||||
| pynmea2 | ||||
| maidenhead | ||||
| flask | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user