Commit f1acfbe2 authored by Ibrahim Ahmed's avatar Ibrahim Ahmed
Browse files

controller: settings parsing bugfix;

controller.py: ini section settings would not be processed if the default section had the same setting. Fixed. This was causing both controllers to use the same settings.
monitor.py: Gave monitor logger a name. Monitor also prints remote loggers' names with their IPs.
parent 4e53f87f
Loading
Loading
Loading
Loading
+7 −6
Changes for src/controller.py: 7 added lines, 6 removed lines.
Original line number Diff line number Diff line
@@ -12,8 +12,6 @@ import threading as th
import csv
from datetime import datetime, timedelta

from controllers.esb import Controller

# Issue on Windows where python does not catch keyboard interrupt b/c
# scipy/sklearn (using intel MLK installed via anaconda) imports do their own
# interrupt handling and crash. Pip-installed scipy is fine.
@@ -35,7 +33,7 @@ WORKING_DIR = os.path.abspath(os.getcwd())
# or ini, these defaults are used.
DEFAULTS = dict(
    settings=os.path.join(SOURCECODE_DIR, 'settings.ini'),
    logs=os.path.join(WORKING_DIR, 'log.txt'),
    logs=os.path.join(WORKING_DIR, 'logs.txt'),
    output=os.path.join(WORKING_DIR, 'output.txt'),
    credentialfile='bdxcredentials.ini'
)
@@ -86,8 +84,6 @@ def get_settings(parsed_args: Namespace, section: str='DEFAULT', write_settings=
    # + the ini section specified in `section` argument. The values are not limited to
    # strings but are processed from the raw ini str values.
    settings = {}
    # Initialize with settings specified in the command line
    settings.update(vars(parsed_args))
    # try reading them, if error, return previous settings
    cfg = ConfigParser(allow_no_value=True)
    if parsed_args.settings is None:
@@ -98,7 +94,7 @@ def get_settings(parsed_args: Namespace, section: str='DEFAULT', write_settings=
    for (setting, value) in itertools.chain.from_iterable([cfg[sec].items() for sec in sections]):
        # Only update settings which were not specified in the command line,
        # and which had non empty values
        if (setting not in settings) or (settings.get(setting) is None):
        # if (setting not in settings) or (settings.get(setting) is None):
        # Float conversion
        if setting in ('stepsize', 'window', 'interval'):
            settings[setting] = float(value)
@@ -117,6 +113,11 @@ def get_settings(parsed_args: Namespace, section: str='DEFAULT', write_settings=
        # String
        else:
            settings[setting] = value
    
    
    # Override with settings specified in command line (exclude None values)
    cmdline_args = {setting: value for setting, value in vars(parsed_args).items() if value is not None}
    settings.update(cmdline_args)
    # Add default settings if they did not have a value in the ini or command line.
    # These are settings that must be set in any case.
    for setting in DEFAULTS:
+9 −6
Changes for src/monitor.py: 9 added lines, 6 removed lines.
Original line number Diff line number Diff line
@@ -30,11 +30,14 @@ dapp.layout = html.Div([

@app.route('/log', methods=('POST',))   # endpoint for POST requests
def log():
    logger = get_logger()
    logger = get_logger('monitor')
    rdict = request.form
    ip = request.environ.get('HTTP_X_REAL_IP', request.remote_addr)
    logger.log(int(rdict.get('levelno', logging.ERROR)), 'From: %s. %s' % (ip, rdict.get('message',
                                                                               rdict.get('msg', 'NO_MESSAGE'))))
    logger.log(int(rdict.get('levelno', logging.ERROR)), 'From: %s %s. %s' % \
                                                        (ip,
                                                        rdict.get('name', ''),
                                                        rdict.get('message', rdict.get('msg', 'NO_MESSAGE')),
                                                        ))
    return 'OK'


@@ -70,12 +73,12 @@ if __name__ == '__main__':
    args = parser.parse_args()
    if args.message is not None:
        settings = get_settings(args, section='DEFAULT')
        logger = get_logger()
        logger = make_logger(enable=('stream', 'email', 'http'), logger=logger, **settings)
        logger = get_logger('monitor')
        logger = make_logger(enable=('stream', 'file', 'email', 'http'), logger=logger, **settings)
        logger.info(args.message)
    else:
        settings = get_settings(args, section='MONITOR')
        logger = get_logger()
        logger = get_logger('monitor')
        logger = make_logger(enable=('stream', 'file'), logger=logger, **settings)
        logger.info('Started monitoring on %s:%s ...' % (settings['host'], settings['port']))
        dapp.run_server(host=settings['host'], port=settings['port'], debug=True)