From 19b77a426c4b704553a22e52675b08b2b8f8b3d0 Mon Sep 17 00:00:00 2001 From: Max Date: Mon, 7 Jan 2019 15:53:35 +0100 Subject: [PATCH] ctrl2cgi: update shared helper * split hash generation into simpler functions * move them into helper file * split log init into separate function This facilitates code sharing with new version of ctrl2cgi proxy in folow-up patches. Change-Id: Ic5c349349d2c246f934d6701435b1a2d9de77de1 Related: SYS#4399 --- osmopy/trap_helper.py | 37 ++++++++++++++++++++++++++++++------- scripts/ctrl2cgi.py | 19 ++----------------- 2 files changed, 32 insertions(+), 24 deletions(-) diff --git a/osmopy/trap_helper.py b/osmopy/trap_helper.py index 3e80c6d..d942cd2 100644 --- a/osmopy/trap_helper.py +++ b/osmopy/trap_helper.py @@ -22,7 +22,7 @@ */ """ -import sys, os, datetime, signal, logging, logging.handlers +import hashlib, sys, os, datetime, signal, logging, logging.handlers from functools import partial from osmopy.osmo_ipa import Ctrl @@ -95,16 +95,39 @@ def reloader(path, script, log, dbg1, dbg2, signum, _): sys.argv.remove(dbg2) os.execl(path, script, *sys.argv[1:]) +def add_keys(inp, params, l): + """ + Add given list of keys to input string. + """ + for key in l: + inp += str(params.get(key)) + return inp + +def gen_hash(params, skey): + """ + Make mandatory parameter for HTTP request. + """ + inp = add_keys('', params, ['time_stamp', 'position_validity', 'admin_status', 'policy_status']) + inp += skey + inp = add_keys(inp, params, ['bsc_id', 'lat', 'lon', 'position_validity']) + m = hashlib.md5() + m.update(inp.encode('utf-8')) + return m.hexdigest() + +def log_init(name, is_debug): + """ + Initialize stdout logging. + """ + log = logging.getLogger(name) + log.setLevel(logging.DEBUG if is_debug else logging.INFO) + log.addHandler(logging.StreamHandler(sys.stdout)) + return log + def debug_init(name, is_debug): """ Initialize signal handlers and logging """ - log = logging.getLogger(name) - if is_debug: - log.setLevel(logging.DEBUG) - else: - log.setLevel(logging.INFO) - log.addHandler(logging.StreamHandler(sys.stdout)) + log = log_init(name, is_debug) reboot = partial(reloader, os.path.abspath(__file__), os.path.basename(__file__), log, '-d', '--debug') # keep in sync with caller's add_argument() signal.signal(signal.SIGHUP, reboot) diff --git a/scripts/ctrl2cgi.py b/scripts/ctrl2cgi.py index bb5c93e..95ff788 100755 --- a/scripts/ctrl2cgi.py +++ b/scripts/ctrl2cgi.py @@ -22,7 +22,7 @@ */ """ -__version__ = "0.1.0" # bump this on every non-trivial change +__version__ = "0.1.1" # bump this on every non-trivial change import argparse, os, logging, logging.handlers, datetime import hashlib @@ -32,7 +32,7 @@ from functools import partial from distutils.version import StrictVersion as V from twisted.internet import defer, reactor from treq import post, collect -from osmopy.trap_helper import debug_init, get_type, get_r, p_h, make_params, comm_proc +from osmopy.trap_helper import debug_init, get_type, get_r, p_h, gen_hash, make_params, comm_proc from osmopy.twisted_ipa import CTRL, IPAFactory, __version__ as twisted_ipa_version from osmopy.osmo_ipa import Ctrl @@ -57,21 +57,6 @@ def handle_reply(ts, ts_http, bid, f, log, resp): log_duration(log, bid, ts, ts_http) comm_proc(decoded.get('commands'), bid, f, log) -def gen_hash(params, skey): - """ - Make mandatory parameter for http request - """ - inp = '' - for key in ['time_stamp', 'position_validity', 'admin_status', 'policy_status']: - inp += str(params.get(key)) - inp += skey - for key in ['bsc_id', 'lat', 'lon', 'position_validity']: - inp += str(params.get(key)) - m = hashlib.md5() - m.update(inp.encode('utf-8')) - res = m.hexdigest() - return res - def make_async_req(ts, dst, par, f_write, f_log, tout): """ Assemble deferred request parameters and partially instantiate response handler