From 7b7c4e01cb5cad376c666763280603d098598139 Mon Sep 17 00:00:00 2001 From: Arinerron Date: Tue, 1 May 2018 23:01:20 -0700 Subject: [PATCH] Add debug info on exceptions --- onionr/communicator.py | 2 +- onionr/core.py | 4 ++-- onionr/logger.py | 14 ++++++++++++-- onionr/onionr.py | 38 +++++++++++++++++++++----------------- 4 files changed, 36 insertions(+), 22 deletions(-) diff --git a/onionr/communicator.py b/onionr/communicator.py index 13f95341..e4150b29 100755 --- a/onionr/communicator.py +++ b/onionr/communicator.py @@ -352,7 +352,7 @@ class OnionrCommunicate: if not peer.endswith('.onion') and not peer.endswith('.onion/'): raise PeerError('Currently only Tor .onion peers are supported. You must manually specify .onion') - + if len(self._core.hsAdder.strip()) == 0: raise Exception("Could not perform self address check in performGet due to not knowing our address") if selfCheck: diff --git a/onionr/core.py b/onionr/core.py index 7b94924a..b978cfb4 100644 --- a/onionr/core.py +++ b/onionr/core.py @@ -155,7 +155,7 @@ class Core: return True else: return False - + def removeBlock(self, block): ''' remove a block from this node @@ -590,7 +590,7 @@ class Core: conn.commit() conn.close() return - + def updateBlockInfo(self, hash, key, data): ''' sets info associated with a block diff --git a/onionr/logger.py b/onionr/logger.py index 23ede687..1aade107 100644 --- a/onionr/logger.py +++ b/onionr/logger.py @@ -18,7 +18,7 @@ along with this program. If not, see . ''' -import re, sys, time +import re, sys, time, traceback class colors: ''' @@ -220,9 +220,19 @@ def error(data, error=None, timestamp=True): if get_level() <= LEVEL_ERROR: log('-', data, colors.fg.red, timestamp=timestamp) if not error is None: - debug('Error details: ' + str(error)) + debug('Error details: ' + str(error) + parse_error()) # fatal: when the something so bad has happened that the prorgam must stop def fatal(data, timestamp=True): if get_level() <= LEVEL_FATAL: log('#', data, colors.bg.red + colors.fg.green + colors.bold, timestamp=timestamp) + +# returns a formatted error message +def parse_error(): + details = traceback.extract_tb(sys.exc_info()[2]) + output = '' + + for line in details: + output += '\n ... module %s in %s:%i' % (line[2], line[0], line[1]) + + return output diff --git a/onionr/onionr.py b/onionr/onionr.py index b89b9d58..096ac9f7 100755 --- a/onionr/onionr.py +++ b/onionr/onionr.py @@ -293,11 +293,11 @@ class Onionr: Displays the Onionr version ''' - logger.info('Onionr ' + ONIONR_VERSION + ' (' + platform.machine() + ') - API v' + API_VERSION) + logger.info('Onionr %s (%s) - API v%s' % (ONIONR_VERSION, platform.machine(), API_VERSION)) if verbosity >= 1: logger.info(ONIONR_TAGLINE) if verbosity >= 2: - logger.info('Running on ' + platform.platform() + ' ' + platform.release()) + logger.info('Running on %s %s' % (platform.platform(), platform.release())) return @@ -323,7 +323,7 @@ class Onionr: except KeyboardInterrupt: pass else: - logger.info("Sending message to " + peer) + logger.info("Sending message to: " + logger.colors.underline + peer) self.onionrUtils.sendPM(peer, message) @@ -355,6 +355,7 @@ class Onionr: ''' Adds a Onionr node address ''' + try: newAddress = sys.argv[2] except: @@ -374,22 +375,25 @@ class Onionr: ''' while True: - - messageToAdd = logger.readline('Broadcast message to network: ') - if len(messageToAdd) >= 1: - break + try: + messageToAdd = logger.readline('Broadcast message to network: ') + if len(messageToAdd) >= 1: + break + except KeyboardInterrupt: + return #addedHash = self.onionrCore.setData(messageToAdd) addedHash = self.onionrCore.insertBlock(messageToAdd, header='txt') #self.onionrCore.addToBlockDB(addedHash, selfInsert=True) #self.onionrCore.setBlockType(addedHash, 'txt') - logger.info("inserted your message as block: " + addedHash) + logger.info("Message inserted as as block %s" % addedHash) return def getPMs(self): ''' display PMs sent to us ''' + self.onionrUtils.loadPMs() def enablePlugin(self): @@ -399,10 +403,10 @@ class Onionr: if len(sys.argv) >= 3: plugin_name = sys.argv[2] - logger.info('Enabling plugin \"' + plugin_name + '\"...') + logger.info('Enabling plugin "%s"...' % plugin_name) plugins.enable(plugin_name, self) else: - logger.info(sys.argv[0] + ' ' + sys.argv[1] + ' ') + logger.info('%s %s ' % (sys.argv[0], sys.argv[1])) return @@ -413,10 +417,10 @@ class Onionr: if len(sys.argv) >= 3: plugin_name = sys.argv[2] - logger.info('Disabling plugin \"' + plugin_name + '\"...') + logger.info('Disabling plugin "%s"...' % plugin_name) plugins.disable(plugin_name, self) else: - logger.info(sys.argv[0] + ' ' + sys.argv[1] + ' ') + logger.info('%s %s ' % (sys.argv[0], sys.argv[1])) return @@ -427,7 +431,7 @@ class Onionr: if len(sys.argv) >= 3: plugin_name = sys.argv[2] - logger.info('Reloading plugin \"' + plugin_name + '\"...') + logger.info('Reloading plugin "%s"...' % plugin_name) plugins.stop(plugin_name, self) plugins.start(plugin_name, self) else: @@ -446,21 +450,21 @@ class Onionr: plugin_name = re.sub('[^0-9a-zA-Z]+', '', str(sys.argv[2]).lower()) if not plugins.exists(plugin_name): - logger.info('Creating plugin \"' + plugin_name + '\"...') + logger.info('Creating plugin "%s"...' % plugin_name) os.makedirs(plugins.get_plugins_folder(plugin_name)) with open(plugins.get_plugins_folder(plugin_name) + '/main.py', 'a') as main: main.write(open('static-data/default_plugin.txt').read().replace('$user', os.getlogin()).replace('$date', datetime.datetime.now().strftime('%Y-%m-%d'))) - logger.info('Enabling plugin \"' + plugin_name + '\"...') + logger.info('Enabling plugin "%s"...' % plugin_name) plugins.enable(plugin_name, self) else: - logger.warn('Cannot create plugin directory structure; plugin "' + plugin_name + '" exists.') + logger.warn('Cannot create plugin directory structure; plugin "%s" exists.' % plugin_name) except Exception as e: logger.error('Failed to create plugin directory structure.', e) else: - logger.info(sys.argv[0] + ' ' + sys.argv[1] + ' ') + logger.info('%s %s ' % (sys.argv[0], sys.argv[1])) return