bin/pvl.hosts-graph
author Tero Marttila <terom@paivola.fi>
Tue, 18 Mar 2014 23:53:16 +0200
changeset 400 41dd2a867e0a
parent 399 aadf76a05ec1
child 402 3b6fb4ae56fb
permissions -rwxr-xr-x
pvl.hosts-graph: parse new attribute-values format
399
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     1
#!/usr/bin/env python
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     2
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     3
"""
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     4
    Requirements:
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     5
        pydot
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     6
"""
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     7
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     8
import pvl.args
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     9
import pvl.hosts
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    10
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    11
import collections
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    12
import logging; log = logging.getLogger('pvl.hosts-graph')
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    13
import optparse
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    14
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    15
COLOR_VLANS = {
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    16
    1:      'grey',         # pvl-lan
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    17
    2:      'blue',         # pvl-lan2
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    18
    3:      'red',          # pvl-san
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    19
    4:      'green',        # pvl-veturi
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    20
    7:      'orange',       # pvl-ranssi
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    21
    8:      'yellow',       # pvl-mgmt
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    22
    10:     'brown',        # pvl-public
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    23
    100:    'navyblue',     # pvl-test
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    24
    103:    'red4',         # pvl-test-san
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    25
    104:    'red2',         # pvl-ganeti
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    26
    192:    'purple',       # paivola-services
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    27
    255:    'magenta',      # pvl-sonera
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    28
}
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    29
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    30
class ParseError (Exception) :
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    31
    def __init__ (self, file, line, msg) :
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    32
        self.file = file
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    33
        self.line = line
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    34
        self.msg = msg
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    35
  
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    36
    def __str__ (self) :
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    37
        return "{self.file}:{self.line}: {self.msg}".format(self=self)
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    38
400
41dd2a867e0a pvl.hosts-graph: parse new attribute-values format
Tero Marttila <terom@paivola.fi>
parents: 399
diff changeset
    39
def _parse_snmp_part (part) :
41dd2a867e0a pvl.hosts-graph: parse new attribute-values format
Tero Marttila <terom@paivola.fi>
parents: 399
diff changeset
    40
    if part.isdigit() :
41dd2a867e0a pvl.hosts-graph: parse new attribute-values format
Tero Marttila <terom@paivola.fi>
parents: 399
diff changeset
    41
        return int(part)
41dd2a867e0a pvl.hosts-graph: parse new attribute-values format
Tero Marttila <terom@paivola.fi>
parents: 399
diff changeset
    42
    else :
41dd2a867e0a pvl.hosts-graph: parse new attribute-values format
Tero Marttila <terom@paivola.fi>
parents: 399
diff changeset
    43
        return part
41dd2a867e0a pvl.hosts-graph: parse new attribute-values format
Tero Marttila <terom@paivola.fi>
parents: 399
diff changeset
    44
41dd2a867e0a pvl.hosts-graph: parse new attribute-values format
Tero Marttila <terom@paivola.fi>
parents: 399
diff changeset
    45
def _parse_snmp_line (line) :
41dd2a867e0a pvl.hosts-graph: parse new attribute-values format
Tero Marttila <terom@paivola.fi>
parents: 399
diff changeset
    46
    for part in line.split() :
41dd2a867e0a pvl.hosts-graph: parse new attribute-values format
Tero Marttila <terom@paivola.fi>
parents: 399
diff changeset
    47
        yield _parse_snmp_part(part)
41dd2a867e0a pvl.hosts-graph: parse new attribute-values format
Tero Marttila <terom@paivola.fi>
parents: 399
diff changeset
    48
399
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    49
def _load_snmp_data (options, file) :
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    50
    """
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    51
        Load a data dict generated by pvl.hosts-snmp from a file.
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    52
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    53
        Yields (host, attr, value)
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    54
    """
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    55
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    56
    host = None
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    57
    attr = None
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    58
    value = None
400
41dd2a867e0a pvl.hosts-graph: parse new attribute-values format
Tero Marttila <terom@paivola.fi>
parents: 399
diff changeset
    59
    values = None
399
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    60
    
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    61
    for idx, line in enumerate(file, 1) :
400
41dd2a867e0a pvl.hosts-graph: parse new attribute-values format
Tero Marttila <terom@paivola.fi>
parents: 399
diff changeset
    62
        indent = 0
41dd2a867e0a pvl.hosts-graph: parse new attribute-values format
Tero Marttila <terom@paivola.fi>
parents: 399
diff changeset
    63
41dd2a867e0a pvl.hosts-graph: parse new attribute-values format
Tero Marttila <terom@paivola.fi>
parents: 399
diff changeset
    64
        while line.startswith('\t') :
41dd2a867e0a pvl.hosts-graph: parse new attribute-values format
Tero Marttila <terom@paivola.fi>
parents: 399
diff changeset
    65
            indent += 1
41dd2a867e0a pvl.hosts-graph: parse new attribute-values format
Tero Marttila <terom@paivola.fi>
parents: 399
diff changeset
    66
            line = line[1:]
41dd2a867e0a pvl.hosts-graph: parse new attribute-values format
Tero Marttila <terom@paivola.fi>
parents: 399
diff changeset
    67
399
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    68
        line = line.strip()
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    69
400
41dd2a867e0a pvl.hosts-graph: parse new attribute-values format
Tero Marttila <terom@paivola.fi>
parents: 399
diff changeset
    70
        if '\t' in line :
41dd2a867e0a pvl.hosts-graph: parse new attribute-values format
Tero Marttila <terom@paivola.fi>
parents: 399
diff changeset
    71
            args = line.split('\t', 1)
41dd2a867e0a pvl.hosts-graph: parse new attribute-values format
Tero Marttila <terom@paivola.fi>
parents: 399
diff changeset
    72
41dd2a867e0a pvl.hosts-graph: parse new attribute-values format
Tero Marttila <terom@paivola.fi>
parents: 399
diff changeset
    73
            line = args.pop(0)
41dd2a867e0a pvl.hosts-graph: parse new attribute-values format
Tero Marttila <terom@paivola.fi>
parents: 399
diff changeset
    74
            args = tuple(args)
41dd2a867e0a pvl.hosts-graph: parse new attribute-values format
Tero Marttila <terom@paivola.fi>
parents: 399
diff changeset
    75
        else :
41dd2a867e0a pvl.hosts-graph: parse new attribute-values format
Tero Marttila <terom@paivola.fi>
parents: 399
diff changeset
    76
            args = None
41dd2a867e0a pvl.hosts-graph: parse new attribute-values format
Tero Marttila <terom@paivola.fi>
parents: 399
diff changeset
    77
399
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    78
        if indent == 0 :
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    79
            host = line
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    80
            attr = None
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    81
            value = None
400
41dd2a867e0a pvl.hosts-graph: parse new attribute-values format
Tero Marttila <terom@paivola.fi>
parents: 399
diff changeset
    82
            values = None
399
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    83
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    84
        elif indent == 1 :
400
41dd2a867e0a pvl.hosts-graph: parse new attribute-values format
Tero Marttila <terom@paivola.fi>
parents: 399
diff changeset
    85
            if attr and not value and not values :
41dd2a867e0a pvl.hosts-graph: parse new attribute-values format
Tero Marttila <terom@paivola.fi>
parents: 399
diff changeset
    86
                raise ParseError(file, line, "[%s] %s: no value" % (host, attr))
399
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    87
400
41dd2a867e0a pvl.hosts-graph: parse new attribute-values format
Tero Marttila <terom@paivola.fi>
parents: 399
diff changeset
    88
            attr = tuple(_parse_snmp_line(line))
41dd2a867e0a pvl.hosts-graph: parse new attribute-values format
Tero Marttila <terom@paivola.fi>
parents: 399
diff changeset
    89
41dd2a867e0a pvl.hosts-graph: parse new attribute-values format
Tero Marttila <terom@paivola.fi>
parents: 399
diff changeset
    90
            if args :
41dd2a867e0a pvl.hosts-graph: parse new attribute-values format
Tero Marttila <terom@paivola.fi>
parents: 399
diff changeset
    91
                value = tuple(tuple(_parse_snmp_line(arg)) for arg in args)
41dd2a867e0a pvl.hosts-graph: parse new attribute-values format
Tero Marttila <terom@paivola.fi>
parents: 399
diff changeset
    92
            else :
41dd2a867e0a pvl.hosts-graph: parse new attribute-values format
Tero Marttila <terom@paivola.fi>
parents: 399
diff changeset
    93
                value = None
41dd2a867e0a pvl.hosts-graph: parse new attribute-values format
Tero Marttila <terom@paivola.fi>
parents: 399
diff changeset
    94
            
41dd2a867e0a pvl.hosts-graph: parse new attribute-values format
Tero Marttila <terom@paivola.fi>
parents: 399
diff changeset
    95
            values = None
41dd2a867e0a pvl.hosts-graph: parse new attribute-values format
Tero Marttila <terom@paivola.fi>
parents: 399
diff changeset
    96
41dd2a867e0a pvl.hosts-graph: parse new attribute-values format
Tero Marttila <terom@paivola.fi>
parents: 399
diff changeset
    97
            if value :
41dd2a867e0a pvl.hosts-graph: parse new attribute-values format
Tero Marttila <terom@paivola.fi>
parents: 399
diff changeset
    98
                yield host, attr, value
399
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    99
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   100
        elif indent == 2 :
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   101
            if not attr :
400
41dd2a867e0a pvl.hosts-graph: parse new attribute-values format
Tero Marttila <terom@paivola.fi>
parents: 399
diff changeset
   102
                raise ParseError(file, line, "[%s] %s: value outside of attr" % (host, attr))
41dd2a867e0a pvl.hosts-graph: parse new attribute-values format
Tero Marttila <terom@paivola.fi>
parents: 399
diff changeset
   103
            
41dd2a867e0a pvl.hosts-graph: parse new attribute-values format
Tero Marttila <terom@paivola.fi>
parents: 399
diff changeset
   104
            if value :
41dd2a867e0a pvl.hosts-graph: parse new attribute-values format
Tero Marttila <terom@paivola.fi>
parents: 399
diff changeset
   105
                raise ParseError(file, line, "[%s] %s: values with value" % (host, attr))
399
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   106
400
41dd2a867e0a pvl.hosts-graph: parse new attribute-values format
Tero Marttila <terom@paivola.fi>
parents: 399
diff changeset
   107
            values = _parse_snmp_part(line)
399
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   108
400
41dd2a867e0a pvl.hosts-graph: parse new attribute-values format
Tero Marttila <terom@paivola.fi>
parents: 399
diff changeset
   109
            yield host, attr, set((values, ))
399
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   110
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   111
def load_snmp_data (options, file, hosts) :
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   112
    """
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   113
        Load snmp data as dict, from given file path, or stdin.
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   114
    """
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   115
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   116
    if file :
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   117
        file = open(file)
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   118
    else :
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   119
        file = sys.stdin
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   120
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   121
    root = { }
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   122
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   123
    for host_name, attr, value in _load_snmp_data(options, file) :
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   124
        host = hosts[host_name]
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   125
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   126
        log.info("[%s] %s%s", host, ' '.join(str(a) for a in attr), (': ' + str(value)) if value else '')
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   127
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   128
        item = root.setdefault(host, { })
400
41dd2a867e0a pvl.hosts-graph: parse new attribute-values format
Tero Marttila <terom@paivola.fi>
parents: 399
diff changeset
   129
        
399
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   130
        for a in attr[:-1] :
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   131
            item = item.setdefault(a, {})
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   132
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   133
        a = attr[-1]
400
41dd2a867e0a pvl.hosts-graph: parse new attribute-values format
Tero Marttila <terom@paivola.fi>
parents: 399
diff changeset
   134
        
41dd2a867e0a pvl.hosts-graph: parse new attribute-values format
Tero Marttila <terom@paivola.fi>
parents: 399
diff changeset
   135
        if isinstance(value, set) :
41dd2a867e0a pvl.hosts-graph: parse new attribute-values format
Tero Marttila <terom@paivola.fi>
parents: 399
diff changeset
   136
            item.setdefault(a, set()).update(value)
399
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   137
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   138
        else :
400
41dd2a867e0a pvl.hosts-graph: parse new attribute-values format
Tero Marttila <terom@paivola.fi>
parents: 399
diff changeset
   139
            item[a] = dict(value)
41dd2a867e0a pvl.hosts-graph: parse new attribute-values format
Tero Marttila <terom@paivola.fi>
parents: 399
diff changeset
   140
            
399
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   141
    return root
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   142
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   143
def apply_graph (options, items, vlans={}) :
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   144
    import pydot
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   145
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   146
    dot = pydot.Dot(graph_name='lldp_hosts', graph_type='digraph',
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   147
            # XXX: breaks multi-edges?
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   148
            #splines     = 'true',
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   149
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   150
            sep             = '+25,25',
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   151
            overlap         = 'scalexy',
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   152
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   153
            # only applies to loops
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   154
            nodesep     = 0.5,
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   155
    )
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   156
    dot.set_edge_defaults(
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   157
            labeldistance   = 3.0,
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   158
            penwidth        = 2.0,
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   159
    )
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   160
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   161
    nodes = { }
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   162
    edges = { }
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   163
    vlan_colors = { } # { vlan: color }
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   164
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   165
    for host, local, remote, remote_host in items :
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   166
        # src
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   167
        src_name = str(host)
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   168
        src_label = '"{host.location}"'.format(host=host)
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   169
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   170
        if src_name in nodes :
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   171
            src = nodes[src_name]
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   172
        else :
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   173
            src = nodes[src_name] = pydot.Node(src_name,
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   174
                    label       = src_label,
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   175
                    fontsize    = 18,
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   176
            )
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   177
            dot.add_node(src)
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   178
        
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   179
        # dst
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   180
        if remote_host :
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   181
            dst_name = str(remote_host)
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   182
            dst_label = '"{host.location}"'.format(host=remote_host)
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   183
        else :
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   184
            dst_name = remote['chassis'].replace(':', '-')
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   185
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   186
            # XXX: pydot is not smart enough to quote this
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   187
            if remote['sys_name'] :
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   188
                dst_label = '"{remote[chassis]} ({remote[sys_name]})"'.format(remote=remote)
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   189
            else :
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   190
                dst_label = '"{remote[chassis]}"'.format(remote=remote)
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   191
        
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   192
        if dst_name in nodes :
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   193
            dst = nodes[dst_name]
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   194
        else :
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   195
            dst = nodes[dst_name] = pydot.Node(dst_name,
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   196
                    label       = dst_label,
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   197
                    fontsize    = 18,
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   198
            )
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   199
            dot.add_node(dst)
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   200
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   201
        # edges
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   202
        headlabel = '"{remote[port]}"'.format(remote=remote)
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   203
        taillabel = '"{local[port]}"'.format(local=local)
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   204
        fillcolor = 'black'
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   205
        color = 'black'
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   206
        untag = tagged = None
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   207
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   208
        # vlans?
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   209
        if vlans and host in vlans and local['port_id'] in vlans[host] :
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   210
            untag, tagged = vlans[host][local['port_id']]
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   211
            
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   212
            log.debug("%s#%s: %s+%s", host, local['port_id'], untag, tagged)
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   213
            
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   214
            colors = []
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   215
            for tag in sorted(tagged) :
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   216
                if tag in COLOR_VLANS :
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   217
                    colors.append(COLOR_VLANS[tag])
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   218
                elif tag in vlan_colors :
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   219
                    colors.append(vlan_colors[tag])
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   220
                else :
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   221
                    color = '/paired12/{count}'.format(count=1+len(vlan_colors))
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   222
                    
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   223
                    log.info("%s#%s: chosing new vlan %s color %s", host, local['port_id'], tag, color)
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   224
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   225
                    vlan_colors[tag] = color
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   226
                    colors.append(color)
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   227
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   228
            if not untag :
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   229
                pass
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   230
            elif untag in COLOR_VLANS :
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   231
                fillcolor = COLOR_VLANS[untag]
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   232
            elif untag in vlan_colors :
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   233
                fillcolor = vlan_colors[untag]
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   234
            else :
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   235
                color = '/paired12/{count}'.format(count=1+len(vlan_colors))
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   236
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   237
                log.warn("%s#%s: chosing new vlan %s color %s", host, local['port_id'], untag, color)
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   238
                    
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   239
                fillcolor = vlan_colors[tag] = color
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   240
            
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   241
            # first color overrides fillcolor for heads
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   242
            if colors and untag :
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   243
                color = ':'.join([fillcolor] + colors)
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   244
            elif colors :
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   245
                color = ':'.join(colors)
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   246
            elif fillcolor :
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   247
                color = fillcolor
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   248
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   249
        elif vlans :
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   250
            # XXX: this happens when LLDP gives us the LACP ports but the VLANS are on the TRK port
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   251
            log.warn("%s#%s: unknown port for vlans: %s", host, local['port_id'], vlans.get(host))
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   252
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   253
        # edge
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   254
        if (src_name, local['port'], dst_name, remote['port']) in edges :
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   255
            log.warning("%s:%s <- %s:%s: duplicate", src_name, local['port'], dst_name, remote['port'])
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   256
        
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   257
        elif (dst_name, remote['port'], src_name, local['port']) in edges :
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   258
            log.info("%s <-> %s", src_name, dst_name)
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   259
            edge = edges[(dst_name, remote['port'], src_name, local['port'])]
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   260
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   261
            if edge.get('headlabel') != taillabel :
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   262
                log.warn("%s -> %s: local port mismatch: %s vs %s", src_name, dst_name, local['port'], edge.get('headlabel'))
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   263
            
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   264
            if edge.get('taillabel') != headlabel :
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   265
                log.warn("%s -> %s: remote port mismatch: %s vs %s", src_name, dst_name, remote['port'], edge.get('taillabel'))
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   266
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   267
            if edge.get('fillcolor') != fillcolor :
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   268
                log.warn("%s#%s -> %s#%s: remote untag mismatch: %s vs %s", src_name, local['port'], dst_name, remote['port'], fillcolor, edge.get('fillcolor'))
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   269
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   270
            if edge.get('color') != '"' + color + '"' :
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   271
                log.warn("%s#%s -> %s#%s: remote tagged mismatch: %s vs %s", src_name, local['port'], dst_name, remote['port'], color, edge.get('color'))
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   272
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   273
            # mark as bidirectional
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   274
            edges[(src_name, local['port'], dst_name, remote['port'])] = edge
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   275
            
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   276
            edge.set('dir', 'both' if untag else 'none')
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   277
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   278
            # set second color for tail
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   279
            if untag :
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   280
                edge.set('color', '"{headcolor}:{tailcolor}{tagcolors}"'.format(
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   281
                    headcolor   = edge.get('fillcolor'),
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   282
                    tailcolor   = fillcolor,
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   283
                    tagcolors   = ':' + ':'.join(colors) if colors else '',
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   284
                ))
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   285
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   286
        else :
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   287
            edge = edges[(src_name, local['port'], dst_name, remote['port'])] = pydot.Edge(src, dst,
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   288
                    dir         = 'forward' if untag else 'none',
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   289
                    headlabel   = headlabel,
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   290
                    taillabel   = taillabel,
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   291
                    color       = '"{color}"'.format(color=color),
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   292
                    fillcolor   = fillcolor,
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   293
            )
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   294
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   295
            dot.add_edge(edge)
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   296
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   297
    if options.graph_dot :
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   298
        dot.write(options.graph_dot)
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   299
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   300
def main (argv) :
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   301
    """
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   302
        Graph network
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   303
    """
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   304
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   305
    parser = optparse.OptionParser(main.__doc__)
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   306
    parser.add_option_group(pvl.args.parser(parser))
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   307
    parser.add_option_group(pvl.hosts.optparser(parser))
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   308
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   309
    parser.add_option('--snmp-data', metavar='FILE', default=None,
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   310
            help="Load snmp data from FILE")
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   311
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   312
    parser.add_option('--graph-dot', metavar='FILE',
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   313
            help="Output .dot graph data to file")
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   314
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   315
    parser.add_option('--graph-vlans', action='store_true', dest='vlans', 
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   316
            help="Graph all VLANs")
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   317
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   318
    parser.add_option('--no-vlans', action='store_false', dest='vlans',
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   319
            help="Do not color VLANs")
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   320
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   321
    # input
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   322
    options, args = parser.parse_args(argv[1:])
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   323
    pvl.args.apply(options)
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   324
    
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   325
    # load hosts for correlation
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   326
    hosts = dict((str(host), host) for host in pvl.hosts.apply(options, args))
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   327
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   328
    # load raw snmp data
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   329
    data = load_snmp_data(options, options.snmp_data, hosts)
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   330
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   331
    import pprint; pprint.pprint(data)
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   332
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   333
    # TODO: process data into graph
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   334
    
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   335
    # TODO: generate graph
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   336
    #apply_graph(options, items, vlans if options.vlans else None)
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   337
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   338
    return 0
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   339
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   340
if __name__ == '__main__':
aadf76a05ec1 :pvl.hosts-lldp: split into pvl.hosts-snmp to gather data, and pvl.hosts-graph to process/graph it
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   341
    pvl.args.main(main)