pvl/rrd/graph.py
author Tero Marttila <terom@paivola.fi>
Sun, 20 Jan 2013 19:52:41 +0200
changeset 155 9f2967ba81ef
parent 149 8e0320283be2
child 156 999ae3e9fdec
permissions -rw-r--r--
pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
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
fb48ba17ae3e pvl.rrd: copy+update from old rrdweb
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     6
"""
155
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
     7
    RRDTool graph builders.
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
     8
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
     9
    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
    10
"""
fb48ba17ae3e pvl.rrd: copy+update from old rrdweb
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    11
fb48ba17ae3e pvl.rrd: copy+update from old rrdweb
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    12
def timestamp () :
fb48ba17ae3e pvl.rrd: copy+update from old rrdweb
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    13
    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
    14
155
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    15
class Graph (object) :
143
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
        Render an RRD graph from definitions/options.
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
        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
    20
155
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    21
        >>> Graph()
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    22
        Graph()
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    23
        >>> Graph('foo')
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    24
        Graph('foo')
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    25
        >>> Graph(bar='bar')
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    26
        Graph(bar='bar')
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    27
        >>> Graph('foo', bar='bar')
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    28
        Graph('foo', 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')
143
fb48ba17ae3e pvl.rrd: copy+update from old rrdweb
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    31
    """
fb48ba17ae3e pvl.rrd: copy+update from old rrdweb
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    32
155
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    33
    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
    34
        self.defs = defs
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    35
        self.opts = opts
143
fb48ba17ae3e pvl.rrd: copy+update from old rrdweb
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    36
155
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    37
    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
    38
        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
    39
155
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    40
    def __getitem__ (self, key) :
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    41
        return self.opts[key]
143
fb48ba17ae3e pvl.rrd: copy+update from old rrdweb
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    42
155
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    43
    def graph (self, out) :
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    44
        """
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    45
            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
    46
        """
143
fb48ba17ae3e pvl.rrd: copy+update from old rrdweb
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    47
155
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    48
        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
    49
    
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    50
    def __repr__ (self) :
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    51
        return "{type}({args})".format(
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    52
                type    = self.__class__.__name__,
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    53
                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
    54
        )
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    55
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    56
    # builders
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    57
class Interface (Graph) :
143
fb48ba17ae3e pvl.rrd: copy+update from old rrdweb
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    58
    """
155
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    59
        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
    60
    """
fb48ba17ae3e pvl.rrd: copy+update from old rrdweb
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    61
155
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    62
    @classmethod
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    63
    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
    64
        """
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    65
            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
    66
155
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    67
                title       - common(title=...)
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    68
                rrd         - data(rrd=...)
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    69
                style       - style(style=...)
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    70
                interval    - interval(interval=...)
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    71
        """
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
        graph = cls()
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    74
        graph = graph.common(title)
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    75
        graph = graph.source(rrd)
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    76
        graph = graph.style(style)
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    77
        graph = graph.interval(interval)
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
        return graph
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
    # builders
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    82
    def common (self, title) :
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    83
        """
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    84
            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
    85
        """
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
        return self(
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    88
            # output
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    89
            imgformat           = "PNG",
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    90
            #        lazy                = True,
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    91
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    92
            color               = [
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    93
                # disable border
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    94
                # border            = 0,
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    95
                "SHADEA#ffffff00",
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    96
                "SHADEB#ffffff00",
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
                # keep background transparent
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    99
                "BACK#ffffff00",
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   100
                "SHADEB#ffffff00",
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   101
            ],
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
            # labels
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   104
            vertical_label      = "bits/s",
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   105
            title               = title,
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   106
            units               = "si",
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   107
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   108
            # use logarithmic scaling?
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   109
            #        logarithmic         = True,
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   110
            
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   111
            # smooth out lines
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   112
            slope_mode          = True,
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   113
        )
143
fb48ba17ae3e pvl.rrd: copy+update from old rrdweb
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   114
    
155
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   115
    ## data
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   116
    # 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
   117
    IN = OUT = None
143
fb48ba17ae3e pvl.rrd: copy+update from old rrdweb
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   118
155
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   119
    def source (self, rrd) :
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   120
        """
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   121
            Abstract: rrd -> in/out
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   122
        """
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   123
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   124
        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
   125
            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
   126
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   127
        return self(
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   128
            # data sources, bytes/s
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   129
            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
   130
            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
   131
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   132
            # data, bits/s
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   133
            'CDEF:in=in0,8,*',
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   134
            'CDEF:out=out0,8,*',
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   135
        )
143
fb48ba17ae3e pvl.rrd: copy+update from old rrdweb
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   136
    
155
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   137
    ## style
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   138
    def style_overview (graph) :
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
            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
   141
        """
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
        return graph(
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   144
            "CDEF:all=in,out,+",
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   145
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   146
            "VDEF:max=all,MAXIMUM",
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   147
            "VDEF:avg=all,AVERAGE",
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   148
            "VDEF:min=all,MINIMUM",
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
            "LINE1:in#0000FF:In",
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   151
            "LINE1:out#00CC00:Out",
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   152
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   153
            "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
   154
            "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
   155
            "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
   156
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   157
            # dimensions
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   158
            width               = 600,
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   159
            height              = 50,
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
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   162
    def style_detail (graph) :
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
            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
   165
        """
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   166
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   167
        return graph(
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   168
            # values
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   169
            '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
   170
            '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
   171
            '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
   172
            '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
   173
            '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
   174
            '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
   175
            '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
   176
            '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
   177
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   178
            # legend/graph
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   179
            "COMMENT:%4s" % "",
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   180
            "COMMENT:%11s" % "Maximum",
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   181
            "COMMENT:%11s" % "Average",
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   182
            "COMMENT:%11s" % "Minimum",
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   183
            "COMMENT:%11s\\l" % "Current",
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   184
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   185
            "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
   186
            '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
   187
            '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
   188
            '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
   189
            '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
   190
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   191
            "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
   192
            '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
   193
            '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
   194
            '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
   195
            '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
   196
            
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   197
            # mark
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   198
            "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
   199
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   200
            # dimensions
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   201
            width               = 600,
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   202
            height              = 200,
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   203
        )
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   204
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   205
    STYLE = {
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   206
        'overview': style_overview,
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   207
        'detail':   style_detail,
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   208
    }
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   209
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   210
    def style (self, style) :
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   211
        return self.STYLE[style](self)
143
fb48ba17ae3e pvl.rrd: copy+update from old rrdweb
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   212
    
155
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   213
    ## interval
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   214
    def interval_daily (graph) :
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   215
        """
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   216
            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
   217
        """
143
fb48ba17ae3e pvl.rrd: copy+update from old rrdweb
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   218
155
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   219
        return graph(
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   220
            # labels
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   221
            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
   222
        
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   223
            # general info
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   224
            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
   225
        
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   226
            # interval
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   227
            start               = "-24h",
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   228
        )
143
fb48ba17ae3e pvl.rrd: copy+update from old rrdweb
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   229
155
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   230
    def interval_weekly (graph) :
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   231
        return graph(
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   232
            # labels
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   233
            #        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
   234
        
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   235
            # general info
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   236
            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
   237
        
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   238
            # interval
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   239
            start               = "-7d",
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   240
        )
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   241
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   242
    def interval_yearly (graph) :
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   243
        return graph(
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   244
            # labels
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   245
            #        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
   246
        
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   247
            # general info
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   248
            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
   249
        
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   250
            # interval
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   251
            start               = "-1y",
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   252
        )
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   253
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   254
    INTERVAL = {
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   255
        'daily':    interval_daily,
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   256
        'weekly':   interval_weekly,
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   257
        'yearly':   interval_yearly,
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   258
    }
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
    def interval (self, interval) :
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   261
        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
   262
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   263
# specific types
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   264
class Mrtg (Interface) :
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
        MRTG -> in/out
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   267
    """
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
    IN = 'ds0'
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   270
    OUT = 'ds1'
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   271
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   272
class CollectdIfOctets (Interface) :
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
        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
   275
    """
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
    IN = 'rx'
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   278
    OUT = 'tx'
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   279
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   280
INTERFACE = {
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   281
    'mrtg':         Mrtg,
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   282
    'collectd':     CollectdIfOctets,
143
fb48ba17ae3e pvl.rrd: copy+update from old rrdweb
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   283
}
fb48ba17ae3e pvl.rrd: copy+update from old rrdweb
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   284
155
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   285
def interface (type) :
143
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
        Lookup Interface -subclass for given type.
143
fb48ba17ae3e pvl.rrd: copy+update from old rrdweb
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   288
    """
fb48ba17ae3e pvl.rrd: copy+update from old rrdweb
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   289
155
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   290
    return INTERFACE[type]
143
fb48ba17ae3e pvl.rrd: copy+update from old rrdweb
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   291
155
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   292
# XXX: legacy
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   293
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
   294
    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
   295
155
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   296
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
   297
    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
   298
155
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   299
if __name__ == '__main__':
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   300
    import doctest
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   301
    doctest.testmod()
143
fb48ba17ae3e pvl.rrd: copy+update from old rrdweb
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   302