bin/pvl.irker-syslog
author Tero Marttila <terom@paivola.fi>
Sat, 12 Jan 2013 21:48:50 +0200
changeset 102 87ee46067066
parent 96 d02b0b67c29c
child 113 49e13576d77c
permissions -rwxr-xr-x
pvl.irker-syslog: omit target when logging without irker
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
80
231d3de7081a pvl.verkko-syslog: renamed pvl.irk
Tero Marttila <terom@paivola.fi>
parents: 79
diff changeset
    12
import pvl.irk
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))
82
4383c996156e pvl.verkko-syslog: fix pvl.irk name, ignore non-text apply's
Tero Marttila <terom@paivola.fi>
parents: 80
diff changeset
    40
    parser.add_option_group(pvl.irk.parser(parser, connect=None))
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
96
d02b0b67c29c pvl.args: implement optional --uid/gid support, but not particularly useful..
Tero Marttila <terom@paivola.fi>
parents: 89
diff changeset
    49
    pvl.args.apply(options, prog, rootok=False)
43
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..")
80
231d3de7081a pvl.verkko-syslog: renamed pvl.irk
Tero Marttila <terom@paivola.fi>
parents: 79
diff changeset
    69
    irker = pvl.irk.apply(options)
89
37d7168156c6 pvl.irker-syslog: pre-join targets on startup
Tero Marttila <terom@paivola.fi>
parents: 88
diff changeset
    70
    
37d7168156c6 pvl.irker-syslog: pre-join targets on startup
Tero Marttila <terom@paivola.fi>
parents: 88
diff changeset
    71
    if options.irker_target :
37d7168156c6 pvl.irker-syslog: pre-join targets on startup
Tero Marttila <terom@paivola.fi>
parents: 88
diff changeset
    72
        # pre-join target
37d7168156c6 pvl.irker-syslog: pre-join targets on startup
Tero Marttila <terom@paivola.fi>
parents: 88
diff changeset
    73
        irker[options.irker_target]
48
40ccb8d3c96e pvl.verkko-syslog: syslog -> irker gateway
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
    74
40ccb8d3c96e pvl.verkko-syslog: syslog -> irker gateway
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
    75
    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
    76
    for item in syslog.main() :
76
60bdff4bedfb pvl.syslog.rule: implement proper match/apply support
Tero Marttila <terom@paivola.fi>
parents: 71
diff changeset
    77
        match, rulepath, apply = rules.apply(item)
88
c59e4fc3cdff rename pvl.verkko-syslog -> pvl.irker-syslog; tweak logging of messages
Tero Marttila <terom@paivola.fi>
parents: 82
diff changeset
    78
        
c59e4fc3cdff rename pvl.verkko-syslog -> pvl.irker-syslog; tweak logging of messages
Tero Marttila <terom@paivola.fi>
parents: 82
diff changeset
    79
        log.debug("%s: %s: %s", item, rulepath, apply)
76
60bdff4bedfb pvl.syslog.rule: implement proper match/apply support
Tero Marttila <terom@paivola.fi>
parents: 71
diff changeset
    80
        
60bdff4bedfb pvl.syslog.rule: implement proper match/apply support
Tero Marttila <terom@paivola.fi>
parents: 71
diff changeset
    81
        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
    82
        
60bdff4bedfb pvl.syslog.rule: implement proper match/apply support
Tero Marttila <terom@paivola.fi>
parents: 71
diff changeset
    83
        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
    84
        text = apply.get('text')
88
c59e4fc3cdff rename pvl.verkko-syslog -> pvl.irker-syslog; tweak logging of messages
Tero Marttila <terom@paivola.fi>
parents: 82
diff changeset
    85
        
c59e4fc3cdff rename pvl.verkko-syslog -> pvl.irker-syslog; tweak logging of messages
Tero Marttila <terom@paivola.fi>
parents: 82
diff changeset
    86
        log.info("%s: %s: %s", target, tag, text)
82
4383c996156e pvl.verkko-syslog: fix pvl.irk name, ignore non-text apply's
Tero Marttila <terom@paivola.fi>
parents: 80
diff changeset
    87
4383c996156e pvl.verkko-syslog: fix pvl.irk name, ignore non-text apply's
Tero Marttila <terom@paivola.fi>
parents: 80
diff changeset
    88
        if not text :
4383c996156e pvl.verkko-syslog: fix pvl.irk name, ignore non-text apply's
Tero Marttila <terom@paivola.fi>
parents: 80
diff changeset
    89
            # XXX: plain irk = ... in rule is broken, as it always applies, and skips any further rules
4383c996156e pvl.verkko-syslog: fix pvl.irk name, ignore non-text apply's
Tero Marttila <terom@paivola.fi>
parents: 80
diff changeset
    90
            continue
79
530c2aa73a97 pvl.irker: refactor
Tero Marttila <terom@paivola.fi>
parents: 76
diff changeset
    91
        
530c2aa73a97 pvl.irker: refactor
Tero Marttila <terom@paivola.fi>
parents: 76
diff changeset
    92
        if irker and target :
530c2aa73a97 pvl.irker: refactor
Tero Marttila <terom@paivola.fi>
parents: 76
diff changeset
    93
            irker[target]('[' + tag + '] ' + text)
530c2aa73a97 pvl.irker: refactor
Tero Marttila <terom@paivola.fi>
parents: 76
diff changeset
    94
        else :
102
87ee46067066 pvl.irker-syslog: omit target when logging without irker
Tero Marttila <terom@paivola.fi>
parents: 96
diff changeset
    95
            print 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
    96
    
9d13b101beab pvl.syslog: implement pvl.syslog.args.apply -> SyslogSource as in pvl.verkko-dhcp
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    97
    # done
9d13b101beab pvl.syslog: implement pvl.syslog.args.apply -> SyslogSource as in pvl.verkko-dhcp
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    98
    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
    99
    return 0
9d13b101beab pvl.syslog: implement pvl.syslog.args.apply -> SyslogSource as in pvl.verkko-dhcp
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   100
9d13b101beab pvl.syslog: implement pvl.syslog.args.apply -> SyslogSource as in pvl.verkko-dhcp
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   101
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
   102
    import sys
9d13b101beab pvl.syslog: implement pvl.syslog.args.apply -> SyslogSource as in pvl.verkko-dhcp
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   103
9d13b101beab pvl.syslog: implement pvl.syslog.args.apply -> SyslogSource as in pvl.verkko-dhcp
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   104
    sys.exit(main(sys.argv))