bin/pvl.rrd-interfaces
author Tero Marttila <terom@paivola.fi>
Sun, 07 Sep 2014 14:22:47 +0300
changeset 425 4e828d47421a
parent 235 a34e7260568b
child 426 b2078645456a
permissions -rwxr-xr-x
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
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
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
    97
        if os.path.exists(linkpath) and os.path.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
    
cbf9371a472d pvl.verkko-rrd-interfaces: script to setup symlinks for pvl.verkko.rrd from collectd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   122
    for txt 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>
6b3f30fcded7 pvl.verkko-rrd-interfaces: change <path>/<domain>-<plugin>.txt semantics for input file names
Tero Marttila <terom@paivola.fi>
parents: 187
diff changeset
   124
        basepath, _ = os.path.splitext(txt)
6b3f30fcded7 pvl.verkko-rrd-interfaces: change <path>/<domain>-<plugin>.txt semantics for input file names
Tero Marttila <terom@paivola.fi>
parents: 187
diff changeset
   125
        
6b3f30fcded7 pvl.verkko-rrd-interfaces: change <path>/<domain>-<plugin>.txt semantics for input file names
Tero Marttila <terom@paivola.fi>
parents: 187
diff changeset
   126
        # <path>/<domain>-<plugin> -> <path>/<domain>, <plugin>
6b3f30fcded7 pvl.verkko-rrd-interfaces: change <path>/<domain>-<plugin>.txt semantics for input file names
Tero Marttila <terom@paivola.fi>
parents: 187
diff changeset
   127
        if '-' in basepath :
6b3f30fcded7 pvl.verkko-rrd-interfaces: change <path>/<domain>-<plugin>.txt semantics for input file names
Tero Marttila <terom@paivola.fi>
parents: 187
diff changeset
   128
            basepath, collectd_plugin = basepath.rsplit('-', 1)
6b3f30fcded7 pvl.verkko-rrd-interfaces: change <path>/<domain>-<plugin>.txt semantics for input file names
Tero Marttila <terom@paivola.fi>
parents: 187
diff changeset
   129
        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
   130
            collectd_plugin = 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
   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> -> <domain>
6b3f30fcded7 pvl.verkko-rrd-interfaces: change <path>/<domain>-<plugin>.txt semantics for input file names
Tero Marttila <terom@paivola.fi>
parents: 187
diff changeset
   133
        _, basename = os.path.split(basepath)
189
1ef2f7bf5a03 pvl.verkko-rrd-interfaces: change --rrd/domain handling
Tero Marttila <terom@paivola.fi>
parents: 188
diff changeset
   134
        
1ef2f7bf5a03 pvl.verkko-rrd-interfaces: change --rrd/domain handling
Tero Marttila <terom@paivola.fi>
parents: 188
diff changeset
   135
        # 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
   136
        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
   137
            # 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
   138
            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
   139
        else :
cbf9371a472d pvl.verkko-rrd-interfaces: script to setup symlinks for pvl.verkko.rrd from collectd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   140
            # 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
   141
            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
   142
        
189
1ef2f7bf5a03 pvl.verkko-rrd-interfaces: change --rrd/domain handling
Tero Marttila <terom@paivola.fi>
parents: 188
diff changeset
   143
        # output dir?
1ef2f7bf5a03 pvl.verkko-rrd-interfaces: change --rrd/domain handling
Tero Marttila <terom@paivola.fi>
parents: 188
diff changeset
   144
        if options.rrd :
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
   145
            rrddir = options.rrd
189
1ef2f7bf5a03 pvl.verkko-rrd-interfaces: change --rrd/domain handling
Tero Marttila <terom@paivola.fi>
parents: 188
diff changeset
   146
        else :
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
   147
            rrddir = basepath
189
1ef2f7bf5a03 pvl.verkko-rrd-interfaces: change --rrd/domain handling
Tero Marttila <terom@paivola.fi>
parents: 188
diff changeset
   148
187
cbf9371a472d pvl.verkko-rrd-interfaces: script to setup symlinks for pvl.verkko.rrd from collectd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   149
        # generate links from spec
235
a34e7260568b split pvl.rrd-interface into pvl.rrd.hosts
Tero Marttila <terom@paivola.fi>
parents: 228
diff changeset
   150
        links = list(pvl.rrd.hosts.collectd_interfaces(options, open(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
   151
            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
   152
            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
   153
        ))
189
1ef2f7bf5a03 pvl.verkko-rrd-interfaces: change --rrd/domain handling
Tero Marttila <terom@paivola.fi>
parents: 188
diff changeset
   154
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
   155
        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
   156
            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
   157
            return 1
189
1ef2f7bf5a03 pvl.verkko-rrd-interfaces: change --rrd/domain handling
Tero Marttila <terom@paivola.fi>
parents: 188
diff changeset
   158
187
cbf9371a472d pvl.verkko-rrd-interfaces: script to setup symlinks for pvl.verkko.rrd from collectd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   159
        # 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
   160
        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
   161
            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
   162
        ))
cbf9371a472d pvl.verkko-rrd-interfaces: script to setup symlinks for pvl.verkko.rrd from collectd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   163
        
cbf9371a472d pvl.verkko-rrd-interfaces: script to setup symlinks for pvl.verkko.rrd from collectd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   164
        # verbose
cbf9371a472d pvl.verkko-rrd-interfaces: script to setup symlinks for pvl.verkko.rrd from collectd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   165
        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
   166
            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
   167
                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
   168
        
cbf9371a472d pvl.verkko-rrd-interfaces: script to setup symlinks for pvl.verkko.rrd from collectd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   169
        # apply
cbf9371a472d pvl.verkko-rrd-interfaces: script to setup symlinks for pvl.verkko.rrd from collectd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   170
        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
   171
            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
   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
    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
   174
    
cbf9371a472d pvl.verkko-rrd-interfaces: script to setup symlinks for pvl.verkko.rrd from collectd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   175
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
   176
    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
   177
cbf9371a472d pvl.verkko-rrd-interfaces: script to setup symlinks for pvl.verkko.rrd from collectd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   178
    sys.exit(main(sys.argv))