""" This modules contains default config values and basic wrapper for ConfigParser. New config options should be added to the dictionary below, along with appropriate defaults. Runtime configuration is done through the config file at /etc/logparse/logparse.conf (default) or the path specified in the "--config" argument. The file uses the INI syntax, with general options being declared in the [logparse] section and parser-specific options declared in their own sections. This module provides the following methods: - `loadconf()`: set up ConfigParser and process config file """ from configparser import ConfigParser from pkg_resources import Requirement, resource_filename import logparse import logging logger = logging.getLogger(__name__) global prefs prefs = None defaults = { 'logparse': { 'output': '', 'overwrite': False, 'title': logparse.__name__, 'maxlist': 10, 'maxcmd': 6, 'resolve-domains': 'fqdn', 'rotate': False, 'verbose': False, 'quiet': False, 'hostname-path': '/etc/hostname', 'parsers': '', 'ignore-parsers': '', 'period': '1 week', 'datetime-format': "%%b %%d %%H:%%M:%%S", 'journald': True }, 'html': { 'header': '/etc/logparse/header.html', 'css': '/etc/logparse/main.css', 'embed-styles': False, 'css-relpath': True }, 'plain': { 'plain': False, 'linewidth': 80 }, 'logs': { 'auth': '/var/log/auth.log', 'cron': '/var/log/cron.log', 'cpuinfo': '/proc/cpuinfo', 'meminfo': '/proc/meminfo', 'uptime': '/proc/uptime', 'sys': '/var/log/syslog', 'smbd': '/var/log/samba', 'zfs': '/var/log/zpool.log', 'alloc': '/var/log/du.log', 'postfix': '/var/log/mail.log', 'httpd-access': '/var/log/apache2/access.log', 'httpd-error': '/var/log/apache2/error.log' }, 'cron': { 'summary': False, 'list-users': True, 'period': '', 'datetime-format': '', 'truncate-commands': True, 'users': '.*', 'commands': '.*' }, 'mail': { 'to': '', 'from': '', 'subject': 'logparse from $hostname', 'mailbin': '/usr/bin/mail' }, 'temperatures': { 'drives': ['/dev/sda'], 'host': '127.0.0.1', 'separator': '|', 'timeout': 10, 'port': 7634, 'show-model': False, 'period': '' }, 'sshd': { 'sshd-resolve-domains': '', 'period': '' }, 'smbd': { 'shares': '^((?!IPC\$).)*$', 'users': '.*', 'smbd-resolve-domains': '', 'period': '' }, 'httpd': { 'httpd-resolve-domains': '', 'datetime-format': "%%d/%%b/%%Y:%%H:%%M:%%S %%z", 'period': '', 'clients': '.*', 'files': '.*', 'referrers': '.*', 'access-format': "%%h %%l %%u %%t \"%%r\" %%>s %%O \"%%{Referer}i\" \"%%{User-Agent}i\"" }, 'du': { 'paths': ['/', '/etc', '/home'], 'force-write': False }, 'ufw': { 'ufw-resolve-domains': '', 'period': '' }, 'sudo': { 'journald': '', 'datetime-format': '', 'period': '', 'list-users': True, 'summary': True, 'truncate-commands': True, 'init-users': '.*', 'superusers': '.*', 'commands': '.*', 'directories': '.*' }, 'systemd': { 'period': '', 'show-all': True } } def loadconf(configpaths): """ Initial setup for a ConfigParser object. `configpaths` should be a list of configuration files to load (typically only one). To use the generated ConfigParser, use `import logparse.config` and then `config.prefs.get(..)`. The prefs object is returned after creation as a convenience but this method should only be called once per runtime. """ prefs= ConfigParser() prefs.read_dict(defaults) try: success = prefs.read(configpaths) logger.debug("Loaded {0} config file(s): {1}".format( str(len(success)), str(success))) except Exception as e: logger.warning("Error processing config: " + str(e)) return prefs