pvl/rrd/graph.py
author Tero Marttila <terom@paivola.fi>
Sun, 10 Feb 2013 13:20:29 +0200
changeset 205 f7658198c224
parent 156 999ae3e9fdec
child 232 5894c70dc6a8
permissions -rw-r--r--
pvl.verkko.hosts: refactor RealtimeHandler to use HostsTable
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
    # builders
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    59
class Interface (Graph) :
143
fb48ba17ae3e pvl.rrd: copy+update from old rrdweb
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    60
    """
155
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    61
        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
    62
    """
fb48ba17ae3e pvl.rrd: copy+update from old rrdweb
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    63
155
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    64
    @classmethod
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    65
    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
    66
        """
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    67
            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
    68
155
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    69
                title       - common(title=...)
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    70
                rrd         - data(rrd=...)
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    71
                style       - style(style=...)
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    72
                interval    - interval(interval=...)
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    73
        """
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    74
156
999ae3e9fdec pvl.web.rrd: split out pvl.rrd.args + pvl.rrd.rrds; bugfix
Tero Marttila <terom@paivola.fi>
parents: 155
diff changeset
    75
        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
    76
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    77
    # builders
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    78
    def common (self, title) :
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    79
        """
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    80
            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
    81
        """
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    82
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    83
        return self(
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    84
            # output
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    85
            imgformat           = "PNG",
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    86
            #        lazy                = True,
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    87
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    88
            color               = [
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    89
                # disable border
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    90
                # border            = 0,
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    91
                "SHADEA#ffffff00",
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    92
                "SHADEB#ffffff00",
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    93
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    94
                # keep background transparent
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    95
                "BACK#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
             
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
    99
            # labels
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   100
            vertical_label      = "bits/s",
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   101
            title               = title,
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   102
            units               = "si",
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   103
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   104
            # use logarithmic scaling?
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   105
            #        logarithmic         = True,
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   106
            
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   107
            # smooth out lines
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   108
            slope_mode          = True,
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   109
        )
143
fb48ba17ae3e pvl.rrd: copy+update from old rrdweb
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   110
    
155
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   111
    ## data
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   112
    # 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
   113
    IN = OUT = None
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
    def source (self, rrd) :
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   116
        """
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   117
            Abstract: rrd -> in/out
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
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   120
        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
   121
            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
   122
156
999ae3e9fdec pvl.web.rrd: split out pvl.rrd.args + pvl.rrd.rrds; bugfix
Tero Marttila <terom@paivola.fi>
parents: 155
diff changeset
   123
        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
   124
155
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   125
        return self(
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   126
            # data sources, bytes/s
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   127
            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
   128
            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
   129
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   130
            # data, bits/s
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   131
            'CDEF:in=in0,8,*',
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   132
            'CDEF:out=out0,8,*',
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   133
        )
143
fb48ba17ae3e pvl.rrd: copy+update from old rrdweb
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   134
    
155
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   135
    ## style
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   136
    def style_overview (graph) :
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   137
        """
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   138
            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
   139
        """
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   140
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   141
        return graph(
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   142
            "CDEF:all=in,out,+",
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   143
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   144
            "VDEF:max=all,MAXIMUM",
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   145
            "VDEF:avg=all,AVERAGE",
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   146
            "VDEF:min=all,MINIMUM",
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   147
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   148
            "LINE1:in#0000FF:In",
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   149
            "LINE1:out#00CC00:Out",
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   150
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   151
            "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
   152
            "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
   153
            "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
   154
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   155
            # dimensions
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   156
            width               = 600,
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   157
            height              = 50,
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
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   160
    def style_detail (graph) :
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
            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
   163
        """
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   164
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   165
        return graph(
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   166
            # values
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   167
            '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
   168
            '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
   169
            '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
   170
            '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
   171
            '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
   172
            '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
   173
            '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
   174
            '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
   175
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   176
            # legend/graph
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   177
            "COMMENT:%4s" % "",
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   178
            "COMMENT:%11s" % "Maximum",
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   179
            "COMMENT:%11s" % "Average",
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   180
            "COMMENT:%11s" % "Minimum",
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   181
            "COMMENT:%11s\\l" % "Current",
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   182
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   183
            "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
   184
            '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
   185
            '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
   186
            '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
   187
            '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
   188
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   189
            "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
   190
            '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
   191
            '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
   192
            '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
   193
            '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
   194
            
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   195
            # mark
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   196
            "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
   197
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   198
            # dimensions
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   199
            width               = 600,
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   200
            height              = 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
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   203
    STYLE = {
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   204
        'overview': style_overview,
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   205
        'detail':   style_detail,
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
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   208
    def style (self, style) :
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   209
        return self.STYLE[style](self)
143
fb48ba17ae3e pvl.rrd: copy+update from old rrdweb
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   210
    
155
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   211
    ## interval
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   212
    def interval_daily (graph) :
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   213
        """
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   214
            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
   215
        """
143
fb48ba17ae3e pvl.rrd: copy+update from old rrdweb
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   216
155
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   217
        return graph(
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   218
            # labels
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   219
            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
   220
        
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   221
            # general info
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   222
            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
   223
        
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   224
            # interval
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   225
            start               = "-24h",
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   226
        )
143
fb48ba17ae3e pvl.rrd: copy+update from old rrdweb
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   227
155
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   228
    def interval_weekly (graph) :
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   229
        return graph(
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   230
            # labels
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   231
            #        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
   232
        
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   233
            # general info
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   234
            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
   235
        
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   236
            # interval
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   237
            start               = "-7d",
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
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   240
    def interval_yearly (graph) :
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   241
        return graph(
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   242
            # labels
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   243
            #        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
   244
        
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   245
            # general info
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   246
            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
   247
        
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   248
            # interval
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   249
            start               = "-1y",
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
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   252
    INTERVAL = {
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   253
        'daily':    interval_daily,
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   254
        'weekly':   interval_weekly,
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   255
        'yearly':   interval_yearly,
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
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   258
    def interval (self, interval) :
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   259
        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
   260
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   261
# specific types
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   262
class Mrtg (Interface) :
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   263
    """
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   264
        MRTG -> in/out
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
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   267
    IN = 'ds0'
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   268
    OUT = 'ds1'
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   269
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   270
class CollectdIfOctets (Interface) :
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
        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
   273
    """
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   274
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   275
    IN = 'rx'
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   276
    OUT = 'tx'
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   277
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   278
INTERFACE = {
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   279
    'mrtg':         Mrtg,
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   280
    'collectd':     CollectdIfOctets,
143
fb48ba17ae3e pvl.rrd: copy+update from old rrdweb
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   281
}
fb48ba17ae3e pvl.rrd: copy+update from old rrdweb
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   282
156
999ae3e9fdec pvl.web.rrd: split out pvl.rrd.args + pvl.rrd.rrds; bugfix
Tero Marttila <terom@paivola.fi>
parents: 155
diff changeset
   283
def interface_type (type) :
143
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
        Lookup Interface -subclass for given type.
143
fb48ba17ae3e pvl.rrd: copy+update from old rrdweb
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   286
    """
fb48ba17ae3e pvl.rrd: copy+update from old rrdweb
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   287
155
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   288
    return INTERFACE[type]
143
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
# XXX: legacy
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   291
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
   292
    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
   293
155
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   294
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
   295
    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
   296
155
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   297
if __name__ == '__main__':
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   298
    import doctest
9f2967ba81ef pvl.rrd.graph: refactor to use Graph -> Interface -> Mrtg/CollectdIfOctets
Tero Marttila <terom@paivola.fi>
parents: 149
diff changeset
   299
    doctest.testmod()
143
fb48ba17ae3e pvl.rrd: copy+update from old rrdweb
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   300