#!/usr/bin/env python
# Runnable program to relay syslog from one or multiple sources
# to multiple destinations.
#
# ________                             ____  ___
# \______ \ _____ _______  ____   ____ \   \/  /
#  |    |  \\__  \\_  __ \/  _ \ /    \ \     / 
#  |    `   \/ __ \|  | \(  <_> )   |  \/     \ 
# /_______  (____  /__|   \____/|___|  /___/\  \
#         \/     \/                  \/      \_/
#
# Relayed syslog pipeline, version relogger.__version__
# Copyright 2015, DaronX <http://www.daronx.com>
#
import os, sys
import argparse
from time import sleep

from relogger import __version__
from relogger import RLConfig
from relogger import RLServer

__author__ = "Xiaming Chen"
__email__ = "chenxm35@gmail.com"

## parse cli parameters
parser = argparse.ArgumentParser(description='Relayed syslog pipeline, version %s' % __version__)
parser.add_argument('-s', dest='source', type=str, help='a string of source hosts')
parser.add_argument('-d', dest='dest', type=str, help='a string of destination hosts')
parser.add_argument('-F', dest='config', type=str, help='a config file about hosts')
parser.add_argument('-r', dest='ifile', type=str, help='an offline log file to read')
parser.add_argument('-w', dest='ofile', type=str, help='an offline file to write logs')

## check parameters and parse configuration
args = parser.parse_args()
if not (args.config or args.source or args.ifile):
	parser.print_help()
	sys.exit(-1)

rlconfig = RLConfig(config=args.config) if args.config else \
    RLConfig(args.source, args.ifile, args.dest, args.ofile)

## check root permission
if rlconfig.has_source_socket():
    euid = os.geteuid()
    if euid != 0:
        raise EnvironmentError("Permission Denied to read network interfaces.")
        sys.exit(-1)

flowtable = rlconfig.flowtable
server = RLServer(flowtable)
server.start()

print("relogger running ...")
while True:
    sleep(1)