pvl/rrd/graph.py
author Tero Marttila <terom@paivola.fi>
Sat, 26 Jul 2014 13:52:51 +0300
changeset 422 56ba4bef5016
parent 232 5894c70dc6a8
permissions -rw-r--r--
version: 0.7.0

* pvl.hosts: location = ... field
* pvl.hosts: support extension:foo = ... fields
* pvl.hosts: down = ...
* pvl.hosts-snmp: gather host links from snmp using lldp/fdb/vlan info
* pvl.hosts-graph: graph host links
149
8e0320283be2 pvl.rrd: package imports
Tero Marttila <terom@paivola.fi>
parents: 143
diff changeset
     1
from pvl.rrd import api as rrd
143
fb48ba17ae3e pvl.rrd: copy+update from old rrdweb
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     2
import time
fb48ba17ae3e pvl.rrd: copy+update from old rrdweb
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     3
fb48ba17ae3e pvl.rrd: copy+update from old rrdweb
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     4
from pvl.invoke import merge # XXX
fb48ba17ae3e pvl.rrd: copy+update from old rrdweb
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     5
156
999ae3e9fdec pvl.web.rrd: split out pvl.rrd.args + pvl.rrd.rrds; bugfix
Tero Marttila <terom@paivola.fi>
parents: 155
diff changeset
     6
import logging; log = logging.getLogger('pvl.rrd.graph')
999ae3e9fdec pvl.web.rrd: split out pvl.rrd.args + pvl.rrd.rrds; bugfix
Tero Marttila <terom@paivola.fi>
parents: 155
diff changeset
     7
143
fb48ba17ae3e pvl.rrd: copy+update from old rrdweb
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     8
"""
155
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
     9
    RRDTool graph builders.
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    10
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    11
    Includes support for Smokeping-inspired interface graphs from MRTG/Collectd.
143
fb48ba17ae3e pvl.rrd: copy+update from old rrdweb
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    12
"""
fb48ba17ae3e pvl.rrd: copy+update from old rrdweb
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    13
fb48ba17ae3e pvl.rrd: copy+update from old rrdweb
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    14
def timestamp () :
fb48ba17ae3e pvl.rrd: copy+update from old rrdweb
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    15
    return time.strftime("%Y/%m/%d %H:%M:%S %Z")
fb48ba17ae3e pvl.rrd: copy+update from old rrdweb
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    16
155
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    17
class Graph (object) :
143
fb48ba17ae3e pvl.rrd: copy+update from old rrdweb
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    18
    """
155
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    19
        Render an RRD graph from definitions/options.
143
fb48ba17ae3e pvl.rrd: copy+update from old rrdweb
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    20
        
155
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    21
        Acts as a semi-magical object, with immutable state, and methods that return updated copies of our state.
143
fb48ba17ae3e pvl.rrd: copy+update from old rrdweb
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    22
155
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    23
        >>> Graph()
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    24
        Graph()
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    25
        >>> Graph('foo')
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    26
        Graph('foo')
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    27
        >>> Graph(bar='bar')
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    28
        Graph(bar='bar')
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    29
        >>> Graph('foo', bar='bar')
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    30
        Graph('foo', bar='bar')
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    31
        >>> Graph('foo')(bar='bar')
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    32
        Graph('foo', bar='bar')
143
fb48ba17ae3e pvl.rrd: copy+update from old rrdweb
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    33
    """
fb48ba17ae3e pvl.rrd: copy+update from old rrdweb
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    34
155
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    35
    def __init__ (self, *defs, **opts) :
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    36
        self.defs = defs
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    37
        self.opts = opts
143
fb48ba17ae3e pvl.rrd: copy+update from old rrdweb
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    38
155
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    39
    def __call__ (self, *defs, **opts) :
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    40
        return type(self)(*(self.defs + defs), **merge(self.opts, opts))
143
fb48ba17ae3e pvl.rrd: copy+update from old rrdweb
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    41
155
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    42
    def __getitem__ (self, key) :
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    43
        return self.opts[key]
143
fb48ba17ae3e pvl.rrd: copy+update from old rrdweb
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    44
155
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    45
    def graph (self, out) :
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    46
        """
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    47
            Render completed graph using pvl.rrd.api.graph()
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    48
        """
143
fb48ba17ae3e pvl.rrd: copy+update from old rrdweb
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    49
155
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    50
        return rrd.graph(out, *self.defs, **self.opts)
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    51
    
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    52
    def __repr__ (self) :
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    53
        return "{type}({args})".format(
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    54
                type    = self.__class__.__name__,
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    55
                args    = ', '.join([repr(def_) for def_ in self.defs] + [str(opt) + '=' + repr(value) for opt, value in self.opts.iteritems()]),
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    56
        )
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    57
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    58
class Interface (Graph) :
143
fb48ba17ae3e pvl.rrd: copy+update from old rrdweb
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    59
    """
155
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    60
        An RRD graph showing in/out traffic in bits/s on an interface, with style/interval support.
143
fb48ba17ae3e pvl.rrd: copy+update from old rrdweb
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    61
    """
fb48ba17ae3e pvl.rrd: copy+update from old rrdweb
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    62
155
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    63
    @classmethod
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    64
    def build (cls, title, rrd, style, interval) :
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    65
        """
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    66
            Return a simple Graph using the given title, RRD and style/interval
143
fb48ba17ae3e pvl.rrd: copy+update from old rrdweb
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    67
155
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    68
                title       - common(title=...)
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    69
                rrd         - data(rrd=...)
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    70
                style       - style(style=...)
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    71
                interval    - interval(interval=...)
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    72
        """
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    73
156
999ae3e9fdec pvl.web.rrd: split out pvl.rrd.args + pvl.rrd.rrds; bugfix
Tero Marttila <terom@paivola.fi>
parents: 155
diff changeset
    74
        return cls().common(title).source(rrd).style(style).interval(interval)
155
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    75
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    76
    # builders
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    77
    def common (self, title) :
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    78
        """
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    79
            Common options for all views
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    80
        """
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    81
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    82
        return self(
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    83
            # output
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    84
            imgformat           = "PNG",
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    85
            #        lazy                = True,
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    86
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    87
            color               = [
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    88
                # disable border
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    89
                # border            = 0,
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    90
                "SHADEA#ffffff00",
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    91
                "SHADEB#ffffff00",
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    92
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    93
                # keep background transparent
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    94
                "BACK#ffffff00",
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    95
                "SHADEB#ffffff00",
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    96
            ],
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    97
             
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    98
            # labels
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    99
            vertical_label      = "bits/s",
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   100
            title               = title,
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   101
            units               = "si",
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   102
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   103
            # use logarithmic scaling?
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   104
            #        logarithmic         = True,
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   105
            
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   106
            # smooth out lines
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   107
            slope_mode          = True,
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   108
        )
143
fb48ba17ae3e pvl.rrd: copy+update from old rrdweb
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   109
    
155
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   110
    ## data
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   111
    # DS names; in/out bytes
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   112
    IN = OUT = None
143
fb48ba17ae3e pvl.rrd: copy+update from old rrdweb
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   113
155
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   114
    def source (self, rrd) :
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   115
        """
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   116
            Abstract: rrd -> in/out
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   117
        """
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   118
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   119
        if not (self.IN and self.OUT) :
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   120
            raise TypeError("No IN/OUT DS names for %s" % (self, ))
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   121
156
999ae3e9fdec pvl.web.rrd: split out pvl.rrd.args + pvl.rrd.rrds; bugfix
Tero Marttila <terom@paivola.fi>
parents: 155
diff changeset
   122
        log.debug("%s", rrd)
999ae3e9fdec pvl.web.rrd: split out pvl.rrd.args + pvl.rrd.rrds; bugfix
Tero Marttila <terom@paivola.fi>
parents: 155
diff changeset
   123
155
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   124
        return self(
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   125
            # data sources, bytes/s
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   126
            r'DEF:in0={rrd}:{ds_in}:AVERAGE'.format(rrd=rrd, ds_in=self.IN),
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   127
            r'DEF:out0={rrd}:{ds_out}:AVERAGE'.format(rrd=rrd, ds_out=self.OUT),
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   128
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   129
            # data, bits/s
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   130
            'CDEF:in=in0,8,*',
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   131
            'CDEF:out=out0,8,*',
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   132
        )
143
fb48ba17ae3e pvl.rrd: copy+update from old rrdweb
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   133
    
155
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   134
    ## style
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   135
    def style_overview (graph) :
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   136
        """
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   137
            in/out bps -> overview graph
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   138
        """
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   139
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   140
        return graph(
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   141
            "CDEF:all=in,out,+",
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   142
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   143
            "VDEF:max=all,MAXIMUM",
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   144
            "VDEF:avg=all,AVERAGE",
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   145
            "VDEF:min=all,MINIMUM",
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   146
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   147
            "LINE1:in#0000FF:In",
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   148
            "LINE1:out#00CC00:Out",
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   149
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   150
            "GPRINT:max:%6.2lf %Sbps max",
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   151
            "GPRINT:avg:%6.2lf %Sbps avg",
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   152
            "GPRINT:min:%6.2lf %Sbps min\\l",
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   153
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   154
            # dimensions
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   155
            width               = 600,
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   156
            height              = 50,
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   157
        )
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   158
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   159
    def style_detail (graph) :
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   160
        """
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   161
            in/out bps -> detail graph
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   162
        """
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   163
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   164
        return graph(
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   165
            # values
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   166
            'VDEF:in_max=in,MAXIMUM',
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   167
            'VDEF:in_avg=in,AVERAGE',
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   168
            'VDEF:in_min=in,MINIMUM',
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   169
            'VDEF:in_cur=in,LAST',
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   170
            'VDEF:out_max=out,MAXIMUM',
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   171
            'VDEF:out_avg=out,AVERAGE',
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   172
            'VDEF:out_min=out,MINIMUM',
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   173
            'VDEF:out_cur=out,LAST',
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   174
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   175
            # legend/graph
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   176
            "COMMENT:%4s" % "",
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   177
            "COMMENT:%11s" % "Maximum",
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   178
            "COMMENT:%11s" % "Average",
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   179
            "COMMENT:%11s" % "Minimum",
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   180
            "COMMENT:%11s\\l" % "Current",
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   181
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   182
            "LINE1:in#0000FF:%4s" % "In",
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   183
            'GPRINT:in_max:%6.2lf %Sbps',
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   184
            'GPRINT:in_avg:%6.2lf %Sbps',
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   185
            'GPRINT:in_min:%6.2lf %Sbps',
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   186
            'GPRINT:in_cur:%6.2lf %Sbps\\l',
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   187
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   188
            "LINE1:out#00CC00:%4s" % "Out",
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   189
            'GPRINT:out_max:%6.2lf %Sbps',
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   190
            'GPRINT:out_avg:%6.2lf %Sbps',
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   191
            'GPRINT:out_min:%6.2lf %Sbps',
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   192
            'GPRINT:out_cur:%6.2lf %Sbps\\l',
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   193
            
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   194
            # mark
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   195
            "COMMENT:Generated {now}\\r".format(now=timestamp().replace(':', '\\:')),
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   196
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   197
            # dimensions
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   198
            width               = 600,
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   199
            height              = 200,
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   200
        )
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   201
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   202
    STYLE = {
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   203
        'overview': style_overview,
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   204
        'detail':   style_detail,
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   205
    }
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   206
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   207
    def style (self, style) :
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   208
        return self.STYLE[style](self)
143
fb48ba17ae3e pvl.rrd: copy+update from old rrdweb
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   209
    
155
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   210
    ## interval
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   211
    def interval_daily (graph) :
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   212
        """
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   213
            Common options for the 'daily' view
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   214
        """
143
fb48ba17ae3e pvl.rrd: copy+update from old rrdweb
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   215
155
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   216
        return graph(
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   217
            # labels
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   218
            x_grid              = "MINUTE:15:HOUR:1:HOUR:4:0:%H:%M",
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   219
        
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   220
            # general info
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   221
            title               = "Daily {graph[title]}".format(graph=graph),
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   222
        
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   223
            # interval
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   224
            start               = "-24h",
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   225
        )
143
fb48ba17ae3e pvl.rrd: copy+update from old rrdweb
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   226
155
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   227
    def interval_weekly (graph) :
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   228
        return graph(
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   229
            # labels
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   230
            #        x_grid              = "MINUTE:15:HOUR:1:HOUR:4:0:%H:%M",
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   231
        
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   232
            # general info
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   233
            title               = "Weekly {graph[title]}".format(graph=graph),
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   234
        
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   235
            # interval
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   236
            start               = "-7d",
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   237
        )
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   238
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   239
    def interval_yearly (graph) :
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   240
        return graph(
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   241
            # labels
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   242
            #        x_grid              = "MINUTE:15:HOUR:1:HOUR:4:0:%H:%M",
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   243
        
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   244
            # general info
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   245
            title               = "Yearly {graph[title]}".format(graph=graph),
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   246
        
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   247
            # interval
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   248
            start               = "-1y",
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   249
        )
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   250
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   251
    INTERVAL = {
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   252
        'daily':    interval_daily,
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   253
        'weekly':   interval_weekly,
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   254
        'yearly':   interval_yearly,
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   255
    }
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   256
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   257
    def interval (self, interval) :
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   258
        return self.INTERVAL[interval](self)
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   259
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   260
# specific types
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   261
class Mrtg (Interface) :
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   262
    """
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   263
        MRTG -> in/out
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   264
    """
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   265
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   266
    IN = 'ds0'
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   267
    OUT = 'ds1'
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   268
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   269
class CollectdIfOctets (Interface) :
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   270
    """
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   271
        Collectd if_octets -> in/out
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   272
    """
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   273
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   274
    IN = 'rx'
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   275
    OUT = 'tx'
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   276
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   277
INTERFACE = {
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   278
    'mrtg':         Mrtg,
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   279
    'collectd':     CollectdIfOctets,
143
fb48ba17ae3e pvl.rrd: copy+update from old rrdweb
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   280
}
fb48ba17ae3e pvl.rrd: copy+update from old rrdweb
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   281
156
999ae3e9fdec pvl.web.rrd: split out pvl.rrd.args + pvl.rrd.rrds; bugfix
Tero Marttila <terom@paivola.fi>
parents: 155
diff changeset
   282
def interface_type (type) :
143
fb48ba17ae3e pvl.rrd: copy+update from old rrdweb
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   283
    """
155
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   284
        Lookup Interface -subclass for given type.
143
fb48ba17ae3e pvl.rrd: copy+update from old rrdweb
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   285
    """
fb48ba17ae3e pvl.rrd: copy+update from old rrdweb
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   286
155
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   287
    return INTERFACE[type]
143
fb48ba17ae3e pvl.rrd: copy+update from old rrdweb
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   288
155
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   289
# XXX: legacy
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   290
def mrtg (style, interval, title, rrd, out) :
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   291
    return MrtgInterface.build(title, rrd, style, interval).graph(out)
143
fb48ba17ae3e pvl.rrd: copy+update from old rrdweb
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   292
155
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   293
def collectd_ifoctets (style, interval, title, rrd, out) :
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   294
    return CollectdIfOctets.build(title, rrd, style, interval).graph(out)
143
fb48ba17ae3e pvl.rrd: copy+update from old rrdweb
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   295
155
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   296
if __name__ == '__main__':
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   297
    import doctest
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   298
    doctest.testmod()
143
fb48ba17ae3e pvl.rrd: copy+update from old rrdweb
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   299