#!/usr/bin/python3
#
#   logactio  -  simple framework for doing configured action on certain
#                log file events
#
# SPDX-FileCopyrightText: Copyright 2012-  David Sommerseth <dazo@eurephia.org>
# SPDX-License-Identifier: GPL-2.0-only
#

import sys
import argparse
from LogActio import LogActio, Logger


if __name__ == '__main__':
    parser = argparse.ArgumentParser(
        description="Simple framework for executing actions on certain log events"
    )

    parser.add_argument("-d", "--daemon", action="store_true", default=False,
                        dest="daemon",
                        help="Run as a daemon")
    parser.add_argument("-p", "--pid-file",
                        dest="pidfile", metavar="PID-FILE", default=None,
                        help="Put pid file of logactio in this file")
    parser.add_argument("--stdout-redir",
                        dest="stdoutredir", metavar="FILE", default="/dev/null",
                        help="Redirect all stdout data to this file "
                             "(only active when running as daemon)")
    parser.add_argument("-c", "--config",
                        dest="cfg", metavar="FILE", default="/etc/logactio.cfg",
                        help="Configuration file for logactio (Default: %(default)s)")
    parser.add_argument("-v", "--verbose", action="count", default=0,
                        dest="verb",
                        help="Increase the log verbosity")
    parser.add_argument("-L", "--log-type", choices=["syslog", "file", "stdout"],
                        dest="logtype", default="syslog",
                        help="Should logging go to file or syslog? (default: %(default)s)")
    parser.add_argument("-l", "--log-file",
                        dest="logfile", metavar="LOG-FILE",
                        help="Filename of the log file to use")
    parser.add_argument("-s", "--syslog-id",
                        dest="syslogid", metavar="SYSLOG-NAME", default="logactio",
                        help="syslog ident to use for syslog events")
    parser.add_argument("--trace", action="store_true",
                        dest="trace", default=False,
                        help="On errors, show a backtrace")
    opts = parser.parse_args()

    try:
        if opts.logtype == "syslog":
            logger = Logger.Logger(Logger.LOGTYPE_SYSLOG, opts.syslogid, opts.verb)
        elif opts.logtype == "file":
            logger = Logger.Logger(Logger.LOGTYPE_FILE, opts.logfile, opts.verb)
        elif opts.logtype == "stdout":
            logger = Logger.Logger(Logger.LOGTYPE_STDOUT, opts.logfile, opts.verb)
        else:
            raise Exception(f"Unknown log type '{opts.logtype}'")

        main = LogActio(opts.cfg, opts.daemon, opts.pidfile, logger.Log, opts.stdoutredir)
        main.Run()
        sys.exit(0)
    except Exception as e:
        if opts.trace:
            import traceback
            traceback.print_exc(file=sys.stdout)
        else:
            print(f"** ERROR ** {e}")
