tbegin logging refactoring - amprolla - devuan's apt repo merger HTML git clone git://parazyd.org/amprolla.git DIR Log DIR Files DIR Refs DIR README DIR LICENSE --- DIR commit ae0f2f3219c8d65dbf826b49845ed37534fd1443 DIR parent 7392a2b7ee956e00927c2cba424d86edaa912a08 HTML Author: parazyd <parazyd@dyne.org> Date: Wed, 28 Jun 2017 10:21:18 +0200 begin logging refactoring Diffstat: M amprolla_update.py | 19 ++++++++++--------- M lib/log.py | 54 +++++++++++++++++++++---------- M lib/net.py | 13 +++++++------ 3 files changed, 54 insertions(+), 32 deletions(-) --- DIR diff --git a/amprolla_update.py b/amprolla_update.py t@@ -12,6 +12,7 @@ import requests from amprolla_merge import gen_release, merge, prepare_merge_dict from lib.config import aliases, cpunm, repos, repo_order, spooldir +from lib.log import info from lib.parse import compare_dict, get_date, get_time, parse_release from lib.net import download t@@ -23,11 +24,11 @@ def remote_is_newer(remote, local): rem_date = get_date(remote) loc_date = get_date(local) - print('Remote date: %s' % rem_date) - print('Local date: %s' % loc_date) + # print('Remote date: %s' % rem_date) + # print('Local date: %s' % loc_date) if get_time(rem_date) > get_time(loc_date): - print('Remote Release is newer!') + info('Remote Release is newer!') return True return False t@@ -37,8 +38,8 @@ def perform_update(suite, paths): """ Performs an incremental update and merge of a given suite """ - print('Checking for updates in %s' % suite) - print(paths) + info('Checking for updates in %s' % suite) + # print(paths) needsmerge = {} needsmerge['downloads'] = [] # all files that have to be downloaded t@@ -49,7 +50,7 @@ def perform_update(suite, paths): needsmerge[i]['mergelist'] = [] if paths[c]: - print('Working on %s repo' % i) + info('Working on %s repo' % i) remote_path = paths[c].replace(spooldir, repos[i]['host']) remote_rel = requests.get(join(remote_path, 'Release')) t@@ -76,7 +77,7 @@ def perform_update(suite, paths): # download what needs to be downloaded if needsmerge['downloads']: - print('Downloading updates...') + info('Downloading updates...') dlpool = Pool(cpunm) dlpool.map(download, needsmerge['downloads']) t@@ -111,13 +112,13 @@ def perform_update(suite, paths): # perform the actual merge if merge_list: - print('Merging files...') + info('Merging files...') mrgpool = Pool(cpunm) mrgpool.map(merge, merge_list) # generate Release files if we got any new files if needsmerge['downloads']: - print('Generating Release...') + info('Generating Release...') gen_release(suite) DIR diff --git a/lib/log.py b/lib/log.py t@@ -4,33 +4,53 @@ Logging functions """ -# TODO: Replace with logging - -import os +from time import time +from os import makedirs, remove +from os.path import join import sys +from lib.config import logdir -def die(msg): - print("\033[1;31m[E] %s\033[0m" % msg) - sys.exit(1) +def die(msg, tofile=True): + """ + Log error and exit with exitcode 1 + """ + msg = "%d [ERR] %s\n" % (int(time()), msg) + print(msg) + if tofile: + logtofile('amprolla.txt', msg) + sys.exit(1) -def notice(msg): - print("\033[1;32m(*) %s\033[0m" % msg) - return +def warn(msg, tofile=True): + """ + Log warning and continue + """ + msg = "%d [WARN] %s\n" % (int(time()), msg) + print(msg) + if tofile: + logtofile('amprolla.txt', msg) -def warn(msg): - print("\033[1;33m[W] %s\033[0m" % msg) - return +def info(msg, tofile=True): + """ + Log informational message and continue + """ + msg = "%d [INFO] %s\n" % (int(time()), msg) + print(msg) + if tofile: + logtofile('amprolla.txt', msg) -def cleanexit(): - notice("exiting cleanly...") - sys.exit(0) def logtofile(filename, text, redo=False): - os.makedirs(os.path.dirname(filename), exist_ok=True) - lf = open(filename, 'a') + """ + Log given text to a given file. + If redo is True, rewrites the file + """ + makedirs(logdir, exist_ok=True) + if redo: + remove(join(logdir, filename)) + lf = open(join(logdir, filename), 'a') lf.write(text) lf.close() DIR diff --git a/lib/net.py b/lib/net.py t@@ -4,10 +4,11 @@ Network functions/helpers """ -import os +from os import makedirs +from os.path import dirname import requests -from .log import die, warn +from lib.log import die, info, warn def download(uris): t@@ -16,17 +17,17 @@ def download(uris): """ url = uris[0] path = uris[1] - print("downloading: %s\nto: %s" % (url, path)) + info("dl: %s" % url) r = requests.get(url, stream=True) if r.status_code == 404: - warn("download of %s failed: not found!" % url) + warn("failed: 404 not found!") return elif r.status_code != 200: - die("download of %s failed" % url) + die("failed: %d" % r.status_code) - os.makedirs(os.path.dirname(path), exist_ok=True) + makedirs(dirname(path), exist_ok=True) f = open(path, 'wb') # chunk_size {sh,c}ould be more on gbit servers for chunk in r.iter_content(chunk_size=1024):