bin/pvl.irker-syslog
author Tero Marttila <terom@paivola.fi>
Sun, 20 Jan 2013 19:52:41 +0200
changeset 155 9f2967ba81ef
parent 145 a72b6aca2619
permissions -rwxr-xr-x
pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
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
126
bf2555ae7d06 pvl.irker-syslog: rearrange to handle EOF on both syslog and irker
Tero Marttila <terom@paivola.fi>
parents: 121
diff changeset
    53
def apply_irker (irker) :
bf2555ae7d06 pvl.irker-syslog: rearrange to handle EOF on both syslog and irker
Tero Marttila <terom@paivola.fi>
parents: 121
diff changeset
    54
    """
bf2555ae7d06 pvl.irker-syslog: rearrange to handle EOF on both syslog and irker
Tero Marttila <terom@paivola.fi>
parents: 121
diff changeset
    55
        Handle irker activity.
bf2555ae7d06 pvl.irker-syslog: rearrange to handle EOF on both syslog and irker
Tero Marttila <terom@paivola.fi>
parents: 121
diff changeset
    56
    """
bf2555ae7d06 pvl.irker-syslog: rearrange to handle EOF on both syslog and irker
Tero Marttila <terom@paivola.fi>
parents: 121
diff changeset
    57
bf2555ae7d06 pvl.irker-syslog: rearrange to handle EOF on both syslog and irker
Tero Marttila <terom@paivola.fi>
parents: 121
diff changeset
    58
    for msg in irker.irk :
bf2555ae7d06 pvl.irker-syslog: rearrange to handle EOF on both syslog and irker
Tero Marttila <terom@paivola.fi>
parents: 121
diff changeset
    59
        log.info("irk: %s", msg)
bf2555ae7d06 pvl.irker-syslog: rearrange to handle EOF on both syslog and irker
Tero Marttila <terom@paivola.fi>
parents: 121
diff changeset
    60
 
bf2555ae7d06 pvl.irker-syslog: rearrange to handle EOF on both syslog and irker
Tero Marttila <terom@paivola.fi>
parents: 121
diff changeset
    61
def apply_syslog (options, syslog, rules, irker) :
bf2555ae7d06 pvl.irker-syslog: rearrange to handle EOF on both syslog and irker
Tero Marttila <terom@paivola.fi>
parents: 121
diff changeset
    62
    """
bf2555ae7d06 pvl.irker-syslog: rearrange to handle EOF on both syslog and irker
Tero Marttila <terom@paivola.fi>
parents: 121
diff changeset
    63
        Handle syslog activity.
bf2555ae7d06 pvl.irker-syslog: rearrange to handle EOF on both syslog and irker
Tero Marttila <terom@paivola.fi>
parents: 121
diff changeset
    64
    """
bf2555ae7d06 pvl.irker-syslog: rearrange to handle EOF on both syslog and irker
Tero Marttila <terom@paivola.fi>
parents: 121
diff changeset
    65
bf2555ae7d06 pvl.irker-syslog: rearrange to handle EOF on both syslog and irker
Tero Marttila <terom@paivola.fi>
parents: 121
diff changeset
    66
    # syslogs
bf2555ae7d06 pvl.irker-syslog: rearrange to handle EOF on both syslog and irker
Tero Marttila <terom@paivola.fi>
parents: 121
diff changeset
    67
    for item in syslog :
bf2555ae7d06 pvl.irker-syslog: rearrange to handle EOF on both syslog and irker
Tero Marttila <terom@paivola.fi>
parents: 121
diff changeset
    68
        match, rulepath, apply = rules.apply(item)
bf2555ae7d06 pvl.irker-syslog: rearrange to handle EOF on both syslog and irker
Tero Marttila <terom@paivola.fi>
parents: 121
diff changeset
    69
        
bf2555ae7d06 pvl.irker-syslog: rearrange to handle EOF on both syslog and irker
Tero Marttila <terom@paivola.fi>
parents: 121
diff changeset
    70
        log.debug("%s: %s: %s", item, rulepath, apply)
bf2555ae7d06 pvl.irker-syslog: rearrange to handle EOF on both syslog and irker
Tero Marttila <terom@paivola.fi>
parents: 121
diff changeset
    71
        
bf2555ae7d06 pvl.irker-syslog: rearrange to handle EOF on both syslog and irker
Tero Marttila <terom@paivola.fi>
parents: 121
diff changeset
    72
        target = apply.get('irk', options.irker_target)
bf2555ae7d06 pvl.irker-syslog: rearrange to handle EOF on both syslog and irker
Tero Marttila <terom@paivola.fi>
parents: 121
diff changeset
    73
        
bf2555ae7d06 pvl.irker-syslog: rearrange to handle EOF on both syslog and irker
Tero Marttila <terom@paivola.fi>
parents: 121
diff changeset
    74
        tag = '/'.join(str(rule) for rule in reversed(rulepath[:-1]))
bf2555ae7d06 pvl.irker-syslog: rearrange to handle EOF on both syslog and irker
Tero Marttila <terom@paivola.fi>
parents: 121
diff changeset
    75
        text = apply.get('text')
bf2555ae7d06 pvl.irker-syslog: rearrange to handle EOF on both syslog and irker
Tero Marttila <terom@paivola.fi>
parents: 121
diff changeset
    76
        
bf2555ae7d06 pvl.irker-syslog: rearrange to handle EOF on both syslog and irker
Tero Marttila <terom@paivola.fi>
parents: 121
diff changeset
    77
        log.info("%s: %s: %s", target, tag, text)
bf2555ae7d06 pvl.irker-syslog: rearrange to handle EOF on both syslog and irker
Tero Marttila <terom@paivola.fi>
parents: 121
diff changeset
    78
bf2555ae7d06 pvl.irker-syslog: rearrange to handle EOF on both syslog and irker
Tero Marttila <terom@paivola.fi>
parents: 121
diff changeset
    79
        if not text :
bf2555ae7d06 pvl.irker-syslog: rearrange to handle EOF on both syslog and irker
Tero Marttila <terom@paivola.fi>
parents: 121
diff changeset
    80
            # XXX: plain irk = ... in rule is broken, as it always applies, and skips any further rules
bf2555ae7d06 pvl.irker-syslog: rearrange to handle EOF on both syslog and irker
Tero Marttila <terom@paivola.fi>
parents: 121
diff changeset
    81
            continue
bf2555ae7d06 pvl.irker-syslog: rearrange to handle EOF on both syslog and irker
Tero Marttila <terom@paivola.fi>
parents: 121
diff changeset
    82
        
bf2555ae7d06 pvl.irker-syslog: rearrange to handle EOF on both syslog and irker
Tero Marttila <terom@paivola.fi>
parents: 121
diff changeset
    83
        if irker and target :
bf2555ae7d06 pvl.irker-syslog: rearrange to handle EOF on both syslog and irker
Tero Marttila <terom@paivola.fi>
parents: 121
diff changeset
    84
            irker[target]('[' + tag + '] ' + text)
bf2555ae7d06 pvl.irker-syslog: rearrange to handle EOF on both syslog and irker
Tero Marttila <terom@paivola.fi>
parents: 121
diff changeset
    85
        else :
bf2555ae7d06 pvl.irker-syslog: rearrange to handle EOF on both syslog and irker
Tero Marttila <terom@paivola.fi>
parents: 121
diff changeset
    86
            print tag, text
bf2555ae7d06 pvl.irker-syslog: rearrange to handle EOF on both syslog and irker
Tero Marttila <terom@paivola.fi>
parents: 121
diff changeset
    87
140
84b6db638131 pvl.irker-syslog: close syslog on irker EOF
Tero Marttila <terom@paivola.fi>
parents: 133
diff changeset
    88
def close_irker (irker) :
129
c66c8020babe pvl.irker-syslog: part irker targets on syslog EOF
Tero Marttila <terom@paivola.fi>
parents: 126
diff changeset
    89
    """
c66c8020babe pvl.irker-syslog: part irker targets on syslog EOF
Tero Marttila <terom@paivola.fi>
parents: 126
diff changeset
    90
        Shutdown irker before quitting.
140
84b6db638131 pvl.irker-syslog: close syslog on irker EOF
Tero Marttila <terom@paivola.fi>
parents: 133
diff changeset
    91
84b6db638131 pvl.irker-syslog: close syslog on irker EOF
Tero Marttila <terom@paivola.fi>
parents: 133
diff changeset
    92
        XXX: irker.close() to disconnect?
129
c66c8020babe pvl.irker-syslog: part irker targets on syslog EOF
Tero Marttila <terom@paivola.fi>
parents: 126
diff changeset
    93
    """
c66c8020babe pvl.irker-syslog: part irker targets on syslog EOF
Tero Marttila <terom@paivola.fi>
parents: 126
diff changeset
    94
    
c66c8020babe pvl.irker-syslog: part irker targets on syslog EOF
Tero Marttila <terom@paivola.fi>
parents: 126
diff changeset
    95
    log.info("Shutting down IRK...")
c66c8020babe pvl.irker-syslog: part irker targets on syslog EOF
Tero Marttila <terom@paivola.fi>
parents: 126
diff changeset
    96
c66c8020babe pvl.irker-syslog: part irker targets on syslog EOF
Tero Marttila <terom@paivola.fi>
parents: 126
diff changeset
    97
    for target in list(irker) :
c66c8020babe pvl.irker-syslog: part irker targets on syslog EOF
Tero Marttila <terom@paivola.fi>
parents: 126
diff changeset
    98
        log.warn("%s", target)
c66c8020babe pvl.irker-syslog: part irker targets on syslog EOF
Tero Marttila <terom@paivola.fi>
parents: 126
diff changeset
    99
        del irker[target]
c66c8020babe pvl.irker-syslog: part irker targets on syslog EOF
Tero Marttila <terom@paivola.fi>
parents: 126
diff changeset
   100
140
84b6db638131 pvl.irker-syslog: close syslog on irker EOF
Tero Marttila <terom@paivola.fi>
parents: 133
diff changeset
   101
def close_syslog (syslog) :
84b6db638131 pvl.irker-syslog: close syslog on irker EOF
Tero Marttila <terom@paivola.fi>
parents: 133
diff changeset
   102
    """
84b6db638131 pvl.irker-syslog: close syslog on irker EOF
Tero Marttila <terom@paivola.fi>
parents: 133
diff changeset
   103
        Shutdown syslog before quitting
84b6db638131 pvl.irker-syslog: close syslog on irker EOF
Tero Marttila <terom@paivola.fi>
parents: 133
diff changeset
   104
    """
84b6db638131 pvl.irker-syslog: close syslog on irker EOF
Tero Marttila <terom@paivola.fi>
parents: 133
diff changeset
   105
    
84b6db638131 pvl.irker-syslog: close syslog on irker EOF
Tero Marttila <terom@paivola.fi>
parents: 133
diff changeset
   106
    # XXX: do all sources support close()?
84b6db638131 pvl.irker-syslog: close syslog on irker EOF
Tero Marttila <terom@paivola.fi>
parents: 133
diff changeset
   107
    log.warn("%s", syslog)
84b6db638131 pvl.irker-syslog: close syslog on irker EOF
Tero Marttila <terom@paivola.fi>
parents: 133
diff changeset
   108
    syslog.close()
84b6db638131 pvl.irker-syslog: close syslog on irker EOF
Tero Marttila <terom@paivola.fi>
parents: 133
diff changeset
   109
43
9d13b101beab pvl.syslog: implement pvl.syslog.args.apply -> SyslogSource as in pvl.verkko-dhcp
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   110
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
   111
    options, args = parse_options(argv)
126
bf2555ae7d06 pvl.irker-syslog: rearrange to handle EOF on both syslog and irker
Tero Marttila <terom@paivola.fi>
parents: 121
diff changeset
   112
    
bf2555ae7d06 pvl.irker-syslog: rearrange to handle EOF on both syslog and irker
Tero Marttila <terom@paivola.fi>
parents: 121
diff changeset
   113
    # no args
48
40ccb8d3c96e pvl.verkko-syslog: syslog -> irker gateway
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
   114
    if args :
126
bf2555ae7d06 pvl.irker-syslog: rearrange to handle EOF on both syslog and irker
Tero Marttila <terom@paivola.fi>
parents: 121
diff changeset
   115
        log.error("Usage: pvl.irker-syslog [options]")
bf2555ae7d06 pvl.irker-syslog: rearrange to handle EOF on both syslog and irker
Tero Marttila <terom@paivola.fi>
parents: 121
diff changeset
   116
        return 2
43
9d13b101beab pvl.syslog: implement pvl.syslog.args.apply -> SyslogSource as in pvl.verkko-dhcp
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   117
    
126
bf2555ae7d06 pvl.irker-syslog: rearrange to handle EOF on both syslog and irker
Tero Marttila <terom@paivola.fi>
parents: 121
diff changeset
   118
    # setup
48
40ccb8d3c96e pvl.verkko-syslog: syslog -> irker gateway
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
   119
    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
   120
    syslog = pvl.syslog.args.apply(options)
51
96d204b146b4 pvl.syslog.rule: refactor rule-config loading
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   121
    
48
40ccb8d3c96e pvl.verkko-syslog: syslog -> irker gateway
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
   122
    log.info("Load rules...")
51
96d204b146b4 pvl.syslog.rule: refactor rule-config loading
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   123
    rules = pvl.syslog.rule.apply(options)
48
40ccb8d3c96e pvl.verkko-syslog: syslog -> irker gateway
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
   124
40ccb8d3c96e pvl.verkko-syslog: syslog -> irker gateway
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
   125
    log.info("Connect IRK..")
80
231d3de7081a pvl.verkko-syslog: renamed pvl.irk
Tero Marttila <terom@paivola.fi>
parents: 79
diff changeset
   126
    irker = pvl.irk.apply(options)
89
37d7168156c6 pvl.irker-syslog: pre-join targets on startup
Tero Marttila <terom@paivola.fi>
parents: 88
diff changeset
   127
    
37d7168156c6 pvl.irker-syslog: pre-join targets on startup
Tero Marttila <terom@paivola.fi>
parents: 88
diff changeset
   128
    if options.irker_target :
37d7168156c6 pvl.irker-syslog: pre-join targets on startup
Tero Marttila <terom@paivola.fi>
parents: 88
diff changeset
   129
        # pre-join target
37d7168156c6 pvl.irker-syslog: pre-join targets on startup
Tero Marttila <terom@paivola.fi>
parents: 88
diff changeset
   130
        irker[options.irker_target]
48
40ccb8d3c96e pvl.verkko-syslog: syslog -> irker gateway
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
   131
40ccb8d3c96e pvl.verkko-syslog: syslog -> irker gateway
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
   132
    log.info("Process syslog messages...")
113
49e13576d77c pvl.irker-syslog: implement a crude mainloop using syslog, to detect EOF on irker
Tero Marttila <terom@paivola.fi>
parents: 102
diff changeset
   133
49e13576d77c pvl.irker-syslog: implement a crude mainloop using syslog, to detect EOF on irker
Tero Marttila <terom@paivola.fi>
parents: 102
diff changeset
   134
    # customized mainloop that supports irker.irk
49e13576d77c pvl.irker-syslog: implement a crude mainloop using syslog, to detect EOF on irker
Tero Marttila <terom@paivola.fi>
parents: 102
diff changeset
   135
    while True :
126
bf2555ae7d06 pvl.irker-syslog: rearrange to handle EOF on both syslog and irker
Tero Marttila <terom@paivola.fi>
parents: 121
diff changeset
   136
        try :
133
6365568b4a5a pvl.irk: update for pvl.irk/pvl.syslog.file changes
Tero Marttila <terom@paivola.fi>
parents: 131
diff changeset
   137
            # TODO: seprate IrkError, to not confuse irk write vs syslog read eof
126
bf2555ae7d06 pvl.irker-syslog: rearrange to handle EOF on both syslog and irker
Tero Marttila <terom@paivola.fi>
parents: 121
diff changeset
   138
            apply_syslog(options, syslog, rules, irker)
113
49e13576d77c pvl.irker-syslog: implement a crude mainloop using syslog, to detect EOF on irker
Tero Marttila <terom@paivola.fi>
parents: 102
diff changeset
   139
126
bf2555ae7d06 pvl.irker-syslog: rearrange to handle EOF on both syslog and irker
Tero Marttila <terom@paivola.fi>
parents: 121
diff changeset
   140
        except EOFError as ex :
bf2555ae7d06 pvl.irker-syslog: rearrange to handle EOF on both syslog and irker
Tero Marttila <terom@paivola.fi>
parents: 121
diff changeset
   141
            log.error("syslog: EOF")
140
84b6db638131 pvl.irker-syslog: close syslog on irker EOF
Tero Marttila <terom@paivola.fi>
parents: 133
diff changeset
   142
84b6db638131 pvl.irker-syslog: close syslog on irker EOF
Tero Marttila <terom@paivola.fi>
parents: 133
diff changeset
   143
            close_irker(irker)
84b6db638131 pvl.irker-syslog: close syslog on irker EOF
Tero Marttila <terom@paivola.fi>
parents: 133
diff changeset
   144
            
84b6db638131 pvl.irker-syslog: close syslog on irker EOF
Tero Marttila <terom@paivola.fi>
parents: 133
diff changeset
   145
            # 0 is controlled exit
131
aa12f64f8976 pvl.irker-syslog: exit 0 on syslog/irk EOF -> quicker retry
Tero Marttila <terom@paivola.fi>
parents: 129
diff changeset
   146
            return 0
115
9772d43669fb pvl.syslog.syslog: fix SyslogSource polling (--syslog-file -> poll=False, rename to select)
Tero Marttila <terom@paivola.fi>
parents: 113
diff changeset
   147
145
a72b6aca2619 pvl.irk: raise IrkError if send EOF's
Tero Marttila <terom@paivola.fi>
parents: 140
diff changeset
   148
        except pvl.irk.IrkError as ex :
a72b6aca2619 pvl.irk: raise IrkError if send EOF's
Tero Marttila <terom@paivola.fi>
parents: 140
diff changeset
   149
            log.error("irker: %s", ex)
a72b6aca2619 pvl.irk: raise IrkError if send EOF's
Tero Marttila <terom@paivola.fi>
parents: 140
diff changeset
   150
a72b6aca2619 pvl.irk: raise IrkError if send EOF's
Tero Marttila <terom@paivola.fi>
parents: 140
diff changeset
   151
            # XXX: copy-pasta
a72b6aca2619 pvl.irk: raise IrkError if send EOF's
Tero Marttila <terom@paivola.fi>
parents: 140
diff changeset
   152
            close_syslog(syslog)
a72b6aca2619 pvl.irk: raise IrkError if send EOF's
Tero Marttila <terom@paivola.fi>
parents: 140
diff changeset
   153
            return 0
a72b6aca2619 pvl.irk: raise IrkError if send EOF's
Tero Marttila <terom@paivola.fi>
parents: 140
diff changeset
   154
121
4f16bf6365f1 pvl.irker-syslog: fix not-polling on irk
Tero Marttila <terom@paivola.fi>
parents: 119
diff changeset
   155
        # quit unless we have something to poll
4f16bf6365f1 pvl.irker-syslog: fix not-polling on irk
Tero Marttila <terom@paivola.fi>
parents: 119
diff changeset
   156
        if not syslog.poll :
115
9772d43669fb pvl.syslog.syslog: fix SyslogSource polling (--syslog-file -> poll=False, rename to select)
Tero Marttila <terom@paivola.fi>
parents: 113
diff changeset
   157
            break
119
40b5375d4a27 pvl.irker-syslog: simpler mainloop
Tero Marttila <terom@paivola.fi>
parents: 115
diff changeset
   158
121
4f16bf6365f1 pvl.irker-syslog: fix not-polling on irk
Tero Marttila <terom@paivola.fi>
parents: 119
diff changeset
   159
        # is irk pollable?
4f16bf6365f1 pvl.irker-syslog: fix not-polling on irk
Tero Marttila <terom@paivola.fi>
parents: 119
diff changeset
   160
        if irker.irk.recv :
4f16bf6365f1 pvl.irker-syslog: fix not-polling on irk
Tero Marttila <terom@paivola.fi>
parents: 119
diff changeset
   161
            reading = (irker.irk, )
4f16bf6365f1 pvl.irker-syslog: fix not-polling on irk
Tero Marttila <terom@paivola.fi>
parents: 119
diff changeset
   162
        else :
4f16bf6365f1 pvl.irker-syslog: fix not-polling on irk
Tero Marttila <terom@paivola.fi>
parents: 119
diff changeset
   163
            reading = ()
4f16bf6365f1 pvl.irker-syslog: fix not-polling on irk
Tero Marttila <terom@paivola.fi>
parents: 119
diff changeset
   164
        
4f16bf6365f1 pvl.irker-syslog: fix not-polling on irk
Tero Marttila <terom@paivola.fi>
parents: 119
diff changeset
   165
        poll = syslog.select(syslog.poll, reading=reading) or () # timeout -> ()
4f16bf6365f1 pvl.irker-syslog: fix not-polling on irk
Tero Marttila <terom@paivola.fi>
parents: 119
diff changeset
   166
        
4f16bf6365f1 pvl.irker-syslog: fix not-polling on irk
Tero Marttila <terom@paivola.fi>
parents: 119
diff changeset
   167
        if irker.irk in poll :
4f16bf6365f1 pvl.irker-syslog: fix not-polling on irk
Tero Marttila <terom@paivola.fi>
parents: 119
diff changeset
   168
            # irks?
4f16bf6365f1 pvl.irker-syslog: fix not-polling on irk
Tero Marttila <terom@paivola.fi>
parents: 119
diff changeset
   169
            try :
126
bf2555ae7d06 pvl.irker-syslog: rearrange to handle EOF on both syslog and irker
Tero Marttila <terom@paivola.fi>
parents: 121
diff changeset
   170
                apply_irker(irker)
119
40b5375d4a27 pvl.irker-syslog: simpler mainloop
Tero Marttila <terom@paivola.fi>
parents: 115
diff changeset
   171
121
4f16bf6365f1 pvl.irker-syslog: fix not-polling on irk
Tero Marttila <terom@paivola.fi>
parents: 119
diff changeset
   172
            except EOFError :
140
84b6db638131 pvl.irker-syslog: close syslog on irker EOF
Tero Marttila <terom@paivola.fi>
parents: 133
diff changeset
   173
                log.error("irk: EOF")
84b6db638131 pvl.irker-syslog: close syslog on irker EOF
Tero Marttila <terom@paivola.fi>
parents: 133
diff changeset
   174
                
84b6db638131 pvl.irker-syslog: close syslog on irker EOF
Tero Marttila <terom@paivola.fi>
parents: 133
diff changeset
   175
                close_syslog(syslog)
84b6db638131 pvl.irker-syslog: close syslog on irker EOF
Tero Marttila <terom@paivola.fi>
parents: 133
diff changeset
   176
131
aa12f64f8976 pvl.irker-syslog: exit 0 on syslog/irk EOF -> quicker retry
Tero Marttila <terom@paivola.fi>
parents: 129
diff changeset
   177
                # exit 0, so as to restart sooner
aa12f64f8976 pvl.irker-syslog: exit 0 on syslog/irk EOF -> quicker retry
Tero Marttila <terom@paivola.fi>
parents: 129
diff changeset
   178
                # XXX: maybe use a special exit code instead?
aa12f64f8976 pvl.irker-syslog: exit 0 on syslog/irk EOF -> quicker retry
Tero Marttila <terom@paivola.fi>
parents: 129
diff changeset
   179
                return 0
126
bf2555ae7d06 pvl.irker-syslog: rearrange to handle EOF on both syslog and irker
Tero Marttila <terom@paivola.fi>
parents: 121
diff changeset
   180
     
43
9d13b101beab pvl.syslog: implement pvl.syslog.args.apply -> SyslogSource as in pvl.verkko-dhcp
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   181
    # done
9d13b101beab pvl.syslog: implement pvl.syslog.args.apply -> SyslogSource as in pvl.verkko-dhcp
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   182
    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
   183
    return 0
9d13b101beab pvl.syslog: implement pvl.syslog.args.apply -> SyslogSource as in pvl.verkko-dhcp
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   184
9d13b101beab pvl.syslog: implement pvl.syslog.args.apply -> SyslogSource as in pvl.verkko-dhcp
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   185
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
   186
    import sys
9d13b101beab pvl.syslog: implement pvl.syslog.args.apply -> SyslogSource as in pvl.verkko-dhcp
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   187
9d13b101beab pvl.syslog: implement pvl.syslog.args.apply -> SyslogSource as in pvl.verkko-dhcp
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   188
    sys.exit(main(sys.argv))