#
# initial_setup_log.py: Support for logging to syslog during the
#                       Initial Setup run
#
# Copyright (C) 2014  Red Hat, Inc.  All rights reserved.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
#
# Author(s): Martin Kolman <mkolman@redhat.com>

import logging
from logging.handlers import SysLogHandler, SYSLOG_UDP_PORT


class InitialSetupSyslogHandler(SysLogHandler):
    """A SysLogHandler subclass that makes sure the Initial Setup
    messages are easy to identify in the syslog/Journal
    """
    def __init__(self,
                 address=('localhost', SYSLOG_UDP_PORT),
                 facility=SysLogHandler.LOG_USER,
                 tag=''):
        self.tag = tag
        SysLogHandler.__init__(self, address, facility)

    def emit(self, record):
        original_msg = record.msg
        # this is needed to properly show the "initial-setup" prefix
        # for log messages in syslog/Journal
        record.msg = '%s: %s' % (self.tag, original_msg)
        SysLogHandler.emit(self, record)
        record.msg = original_msg


def init(stdout_log):
    """Initialize the Initial Setup logging system"""
    log = logging.getLogger("initial-setup")
    log.setLevel(logging.DEBUG)
    syslogHandler = InitialSetupSyslogHandler('/dev/log', SysLogHandler.LOG_LOCAL1, "initial-setup")
    syslogHandler.setLevel(logging.DEBUG)
    log.addHandler(syslogHandler)

    if stdout_log:
        # also log to stdout because someone is apparently running Initial Setup manually,
        # probably for debugging purposes
        stdoutHandler = logging.StreamHandler()
        stdoutHandler.setLevel(logging.DEBUG)
        stdoutHandler.setFormatter(logging.Formatter('%(levelname)s %(name)s: %(message)s'))
        log.addHandler(stdoutHandler)
