diff options
author | Alejandro Sirgo Rica <asirgo@soleta.eu> | 2024-04-02 12:51:34 +0200 |
---|---|---|
committer | Alejandro Sirgo Rica <asirgo@soleta.eu> | 2024-04-03 13:31:10 +0200 |
commit | dfde363aa63ad3e7967da49f4ab599399b89e7f8 (patch) | |
tree | 051f1f1d1e3c8e07ae12af2bfb35174be18f1201 /src/utils/tiptorrent.py | |
parent | c5ccc3c7e201beccf8eb3d329e478bb33b34d43e (diff) |
src: log backtrace in unhandled error cases
Log an error message in known error cases and log a backtrace
otherwise.
Define a new error type OgError to be used in all the 'raise'
blocks to define the error message to log. The exception
propagates until it reaches send_internal_server_error() where
the exception type is checked. If the type is OgError we log
the exception message. Logs the backtrace for other types.
The initial error implementation printed a backtrace everytime
an error ocurred. The next iteration changed it to only print
a backtrace in a very particular case but ended up omiting too
much information such as syntax errors or unknown error context.
The actual implementation only logs the cases we already cover in
the codebase and logs a bracktrace in the others, enabling a
better debugging experience.
Diffstat (limited to 'src/utils/tiptorrent.py')
-rw-r--r-- | src/utils/tiptorrent.py | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/src/utils/tiptorrent.py b/src/utils/tiptorrent.py index 18c4df7..83ca052 100644 --- a/src/utils/tiptorrent.py +++ b/src/utils/tiptorrent.py @@ -13,6 +13,7 @@ import shlex import shutil import subprocess import urllib.request +from src.log import OgError def _compute_md5(path, bs=2**20): m = hashlib.md5() @@ -33,9 +34,9 @@ def tip_fetch_csum(tip_addr, image_name): with urllib.request.urlopen(f'{url}') as resp: r = resp.readline().rstrip().decode('utf-8') except urllib.error.URLError as e: - raise urllib.error.URLError(f'URL error when fetching checksum: {e.reason}') from e + raise OgError(f'URL error when fetching checksum: {e.reason}') from e except urllib.error.HTTPError as e: - raise urllib.error.URLError(f'HTTP Error when fetching checksum: {e.reason}') from e + raise OgError(f'HTTP Error when fetching checksum: {e.reason}') from e return r @@ -46,7 +47,7 @@ def tip_write_csum(image_name): image_path = f'/opt/opengnsys/cache/opt/opengnsys/images/{image_name}.img' if not os.path.exists(image_path): - raise RuntimeError(f'Invalid image path {image_path} for tiptorrent checksum writing') + raise OgError(f'Invalid image path {image_path} for tiptorrent checksum writing') filename = image_path + ".full.sum" csum = _compute_md5(image_path) @@ -62,7 +63,7 @@ def tip_check_csum(tip_addr, image_name): logging.info(f'Verifying checksum for {image_name}.img, please wait...') image_path = f'/opt/opengnsys/cache/opt/opengnsys/images/{image_name}.img' if not os.path.exists(image_path): - raise RuntimeError(f'Invalid image path {image_path} for tiptorrent image csum comparison') + raise OgError(f'Invalid image path {image_path} for tiptorrent image csum comparison') cache_csum = _compute_md5(image_path) remote_csum = tip_fetch_csum(tip_addr, image_name) @@ -85,12 +86,12 @@ def tip_client_get(tip_addr, image_name): cwd='/opt/opengnsys/cache/opt/opengnsys/images/') proc.communicate() except OSError as e: - raise OSError('Unexpected error running tiptorrent subprocess: {e}') from e + raise OgError('Unexpected error running tiptorrent subprocess: {e}') from e finally: logfile.close() if proc.returncode != 0: - raise RuntimeError(f'Error fetching image {image_name} via tiptorrent') + raise OgError(f'Error fetching image {image_name} via tiptorrent') else: logging.info('Calculating checksum...') logging.info('*DO NOT REBOOT OR POWEROFF* the client during this time') |