| author | Tero Marttila <terom@paivola.fi> |
| Sun, 20 Jan 2013 19:52:41 +0200 | |
| changeset 155 | 9f2967ba81ef |
| parent 145 | a72b6aca2619 |
| permissions | -rwxr-xr-x |
|
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)) |