bin/pvl.verkko-syslog
author Tero Marttila <terom@paivola.fi>
Thu, 10 Jan 2013 17:54:55 +0200
changeset 76 60bdff4bedfb
parent 71 11b267e1b2b0
child 79 530c2aa73a97
permissions -rwxr-xr-x
pvl.syslog.rule: implement proper match/apply support
43
9d13b101beab pvl.syslog: implement pvl.syslog.args.apply -> SyslogSource as in pvl.verkko-dhcp
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     1
#!/usr/bin/env python
9d13b101beab pvl.syslog: implement pvl.syslog.args.apply -> SyslogSource as in pvl.verkko-dhcp
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     2
9d13b101beab pvl.syslog: implement pvl.syslog.args.apply -> SyslogSource as in pvl.verkko-dhcp
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     3
"""
48
40ccb8d3c96e pvl.verkko-syslog: syslog -> irker gateway
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
     4
    Syslog -> Irk
43
9d13b101beab pvl.syslog: implement pvl.syslog.args.apply -> SyslogSource as in pvl.verkko-dhcp
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     5
"""
9d13b101beab pvl.syslog: implement pvl.syslog.args.apply -> SyslogSource as in pvl.verkko-dhcp
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     6
9d13b101beab pvl.syslog: implement pvl.syslog.args.apply -> SyslogSource as in pvl.verkko-dhcp
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     7
__version__ = '0.0'
9d13b101beab pvl.syslog: implement pvl.syslog.args.apply -> SyslogSource as in pvl.verkko-dhcp
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     8
9d13b101beab pvl.syslog: implement pvl.syslog.args.apply -> SyslogSource as in pvl.verkko-dhcp
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     9
import pvl.args
9d13b101beab pvl.syslog: implement pvl.syslog.args.apply -> SyslogSource as in pvl.verkko-dhcp
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    10
import pvl.syslog.args
48
40ccb8d3c96e pvl.verkko-syslog: syslog -> irker gateway
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
    11
import pvl.syslog.rule
40ccb8d3c96e pvl.verkko-syslog: syslog -> irker gateway
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
    12
import pvl.irker
43
9d13b101beab pvl.syslog: implement pvl.syslog.args.apply -> SyslogSource as in pvl.verkko-dhcp
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    13
9d13b101beab pvl.syslog: implement pvl.syslog.args.apply -> SyslogSource as in pvl.verkko-dhcp
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    14
import logging, optparse
9d13b101beab pvl.syslog: implement pvl.syslog.args.apply -> SyslogSource as in pvl.verkko-dhcp
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    15
9d13b101beab pvl.syslog: implement pvl.syslog.args.apply -> SyslogSource as in pvl.verkko-dhcp
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    16
log = logging.getLogger('main')
9d13b101beab pvl.syslog: implement pvl.syslog.args.apply -> SyslogSource as in pvl.verkko-dhcp
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    17
9d13b101beab pvl.syslog: implement pvl.syslog.args.apply -> SyslogSource as in pvl.verkko-dhcp
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    18
def parse_options (argv) :
9d13b101beab pvl.syslog: implement pvl.syslog.args.apply -> SyslogSource as in pvl.verkko-dhcp
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    19
    """
9d13b101beab pvl.syslog: implement pvl.syslog.args.apply -> SyslogSource as in pvl.verkko-dhcp
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    20
        Parse command-line arguments.
9d13b101beab pvl.syslog: implement pvl.syslog.args.apply -> SyslogSource as in pvl.verkko-dhcp
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    21
    """
9d13b101beab pvl.syslog: implement pvl.syslog.args.apply -> SyslogSource as in pvl.verkko-dhcp
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    22
9d13b101beab pvl.syslog: implement pvl.syslog.args.apply -> SyslogSource as in pvl.verkko-dhcp
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    23
    prog = argv[0]
9d13b101beab pvl.syslog: implement pvl.syslog.args.apply -> SyslogSource as in pvl.verkko-dhcp
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    24
9d13b101beab pvl.syslog: implement pvl.syslog.args.apply -> SyslogSource as in pvl.verkko-dhcp
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    25
    parser = optparse.OptionParser(
9d13b101beab pvl.syslog: implement pvl.syslog.args.apply -> SyslogSource as in pvl.verkko-dhcp
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    26
            prog        = prog,
9d13b101beab pvl.syslog: implement pvl.syslog.args.apply -> SyslogSource as in pvl.verkko-dhcp
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    27
            usage       = '%prog: [options]',
9d13b101beab pvl.syslog: implement pvl.syslog.args.apply -> SyslogSource as in pvl.verkko-dhcp
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    28
            version     = __version__,
9d13b101beab pvl.syslog: implement pvl.syslog.args.apply -> SyslogSource as in pvl.verkko-dhcp
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    29
9d13b101beab pvl.syslog: implement pvl.syslog.args.apply -> SyslogSource as in pvl.verkko-dhcp
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    30
            # module docstring
9d13b101beab pvl.syslog: implement pvl.syslog.args.apply -> SyslogSource as in pvl.verkko-dhcp
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    31
            description = __doc__,
9d13b101beab pvl.syslog: implement pvl.syslog.args.apply -> SyslogSource as in pvl.verkko-dhcp
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    32
    )
9d13b101beab pvl.syslog: implement pvl.syslog.args.apply -> SyslogSource as in pvl.verkko-dhcp
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    33
    
9d13b101beab pvl.syslog: implement pvl.syslog.args.apply -> SyslogSource as in pvl.verkko-dhcp
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    34
    # options
9d13b101beab pvl.syslog: implement pvl.syslog.args.apply -> SyslogSource as in pvl.verkko-dhcp
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    35
    parser.add_option_group(pvl.args.parser(parser))
48
40ccb8d3c96e pvl.verkko-syslog: syslog -> irker gateway
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
    36
40ccb8d3c96e pvl.verkko-syslog: syslog -> irker gateway
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
    37
    # input
43
9d13b101beab pvl.syslog: implement pvl.syslog.args.apply -> SyslogSource as in pvl.verkko-dhcp
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    38
    parser.add_option_group(pvl.syslog.args.parser(parser))
51
96d204b146b4 pvl.syslog.rule: refactor rule-config loading
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
    39
    parser.add_option_group(pvl.syslog.rule.parser(parser))
48
40ccb8d3c96e pvl.verkko-syslog: syslog -> irker gateway
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
    40
    parser.add_option_group(pvl.irker.parser(parser))
43
9d13b101beab pvl.syslog: implement pvl.syslog.args.apply -> SyslogSource as in pvl.verkko-dhcp
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    41
76
60bdff4bedfb pvl.syslog.rule: implement proper match/apply support
Tero Marttila <terom@paivola.fi>
parents: 71
diff changeset
    42
    parser.add_option('--irker-target', metavar='IRC',
60bdff4bedfb pvl.syslog.rule: implement proper match/apply support
Tero Marttila <terom@paivola.fi>
parents: 71
diff changeset
    43
            help="Irker target URL")
60bdff4bedfb pvl.syslog.rule: implement proper match/apply support
Tero Marttila <terom@paivola.fi>
parents: 71
diff changeset
    44
43
9d13b101beab pvl.syslog: implement pvl.syslog.args.apply -> SyslogSource as in pvl.verkko-dhcp
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    45
    # parse
9d13b101beab pvl.syslog: implement pvl.syslog.args.apply -> SyslogSource as in pvl.verkko-dhcp
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    46
    options, args = parser.parse_args(argv[1:])
9d13b101beab pvl.syslog: implement pvl.syslog.args.apply -> SyslogSource as in pvl.verkko-dhcp
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    47
    
9d13b101beab pvl.syslog: implement pvl.syslog.args.apply -> SyslogSource as in pvl.verkko-dhcp
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    48
    # apply
9d13b101beab pvl.syslog: implement pvl.syslog.args.apply -> SyslogSource as in pvl.verkko-dhcp
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    49
    pvl.args.apply(options, prog)
9d13b101beab pvl.syslog: implement pvl.syslog.args.apply -> SyslogSource as in pvl.verkko-dhcp
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    50
9d13b101beab pvl.syslog: implement pvl.syslog.args.apply -> SyslogSource as in pvl.verkko-dhcp
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    51
    return options, args
9d13b101beab pvl.syslog: implement pvl.syslog.args.apply -> SyslogSource as in pvl.verkko-dhcp
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    52
9d13b101beab pvl.syslog: implement pvl.syslog.args.apply -> SyslogSource as in pvl.verkko-dhcp
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    53
def main (argv) :
9d13b101beab pvl.syslog: implement pvl.syslog.args.apply -> SyslogSource as in pvl.verkko-dhcp
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    54
    options, args = parse_options(argv)
48
40ccb8d3c96e pvl.verkko-syslog: syslog -> irker gateway
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
    55
40ccb8d3c96e pvl.verkko-syslog: syslog -> irker gateway
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
    56
    if args :
40ccb8d3c96e pvl.verkko-syslog: syslog -> irker gateway
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
    57
        # XXX: targets
40ccb8d3c96e pvl.verkko-syslog: syslog -> irker gateway
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
    58
        target, = args
40ccb8d3c96e pvl.verkko-syslog: syslog -> irker gateway
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
    59
    else :
40ccb8d3c96e pvl.verkko-syslog: syslog -> irker gateway
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
    60
        target = None
43
9d13b101beab pvl.syslog: implement pvl.syslog.args.apply -> SyslogSource as in pvl.verkko-dhcp
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    61
    
48
40ccb8d3c96e pvl.verkko-syslog: syslog -> irker gateway
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
    62
    log.info("Open syslog...")
43
9d13b101beab pvl.syslog: implement pvl.syslog.args.apply -> SyslogSource as in pvl.verkko-dhcp
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    63
    syslog = pvl.syslog.args.apply(options)
51
96d204b146b4 pvl.syslog.rule: refactor rule-config loading
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
    64
    
48
40ccb8d3c96e pvl.verkko-syslog: syslog -> irker gateway
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
    65
    log.info("Load rules...")
51
96d204b146b4 pvl.syslog.rule: refactor rule-config loading
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
    66
    rules = pvl.syslog.rule.apply(options)
48
40ccb8d3c96e pvl.verkko-syslog: syslog -> irker gateway
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
    67
40ccb8d3c96e pvl.verkko-syslog: syslog -> irker gateway
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
    68
    log.info("Connect IRK..")
76
60bdff4bedfb pvl.syslog.rule: implement proper match/apply support
Tero Marttila <terom@paivola.fi>
parents: 71
diff changeset
    69
    irk = pvl.irker.apply(options)
48
40ccb8d3c96e pvl.verkko-syslog: syslog -> irker gateway
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
    70
40ccb8d3c96e pvl.verkko-syslog: syslog -> irker gateway
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
    71
    log.info("Process syslog messages...")
60
9326ed989645 pvl.syslog.source: fix iteration over filter/parser/source
Tero Marttila <terom@fixme.fi>
parents: 58
diff changeset
    72
    for item in syslog.main() :
76
60bdff4bedfb pvl.syslog.rule: implement proper match/apply support
Tero Marttila <terom@paivola.fi>
parents: 71
diff changeset
    73
        match, rulepath, apply = rules.apply(item)
58
64885a7c6e85 pvl.syslog.rule: fixfix, implement format
Tero Marttila <terom@fixme.fi>
parents: 55
diff changeset
    74
76
60bdff4bedfb pvl.syslog.rule: implement proper match/apply support
Tero Marttila <terom@paivola.fi>
parents: 71
diff changeset
    75
        log.info("%s: %s", item, apply)
60bdff4bedfb pvl.syslog.rule: implement proper match/apply support
Tero Marttila <terom@paivola.fi>
parents: 71
diff changeset
    76
        
60bdff4bedfb pvl.syslog.rule: implement proper match/apply support
Tero Marttila <terom@paivola.fi>
parents: 71
diff changeset
    77
        target = apply.get('irk', options.irker_target)
60bdff4bedfb pvl.syslog.rule: implement proper match/apply support
Tero Marttila <terom@paivola.fi>
parents: 71
diff changeset
    78
        
60bdff4bedfb pvl.syslog.rule: implement proper match/apply support
Tero Marttila <terom@paivola.fi>
parents: 71
diff changeset
    79
        tag = '/'.join(str(rule) for rule in reversed(rulepath[:-1]))
60bdff4bedfb pvl.syslog.rule: implement proper match/apply support
Tero Marttila <terom@paivola.fi>
parents: 71
diff changeset
    80
        text = apply.get('text')
51
96d204b146b4 pvl.syslog.rule: refactor rule-config loading
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
    81
76
60bdff4bedfb pvl.syslog.rule: implement proper match/apply support
Tero Marttila <terom@paivola.fi>
parents: 71
diff changeset
    82
        print target, tag, text
43
9d13b101beab pvl.syslog: implement pvl.syslog.args.apply -> SyslogSource as in pvl.verkko-dhcp
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    83
    
9d13b101beab pvl.syslog: implement pvl.syslog.args.apply -> SyslogSource as in pvl.verkko-dhcp
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    84
    # done
9d13b101beab pvl.syslog: implement pvl.syslog.args.apply -> SyslogSource as in pvl.verkko-dhcp
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    85
    log.info("Exiting...")
9d13b101beab pvl.syslog: implement pvl.syslog.args.apply -> SyslogSource as in pvl.verkko-dhcp
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    86
    return 0
9d13b101beab pvl.syslog: implement pvl.syslog.args.apply -> SyslogSource as in pvl.verkko-dhcp
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    87
9d13b101beab pvl.syslog: implement pvl.syslog.args.apply -> SyslogSource as in pvl.verkko-dhcp
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    88
if __name__ == '__main__':
9d13b101beab pvl.syslog: implement pvl.syslog.args.apply -> SyslogSource as in pvl.verkko-dhcp
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    89
    import sys
9d13b101beab pvl.syslog: implement pvl.syslog.args.apply -> SyslogSource as in pvl.verkko-dhcp
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    90
9d13b101beab pvl.syslog: implement pvl.syslog.args.apply -> SyslogSource as in pvl.verkko-dhcp
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    91
    sys.exit(main(sys.argv))