File indexing completed on 2026-04-09 07:58:23
0001
0002
0003 import argparse
0004 import logging
0005
0006 import os
0007 import glob
0008 import string
0009
0010
0011 def get_files(source):
0012 sources = []
0013 for name in glob.glob(source):
0014 sources.append(name)
0015 return sources
0016
0017
0018
0019 def get_file_template(format_mult_lines):
0020 if format_mult_lines == 'regexp':
0021 format_mult_lines = 'multi-line-mode(regexp) multi-line-prefix("[0-9]{4}\\-[0-9]{2}\\-[0-9]{2}") flags(no-parse)'
0022 else:
0023 format_mult_lines = "multi-line-mode(indented)"
0024
0025 template = """source s_${filename} {
0026 file("$source" %s);
0027 };
0028 destination d_${filename} {
0029 file(
0030 "${destination}"
0031 template("$${ISODATE} ${flag} ${filename} $${HOST} $$(indent-multi-line $${MESSAGE}\\n"));
0032 };
0033 log { source(s_${filename}); destination(d_${filename}); };
0034
0035 """ % format_mult_lines
0036 return string.Template(template)
0037
0038
0039 def get_pipe_template(format_mult_lines):
0040 if format_mult_lines == 'regexp':
0041 format_mult_lines = 'multi-line-mode(regexp) multi-line-prefix("[0-9]{4}\\-[0-9]{2}\\-[0-9]{2}") flags(no-parse)'
0042 else:
0043 format_mult_lines = "multi-line-mode(indented)"
0044
0045 template = """source s_${filename} {
0046 file("$source" %s);
0047 };
0048 destination d_${filename} {
0049 pipe(
0050 "${destination}"
0051 template("$${ISODATE} ${flag} ${filename} $${HOST} $$(indent-multi-line $${MESSAGE}\\n"));
0052 };
0053 log { source(s_${filename}); destination(d_${filename}); };
0054
0055 """ % format_mult_lines
0056 return string.Template(template)
0057
0058
0059 def generate_source_dest_pair(source, destination, flag, pipe=False, format_mult_lines='indent'):
0060 filename = os.path.basename(source).replace(".log", "").replace("_log", "")
0061 if pipe:
0062 template = get_pipe_template(format_mult_lines)
0063 else:
0064 template = get_file_template(format_mult_lines)
0065 ret = template.substitute(filename=filename, source=source, destination=destination, flag=flag)
0066 return ret
0067
0068
0069 def generate_config(config_file, source, destination, flag, pipe=False, format_mult_lines='indent'):
0070 with open(config_file, 'w') as fd:
0071 sources = get_files(source)
0072 for src in sources:
0073 src_dest = generate_source_dest_pair(src, destination, flag, pipe, format_mult_lines=format_mult_lines)
0074 fd.write(src_dest)
0075
0076
0077 logging.getLogger().setLevel(logging.INFO)
0078 parser = argparse.ArgumentParser(description="Configure syslog-ng")
0079 parser.add_argument('-s', '--source', default=None, help='Source files')
0080 parser.add_argument('-d', '--destination', default=None, help='Destination file name')
0081 parser.add_argument('-f', '--flag', default=None, help='Flag name')
0082 parser.add_argument('-c', '--config', default=None, help='Configuration file to be generated')
0083 parser.add_argument('-p', "--pipe", action="store_true", default=False, help='Use pipe')
0084 parser.add_argument('-m', "--mulLineFormat", default='indent', help='indent or regext')
0085 args = parser.parse_args()
0086
0087
0088 if __name__ == '__main__':
0089 generate_config(args.config, args.source, args.destination, args.flag, args.pipe)