author | Tero Marttila <terom@paivola.fi> |
Sun, 07 Sep 2014 16:04:42 +0300 | |
changeset 431 | 4e920e09fc60 |
parent 430 | e928258a1229 |
permissions | -rwxr-xr-x |
187
cbf9371a472d
pvl.verkko-rrd-interfaces: script to setup symlinks for pvl.verkko.rrd from collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
1 |
#!/usr/bin/python |
cbf9371a472d
pvl.verkko-rrd-interfaces: script to setup symlinks for pvl.verkko.rrd from collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
2 |
|
cbf9371a472d
pvl.verkko-rrd-interfaces: script to setup symlinks for pvl.verkko.rrd from collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
3 |
""" |
cbf9371a472d
pvl.verkko-rrd-interfaces: script to setup symlinks for pvl.verkko.rrd from collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
4 |
Setup symlinks for pvl.verkko-rrd -> collectd based on define host/interface names |
cbf9371a472d
pvl.verkko-rrd-interfaces: script to setup symlinks for pvl.verkko.rrd from collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
5 |
""" |
cbf9371a472d
pvl.verkko-rrd-interfaces: script to setup symlinks for pvl.verkko.rrd from collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
6 |
|
cbf9371a472d
pvl.verkko-rrd-interfaces: script to setup symlinks for pvl.verkko.rrd from collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
7 |
__version__ = '0.1' |
cbf9371a472d
pvl.verkko-rrd-interfaces: script to setup symlinks for pvl.verkko.rrd from collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
8 |
|
cbf9371a472d
pvl.verkko-rrd-interfaces: script to setup symlinks for pvl.verkko.rrd from collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
9 |
import os |
cbf9371a472d
pvl.verkko-rrd-interfaces: script to setup symlinks for pvl.verkko.rrd from collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
10 |
|
cbf9371a472d
pvl.verkko-rrd-interfaces: script to setup symlinks for pvl.verkko.rrd from collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
11 |
import pvl.args |
235
a34e7260568b
split pvl.rrd-interface into pvl.rrd.hosts
Tero Marttila <terom@paivola.fi>
parents:
228
diff
changeset
|
12 |
import pvl.rrd.hosts |
a34e7260568b
split pvl.rrd-interface into pvl.rrd.hosts
Tero Marttila <terom@paivola.fi>
parents:
228
diff
changeset
|
13 |
from pvl.rrd.hosts import hostreverse |
187
cbf9371a472d
pvl.verkko-rrd-interfaces: script to setup symlinks for pvl.verkko.rrd from collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
14 |
|
cbf9371a472d
pvl.verkko-rrd-interfaces: script to setup symlinks for pvl.verkko.rrd from collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
15 |
import optparse |
cbf9371a472d
pvl.verkko-rrd-interfaces: script to setup symlinks for pvl.verkko.rrd from collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
16 |
import logging; log = logging.getLogger('main') |
cbf9371a472d
pvl.verkko-rrd-interfaces: script to setup symlinks for pvl.verkko.rrd from collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
17 |
|
cbf9371a472d
pvl.verkko-rrd-interfaces: script to setup symlinks for pvl.verkko.rrd from collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
18 |
COLLECTD_RRD = '/var/lib/collectd/rrd' |
cbf9371a472d
pvl.verkko-rrd-interfaces: script to setup symlinks for pvl.verkko.rrd from collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
19 |
COLLECTD_PLUGIN = 'interfaces' |
cbf9371a472d
pvl.verkko-rrd-interfaces: script to setup symlinks for pvl.verkko.rrd from collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
20 |
COLLECTD_TYPE = 'if_octets' |
cbf9371a472d
pvl.verkko-rrd-interfaces: script to setup symlinks for pvl.verkko.rrd from collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
21 |
|
cbf9371a472d
pvl.verkko-rrd-interfaces: script to setup symlinks for pvl.verkko.rrd from collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
22 |
def parse_argv (argv, doc = __doc__) : |
cbf9371a472d
pvl.verkko-rrd-interfaces: script to setup symlinks for pvl.verkko.rrd from collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
23 |
""" |
cbf9371a472d
pvl.verkko-rrd-interfaces: script to setup symlinks for pvl.verkko.rrd from collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
24 |
Parse command-line argv, returning (options, args). |
cbf9371a472d
pvl.verkko-rrd-interfaces: script to setup symlinks for pvl.verkko.rrd from collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
25 |
""" |
cbf9371a472d
pvl.verkko-rrd-interfaces: script to setup symlinks for pvl.verkko.rrd from collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
26 |
|
cbf9371a472d
pvl.verkko-rrd-interfaces: script to setup symlinks for pvl.verkko.rrd from collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
27 |
prog = argv.pop(0) |
cbf9371a472d
pvl.verkko-rrd-interfaces: script to setup symlinks for pvl.verkko.rrd from collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
28 |
args = argv |
cbf9371a472d
pvl.verkko-rrd-interfaces: script to setup symlinks for pvl.verkko.rrd from collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
29 |
|
cbf9371a472d
pvl.verkko-rrd-interfaces: script to setup symlinks for pvl.verkko.rrd from collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
30 |
# optparse |
cbf9371a472d
pvl.verkko-rrd-interfaces: script to setup symlinks for pvl.verkko.rrd from collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
31 |
parser = optparse.OptionParser( |
cbf9371a472d
pvl.verkko-rrd-interfaces: script to setup symlinks for pvl.verkko.rrd from collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
32 |
prog = prog, |
cbf9371a472d
pvl.verkko-rrd-interfaces: script to setup symlinks for pvl.verkko.rrd from collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
33 |
usage = '%prog: [options] [<input.txt> [...]]', |
cbf9371a472d
pvl.verkko-rrd-interfaces: script to setup symlinks for pvl.verkko.rrd from collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
34 |
version = __version__, |
cbf9371a472d
pvl.verkko-rrd-interfaces: script to setup symlinks for pvl.verkko.rrd from collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
35 |
description = doc, |
cbf9371a472d
pvl.verkko-rrd-interfaces: script to setup symlinks for pvl.verkko.rrd from collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
36 |
) |
cbf9371a472d
pvl.verkko-rrd-interfaces: script to setup symlinks for pvl.verkko.rrd from collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
37 |
|
cbf9371a472d
pvl.verkko-rrd-interfaces: script to setup symlinks for pvl.verkko.rrd from collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
38 |
# common |
cbf9371a472d
pvl.verkko-rrd-interfaces: script to setup symlinks for pvl.verkko.rrd from collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
39 |
parser.add_option_group(pvl.args.parser(parser)) |
cbf9371a472d
pvl.verkko-rrd-interfaces: script to setup symlinks for pvl.verkko.rrd from collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
40 |
|
cbf9371a472d
pvl.verkko-rrd-interfaces: script to setup symlinks for pvl.verkko.rrd from collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
41 |
# options |
cbf9371a472d
pvl.verkko-rrd-interfaces: script to setup symlinks for pvl.verkko.rrd from collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
42 |
parser.add_option('--collectd-rrd', metavar='PATH', default=COLLECTD_RRD, |
cbf9371a472d
pvl.verkko-rrd-interfaces: script to setup symlinks for pvl.verkko.rrd from collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
43 |
help="Path to collectd rrd: %default") |
188
6b3f30fcded7
pvl.verkko-rrd-interfaces: change <path>/<domain>-<plugin>.txt semantics for input file names
Tero Marttila <terom@paivola.fi>
parents:
187
diff
changeset
|
44 |
parser.add_option('--collectd-plugin', metavar='PLUGIN', default=None, |
6b3f30fcded7
pvl.verkko-rrd-interfaces: change <path>/<domain>-<plugin>.txt semantics for input file names
Tero Marttila <terom@paivola.fi>
parents:
187
diff
changeset
|
45 |
help="Collectd plugin to use: <input>-<plugin>.txt") |
187
cbf9371a472d
pvl.verkko-rrd-interfaces: script to setup symlinks for pvl.verkko.rrd from collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
46 |
parser.add_option('--collectd-type', metavar='TYPE', default=COLLECTD_TYPE, |
cbf9371a472d
pvl.verkko-rrd-interfaces: script to setup symlinks for pvl.verkko.rrd from collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
47 |
help="Collectd type to use: %default") |
cbf9371a472d
pvl.verkko-rrd-interfaces: script to setup symlinks for pvl.verkko.rrd from collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
48 |
|
195
5e22cca68c39
pvl.verkko-rrd-interfaces: implement support for --collectd-instance-plugin
Tero Marttila <terom@paivola.fi>
parents:
189
diff
changeset
|
49 |
# interface is by plugin, snmp is by type... |
5e22cca68c39
pvl.verkko-rrd-interfaces: implement support for --collectd-instance-plugin
Tero Marttila <terom@paivola.fi>
parents:
189
diff
changeset
|
50 |
parser.add_option('--collectd-instance-plugin', action='store_const', dest='collectd_instance', const='plugin', |
5e22cca68c39
pvl.verkko-rrd-interfaces: implement support for --collectd-instance-plugin
Tero Marttila <terom@paivola.fi>
parents:
189
diff
changeset
|
51 |
help="Collectd by plugin instance") |
5e22cca68c39
pvl.verkko-rrd-interfaces: implement support for --collectd-instance-plugin
Tero Marttila <terom@paivola.fi>
parents:
189
diff
changeset
|
52 |
parser.add_option('--collectd-instance-type', action='store_const', dest='collectd_instance', const='type', |
5e22cca68c39
pvl.verkko-rrd-interfaces: implement support for --collectd-instance-plugin
Tero Marttila <terom@paivola.fi>
parents:
189
diff
changeset
|
53 |
help="Collectd by type instance") |
5e22cca68c39
pvl.verkko-rrd-interfaces: implement support for --collectd-instance-plugin
Tero Marttila <terom@paivola.fi>
parents:
189
diff
changeset
|
54 |
|
187
cbf9371a472d
pvl.verkko-rrd-interfaces: script to setup symlinks for pvl.verkko.rrd from collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
55 |
# hostnames |
cbf9371a472d
pvl.verkko-rrd-interfaces: script to setup symlinks for pvl.verkko.rrd from collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
56 |
parser.add_option('--reverse-host', action='store_true', |
cbf9371a472d
pvl.verkko-rrd-interfaces: script to setup symlinks for pvl.verkko.rrd from collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
57 |
help="Flip host.domain -> domain.host (default)") |
cbf9371a472d
pvl.verkko-rrd-interfaces: script to setup symlinks for pvl.verkko.rrd from collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
58 |
parser.add_option('--no-reverse-host', action='store_false', dest='reverse_host', |
cbf9371a472d
pvl.verkko-rrd-interfaces: script to setup symlinks for pvl.verkko.rrd from collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
59 |
help="Keep host.domain as host.domain") |
cbf9371a472d
pvl.verkko-rrd-interfaces: script to setup symlinks for pvl.verkko.rrd from collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
60 |
parser.add_option('--domain', metavar='DOMAIN', |
cbf9371a472d
pvl.verkko-rrd-interfaces: script to setup symlinks for pvl.verkko.rrd from collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
61 |
help="Append domain to collectd hostnames: <input>.txt -> <input>") |
cbf9371a472d
pvl.verkko-rrd-interfaces: script to setup symlinks for pvl.verkko.rrd from collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
62 |
|
cbf9371a472d
pvl.verkko-rrd-interfaces: script to setup symlinks for pvl.verkko.rrd from collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
63 |
# output |
cbf9371a472d
pvl.verkko-rrd-interfaces: script to setup symlinks for pvl.verkko.rrd from collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
64 |
parser.add_option('--rrd', metavar='PATH', |
cbf9371a472d
pvl.verkko-rrd-interfaces: script to setup symlinks for pvl.verkko.rrd from collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
65 |
help="Output directory for .rrd symlinks: <input>.txt -> <input>/") |
cbf9371a472d
pvl.verkko-rrd-interfaces: script to setup symlinks for pvl.verkko.rrd from collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
66 |
parser.add_option('--noop', action='store_true', |
cbf9371a472d
pvl.verkko-rrd-interfaces: script to setup symlinks for pvl.verkko.rrd from collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
67 |
help="Scan symlinks, but do not update") |
cbf9371a472d
pvl.verkko-rrd-interfaces: script to setup symlinks for pvl.verkko.rrd from collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
68 |
|
cbf9371a472d
pvl.verkko-rrd-interfaces: script to setup symlinks for pvl.verkko.rrd from collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
69 |
parser.set_defaults( |
195
5e22cca68c39
pvl.verkko-rrd-interfaces: implement support for --collectd-instance-plugin
Tero Marttila <terom@paivola.fi>
parents:
189
diff
changeset
|
70 |
collectd_instance = 'type', |
5e22cca68c39
pvl.verkko-rrd-interfaces: implement support for --collectd-instance-plugin
Tero Marttila <terom@paivola.fi>
parents:
189
diff
changeset
|
71 |
reverse_host = True, |
187
cbf9371a472d
pvl.verkko-rrd-interfaces: script to setup symlinks for pvl.verkko.rrd from collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
72 |
) |
cbf9371a472d
pvl.verkko-rrd-interfaces: script to setup symlinks for pvl.verkko.rrd from collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
73 |
|
cbf9371a472d
pvl.verkko-rrd-interfaces: script to setup symlinks for pvl.verkko.rrd from collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
74 |
# parse |
cbf9371a472d
pvl.verkko-rrd-interfaces: script to setup symlinks for pvl.verkko.rrd from collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
75 |
options, args = parser.parse_args(args) |
cbf9371a472d
pvl.verkko-rrd-interfaces: script to setup symlinks for pvl.verkko.rrd from collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
76 |
|
cbf9371a472d
pvl.verkko-rrd-interfaces: script to setup symlinks for pvl.verkko.rrd from collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
77 |
# apply |
cbf9371a472d
pvl.verkko-rrd-interfaces: script to setup symlinks for pvl.verkko.rrd from collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
78 |
pvl.args.apply(options) |
cbf9371a472d
pvl.verkko-rrd-interfaces: script to setup symlinks for pvl.verkko.rrd from collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
79 |
|
cbf9371a472d
pvl.verkko-rrd-interfaces: script to setup symlinks for pvl.verkko.rrd from collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
80 |
return options, args |
cbf9371a472d
pvl.verkko-rrd-interfaces: script to setup symlinks for pvl.verkko.rrd from collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
81 |
|
425
4e828d47421a
pvl.rrd: support a separate @domain for interface target nodes, instead of using a single global domain for both the collectd host and the output rrd symlink
Tero Marttila <terom@paivola.fi>
parents:
235
diff
changeset
|
82 |
def sync_links (options, links, rrddir) : |
235
a34e7260568b
split pvl.rrd-interface into pvl.rrd.hosts
Tero Marttila <terom@paivola.fi>
parents:
228
diff
changeset
|
83 |
""" |
a34e7260568b
split pvl.rrd-interface into pvl.rrd.hosts
Tero Marttila <terom@paivola.fi>
parents:
228
diff
changeset
|
84 |
Sync given (collectd, name) symlinks in given dir. |
a34e7260568b
split pvl.rrd-interface into pvl.rrd.hosts
Tero Marttila <terom@paivola.fi>
parents:
228
diff
changeset
|
85 |
""" |
a34e7260568b
split pvl.rrd-interface into pvl.rrd.hosts
Tero Marttila <terom@paivola.fi>
parents:
228
diff
changeset
|
86 |
|
425
4e828d47421a
pvl.rrd: support a separate @domain for interface target nodes, instead of using a single global domain for both the collectd host and the output rrd symlink
Tero Marttila <terom@paivola.fi>
parents:
235
diff
changeset
|
87 |
log.info("%s", rrddir) |
235
a34e7260568b
split pvl.rrd-interface into pvl.rrd.hosts
Tero Marttila <terom@paivola.fi>
parents:
228
diff
changeset
|
88 |
|
425
4e828d47421a
pvl.rrd: support a separate @domain for interface target nodes, instead of using a single global domain for both the collectd host and the output rrd symlink
Tero Marttila <terom@paivola.fi>
parents:
235
diff
changeset
|
89 |
for rrdpath, (domain, host, port) in links : |
4e828d47421a
pvl.rrd: support a separate @domain for interface target nodes, instead of using a single global domain for both the collectd host and the output rrd symlink
Tero Marttila <terom@paivola.fi>
parents:
235
diff
changeset
|
90 |
linkpath = os.path.join(rrddir, |
4e828d47421a
pvl.rrd: support a separate @domain for interface target nodes, instead of using a single global domain for both the collectd host and the output rrd symlink
Tero Marttila <terom@paivola.fi>
parents:
235
diff
changeset
|
91 |
hostreverse(domain) if options.reverse_host else domain, |
4e828d47421a
pvl.rrd: support a separate @domain for interface target nodes, instead of using a single global domain for both the collectd host and the output rrd symlink
Tero Marttila <terom@paivola.fi>
parents:
235
diff
changeset
|
92 |
hostreverse(host) if options.reverse_host else host, |
4e828d47421a
pvl.rrd: support a separate @domain for interface target nodes, instead of using a single global domain for both the collectd host and the output rrd symlink
Tero Marttila <terom@paivola.fi>
parents:
235
diff
changeset
|
93 |
port + '.rrd' |
4e828d47421a
pvl.rrd: support a separate @domain for interface target nodes, instead of using a single global domain for both the collectd host and the output rrd symlink
Tero Marttila <terom@paivola.fi>
parents:
235
diff
changeset
|
94 |
) |
235
a34e7260568b
split pvl.rrd-interface into pvl.rrd.hosts
Tero Marttila <terom@paivola.fi>
parents:
228
diff
changeset
|
95 |
|
a34e7260568b
split pvl.rrd-interface into pvl.rrd.hosts
Tero Marttila <terom@paivola.fi>
parents:
228
diff
changeset
|
96 |
# sync |
426
b2078645456a
pvl.rrd-interfaces: fix readlink() on existing symlinks
Tero Marttila <terom@paivola.fi>
parents:
425
diff
changeset
|
97 |
if os.path.exists(linkpath) and os.readlink(linkpath) == rrdpath : |
235
a34e7260568b
split pvl.rrd-interface into pvl.rrd.hosts
Tero Marttila <terom@paivola.fi>
parents:
228
diff
changeset
|
98 |
continue |
a34e7260568b
split pvl.rrd-interface into pvl.rrd.hosts
Tero Marttila <terom@paivola.fi>
parents:
228
diff
changeset
|
99 |
|
425
4e828d47421a
pvl.rrd: support a separate @domain for interface target nodes, instead of using a single global domain for both the collectd host and the output rrd symlink
Tero Marttila <terom@paivola.fi>
parents:
235
diff
changeset
|
100 |
log.info("%s: %s", linkpath, rrdpath) |
235
a34e7260568b
split pvl.rrd-interface into pvl.rrd.hosts
Tero Marttila <terom@paivola.fi>
parents:
228
diff
changeset
|
101 |
|
425
4e828d47421a
pvl.rrd: support a separate @domain for interface target nodes, instead of using a single global domain for both the collectd host and the output rrd symlink
Tero Marttila <terom@paivola.fi>
parents:
235
diff
changeset
|
102 |
yield linkpath, rrdpath |
235
a34e7260568b
split pvl.rrd-interface into pvl.rrd.hosts
Tero Marttila <terom@paivola.fi>
parents:
228
diff
changeset
|
103 |
|
a34e7260568b
split pvl.rrd-interface into pvl.rrd.hosts
Tero Marttila <terom@paivola.fi>
parents:
228
diff
changeset
|
104 |
def apply_links (options, links) : |
a34e7260568b
split pvl.rrd-interface into pvl.rrd.hosts
Tero Marttila <terom@paivola.fi>
parents:
228
diff
changeset
|
105 |
""" |
a34e7260568b
split pvl.rrd-interface into pvl.rrd.hosts
Tero Marttila <terom@paivola.fi>
parents:
228
diff
changeset
|
106 |
Apply given symlinks |
a34e7260568b
split pvl.rrd-interface into pvl.rrd.hosts
Tero Marttila <terom@paivola.fi>
parents:
228
diff
changeset
|
107 |
""" |
a34e7260568b
split pvl.rrd-interface into pvl.rrd.hosts
Tero Marttila <terom@paivola.fi>
parents:
228
diff
changeset
|
108 |
|
a34e7260568b
split pvl.rrd-interface into pvl.rrd.hosts
Tero Marttila <terom@paivola.fi>
parents:
228
diff
changeset
|
109 |
for link, path in links : |
a34e7260568b
split pvl.rrd-interface into pvl.rrd.hosts
Tero Marttila <terom@paivola.fi>
parents:
228
diff
changeset
|
110 |
linkdir = os.path.dirname(link) |
a34e7260568b
split pvl.rrd-interface into pvl.rrd.hosts
Tero Marttila <terom@paivola.fi>
parents:
228
diff
changeset
|
111 |
|
a34e7260568b
split pvl.rrd-interface into pvl.rrd.hosts
Tero Marttila <terom@paivola.fi>
parents:
228
diff
changeset
|
112 |
# do |
a34e7260568b
split pvl.rrd-interface into pvl.rrd.hosts
Tero Marttila <terom@paivola.fi>
parents:
228
diff
changeset
|
113 |
if not os.path.exists(linkdir) : |
425
4e828d47421a
pvl.rrd: support a separate @domain for interface target nodes, instead of using a single global domain for both the collectd host and the output rrd symlink
Tero Marttila <terom@paivola.fi>
parents:
235
diff
changeset
|
114 |
log.warn("makedirs: %s", linkdir) |
4e828d47421a
pvl.rrd: support a separate @domain for interface target nodes, instead of using a single global domain for both the collectd host and the output rrd symlink
Tero Marttila <terom@paivola.fi>
parents:
235
diff
changeset
|
115 |
os.makedirs(linkdir) |
235
a34e7260568b
split pvl.rrd-interface into pvl.rrd.hosts
Tero Marttila <terom@paivola.fi>
parents:
228
diff
changeset
|
116 |
|
a34e7260568b
split pvl.rrd-interface into pvl.rrd.hosts
Tero Marttila <terom@paivola.fi>
parents:
228
diff
changeset
|
117 |
os.symlink(path, link) |
a34e7260568b
split pvl.rrd-interface into pvl.rrd.hosts
Tero Marttila <terom@paivola.fi>
parents:
228
diff
changeset
|
118 |
|
187
cbf9371a472d
pvl.verkko-rrd-interfaces: script to setup symlinks for pvl.verkko.rrd from collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
119 |
def main (argv) : |
cbf9371a472d
pvl.verkko-rrd-interfaces: script to setup symlinks for pvl.verkko.rrd from collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
120 |
options, args = parse_argv(argv) |
cbf9371a472d
pvl.verkko-rrd-interfaces: script to setup symlinks for pvl.verkko.rrd from collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
121 |
|
430
e928258a1229
pvl.rrd-interfaces: ignore .txt in given paths, and drop default --rrd logic
Tero Marttila <terom@paivola.fi>
parents:
426
diff
changeset
|
122 |
for path in args : |
188
6b3f30fcded7
pvl.verkko-rrd-interfaces: change <path>/<domain>-<plugin>.txt semantics for input file names
Tero Marttila <terom@paivola.fi>
parents:
187
diff
changeset
|
123 |
# <path>/<domain>-<plugin>.txt -> <path>/<domain>-<plugin> |
430
e928258a1229
pvl.rrd-interfaces: ignore .txt in given paths, and drop default --rrd logic
Tero Marttila <terom@paivola.fi>
parents:
426
diff
changeset
|
124 |
if '.txt' in path: |
e928258a1229
pvl.rrd-interfaces: ignore .txt in given paths, and drop default --rrd logic
Tero Marttila <terom@paivola.fi>
parents:
426
diff
changeset
|
125 |
basepath, _ = os.path.splitext(path) |
e928258a1229
pvl.rrd-interfaces: ignore .txt in given paths, and drop default --rrd logic
Tero Marttila <terom@paivola.fi>
parents:
426
diff
changeset
|
126 |
else: |
e928258a1229
pvl.rrd-interfaces: ignore .txt in given paths, and drop default --rrd logic
Tero Marttila <terom@paivola.fi>
parents:
426
diff
changeset
|
127 |
basepath = path |
e928258a1229
pvl.rrd-interfaces: ignore .txt in given paths, and drop default --rrd logic
Tero Marttila <terom@paivola.fi>
parents:
426
diff
changeset
|
128 |
|
e928258a1229
pvl.rrd-interfaces: ignore .txt in given paths, and drop default --rrd logic
Tero Marttila <terom@paivola.fi>
parents:
426
diff
changeset
|
129 |
# <path>/<domain> -> <domain> |
e928258a1229
pvl.rrd-interfaces: ignore .txt in given paths, and drop default --rrd logic
Tero Marttila <terom@paivola.fi>
parents:
426
diff
changeset
|
130 |
_, basename = os.path.split(basepath) |
188
6b3f30fcded7
pvl.verkko-rrd-interfaces: change <path>/<domain>-<plugin>.txt semantics for input file names
Tero Marttila <terom@paivola.fi>
parents:
187
diff
changeset
|
131 |
|
6b3f30fcded7
pvl.verkko-rrd-interfaces: change <path>/<domain>-<plugin>.txt semantics for input file names
Tero Marttila <terom@paivola.fi>
parents:
187
diff
changeset
|
132 |
# <path>/<domain>-<plugin> -> <path>/<domain>, <plugin> |
430
e928258a1229
pvl.rrd-interfaces: ignore .txt in given paths, and drop default --rrd logic
Tero Marttila <terom@paivola.fi>
parents:
426
diff
changeset
|
133 |
if '-' in basename : |
e928258a1229
pvl.rrd-interfaces: ignore .txt in given paths, and drop default --rrd logic
Tero Marttila <terom@paivola.fi>
parents:
426
diff
changeset
|
134 |
basename, collectd_plugin = basename.rsplit('-', 1) |
188
6b3f30fcded7
pvl.verkko-rrd-interfaces: change <path>/<domain>-<plugin>.txt semantics for input file names
Tero Marttila <terom@paivola.fi>
parents:
187
diff
changeset
|
135 |
else : |
6b3f30fcded7
pvl.verkko-rrd-interfaces: change <path>/<domain>-<plugin>.txt semantics for input file names
Tero Marttila <terom@paivola.fi>
parents:
187
diff
changeset
|
136 |
collectd_plugin = None |
189
1ef2f7bf5a03
pvl.verkko-rrd-interfaces: change --rrd/domain handling
Tero Marttila <terom@paivola.fi>
parents:
188
diff
changeset
|
137 |
|
1ef2f7bf5a03
pvl.verkko-rrd-interfaces: change --rrd/domain handling
Tero Marttila <terom@paivola.fi>
parents:
188
diff
changeset
|
138 |
# domain? |
187
cbf9371a472d
pvl.verkko-rrd-interfaces: script to setup symlinks for pvl.verkko.rrd from collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
139 |
if options.domain is None : |
188
6b3f30fcded7
pvl.verkko-rrd-interfaces: change <path>/<domain>-<plugin>.txt semantics for input file names
Tero Marttila <terom@paivola.fi>
parents:
187
diff
changeset
|
140 |
# reverse-order hostname |
6b3f30fcded7
pvl.verkko-rrd-interfaces: change <path>/<domain>-<plugin>.txt semantics for input file names
Tero Marttila <terom@paivola.fi>
parents:
187
diff
changeset
|
141 |
domain = hostreverse(basename) |
187
cbf9371a472d
pvl.verkko-rrd-interfaces: script to setup symlinks for pvl.verkko.rrd from collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
142 |
else : |
cbf9371a472d
pvl.verkko-rrd-interfaces: script to setup symlinks for pvl.verkko.rrd from collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
143 |
# may be '' |
cbf9371a472d
pvl.verkko-rrd-interfaces: script to setup symlinks for pvl.verkko.rrd from collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
144 |
domain = options.domain |
cbf9371a472d
pvl.verkko-rrd-interfaces: script to setup symlinks for pvl.verkko.rrd from collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
145 |
|
189
1ef2f7bf5a03
pvl.verkko-rrd-interfaces: change --rrd/domain handling
Tero Marttila <terom@paivola.fi>
parents:
188
diff
changeset
|
146 |
# output dir? |
430
e928258a1229
pvl.rrd-interfaces: ignore .txt in given paths, and drop default --rrd logic
Tero Marttila <terom@paivola.fi>
parents:
426
diff
changeset
|
147 |
if not options.rrd: |
e928258a1229
pvl.rrd-interfaces: ignore .txt in given paths, and drop default --rrd logic
Tero Marttila <terom@paivola.fi>
parents:
426
diff
changeset
|
148 |
log.error("no --rrd output dir given") |
e928258a1229
pvl.rrd-interfaces: ignore .txt in given paths, and drop default --rrd logic
Tero Marttila <terom@paivola.fi>
parents:
426
diff
changeset
|
149 |
return 1 |
e928258a1229
pvl.rrd-interfaces: ignore .txt in given paths, and drop default --rrd logic
Tero Marttila <terom@paivola.fi>
parents:
426
diff
changeset
|
150 |
|
e928258a1229
pvl.rrd-interfaces: ignore .txt in given paths, and drop default --rrd logic
Tero Marttila <terom@paivola.fi>
parents:
426
diff
changeset
|
151 |
rrddir = options.rrd |
189
1ef2f7bf5a03
pvl.verkko-rrd-interfaces: change --rrd/domain handling
Tero Marttila <terom@paivola.fi>
parents:
188
diff
changeset
|
152 |
|
187
cbf9371a472d
pvl.verkko-rrd-interfaces: script to setup symlinks for pvl.verkko.rrd from collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
153 |
# generate links from spec |
430
e928258a1229
pvl.rrd-interfaces: ignore .txt in given paths, and drop default --rrd logic
Tero Marttila <terom@paivola.fi>
parents:
426
diff
changeset
|
154 |
links = list(pvl.rrd.hosts.collectd_interfaces(options, open(path), |
187
cbf9371a472d
pvl.verkko-rrd-interfaces: script to setup symlinks for pvl.verkko.rrd from collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
155 |
collectd_domain = domain, |
188
6b3f30fcded7
pvl.verkko-rrd-interfaces: change <path>/<domain>-<plugin>.txt semantics for input file names
Tero Marttila <terom@paivola.fi>
parents:
187
diff
changeset
|
156 |
collectd_plugin = options.collectd_plugin or collectd_plugin or COLLECTD_PLUGIN, |
187
cbf9371a472d
pvl.verkko-rrd-interfaces: script to setup symlinks for pvl.verkko.rrd from collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
157 |
)) |
189
1ef2f7bf5a03
pvl.verkko-rrd-interfaces: change --rrd/domain handling
Tero Marttila <terom@paivola.fi>
parents:
188
diff
changeset
|
158 |
|
425
4e828d47421a
pvl.rrd: support a separate @domain for interface target nodes, instead of using a single global domain for both the collectd host and the output rrd symlink
Tero Marttila <terom@paivola.fi>
parents:
235
diff
changeset
|
159 |
if not os.path.exists(rrddir) : |
4e828d47421a
pvl.rrd: support a separate @domain for interface target nodes, instead of using a single global domain for both the collectd host and the output rrd symlink
Tero Marttila <terom@paivola.fi>
parents:
235
diff
changeset
|
160 |
log.error("given --rrd must already exist: %s", rrddir) |
4e828d47421a
pvl.rrd: support a separate @domain for interface target nodes, instead of using a single global domain for both the collectd host and the output rrd symlink
Tero Marttila <terom@paivola.fi>
parents:
235
diff
changeset
|
161 |
return 1 |
189
1ef2f7bf5a03
pvl.verkko-rrd-interfaces: change --rrd/domain handling
Tero Marttila <terom@paivola.fi>
parents:
188
diff
changeset
|
162 |
|
187
cbf9371a472d
pvl.verkko-rrd-interfaces: script to setup symlinks for pvl.verkko.rrd from collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
163 |
# sync missing links |
cbf9371a472d
pvl.verkko-rrd-interfaces: script to setup symlinks for pvl.verkko.rrd from collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
164 |
links = list(sync_links(options, links, |
425
4e828d47421a
pvl.rrd: support a separate @domain for interface target nodes, instead of using a single global domain for both the collectd host and the output rrd symlink
Tero Marttila <terom@paivola.fi>
parents:
235
diff
changeset
|
165 |
rrddir = rrddir, |
187
cbf9371a472d
pvl.verkko-rrd-interfaces: script to setup symlinks for pvl.verkko.rrd from collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
166 |
)) |
cbf9371a472d
pvl.verkko-rrd-interfaces: script to setup symlinks for pvl.verkko.rrd from collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
167 |
|
cbf9371a472d
pvl.verkko-rrd-interfaces: script to setup symlinks for pvl.verkko.rrd from collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
168 |
# verbose |
cbf9371a472d
pvl.verkko-rrd-interfaces: script to setup symlinks for pvl.verkko.rrd from collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
169 |
if not options.quiet : |
cbf9371a472d
pvl.verkko-rrd-interfaces: script to setup symlinks for pvl.verkko.rrd from collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
170 |
for link, path in links : |
cbf9371a472d
pvl.verkko-rrd-interfaces: script to setup symlinks for pvl.verkko.rrd from collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
171 |
print link, '->', path |
cbf9371a472d
pvl.verkko-rrd-interfaces: script to setup symlinks for pvl.verkko.rrd from collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
172 |
|
cbf9371a472d
pvl.verkko-rrd-interfaces: script to setup symlinks for pvl.verkko.rrd from collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
173 |
# apply |
cbf9371a472d
pvl.verkko-rrd-interfaces: script to setup symlinks for pvl.verkko.rrd from collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
174 |
if not options.noop : |
cbf9371a472d
pvl.verkko-rrd-interfaces: script to setup symlinks for pvl.verkko.rrd from collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
175 |
apply_links(options, links) |
cbf9371a472d
pvl.verkko-rrd-interfaces: script to setup symlinks for pvl.verkko.rrd from collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
176 |
|
cbf9371a472d
pvl.verkko-rrd-interfaces: script to setup symlinks for pvl.verkko.rrd from collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
177 |
return 0 |
cbf9371a472d
pvl.verkko-rrd-interfaces: script to setup symlinks for pvl.verkko.rrd from collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
178 |
|
cbf9371a472d
pvl.verkko-rrd-interfaces: script to setup symlinks for pvl.verkko.rrd from collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
179 |
if __name__ == '__main__': |
cbf9371a472d
pvl.verkko-rrd-interfaces: script to setup symlinks for pvl.verkko.rrd from collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
180 |
import sys |
cbf9371a472d
pvl.verkko-rrd-interfaces: script to setup symlinks for pvl.verkko.rrd from collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
181 |
|
cbf9371a472d
pvl.verkko-rrd-interfaces: script to setup symlinks for pvl.verkko.rrd from collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
182 |
sys.exit(main(sys.argv)) |