pvl/verkko/rrd.py
author Tero Marttila <terom@paivola.fi>
Mon, 21 Jan 2013 17:31:59 +0200
changeset 158 3ff66d4f401c
parent 157 2cc65177260c
child 161 cc10eb9d0055
permissions -rw-r--r--
split up static into rrd/dhcp
152
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     1
# encoding: utf-8
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     2
"""
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     3
    http://verkko.paivola.fi/rrd
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     4
"""
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
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
from pvl import web
152
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     7
from pvl.web import urls
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     8
from pvl.web.html import tags as html
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     9
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    10
import pvl.rrd
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    11
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    12
import logging; log = logging.getLogger('pvl.verkko.rrd')
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    13
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    14
# View/Controller
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    15
class Handler (web.Handler) :
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    16
    CSS = (
158
3ff66d4f401c split up static into rrd/dhcp
Tero Marttila <terom@paivola.fi>
parents: 157
diff changeset
    17
        "/static/rrd/rrd.css", 
152
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    18
    )
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    19
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    20
    def title (self) :
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    21
        return u"Päivölä Network - Network RRD Traffic Graphs"
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    22
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    23
    def breadcrumb (self, _tree, target=None) :
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    24
        """
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    25
            Yield (title, url) navigation breadcrumbs
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    26
        """
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    27
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    28
        yield '/', self.url(Index)
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    29
        
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    30
        if _tree :
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    31
            tree = ''
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    32
            
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    33
            for part in _tree.split('/') :
156
999ae3e9fdec pvl.web.rrd: split out pvl.rrd.args + pvl.rrd.rrds; bugfix
Tero Marttila <terom@paivola.fi>
parents: 155
diff changeset
    34
                tree = urls.join(tree, part)
152
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    35
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    36
                yield part, self.url(Index, tree=tree)
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    37
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    38
        if target :
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    39
            # Target
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    40
            yield target, self.url(Target, tree=tree, target=self.target)
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    41
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    42
    def render_breadcrumb (self, tree, target=None) :
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    43
        """
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    44
            Render breadcrumb -> html.div
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    45
        """
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    46
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    47
        return html.div(id='breadcrumb')(html(" &raquo; ".join(
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    48
            str(html.a(href=url)(node)) for node, url in self.breadcrumb(tree, target)))
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    49
        )
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    50
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    51
class Index (Handler) :
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    52
    """
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    53
        Browse trees, show overview graphs for targets.
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    54
    """
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    55
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    56
    def _title (self) :
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    57
        if self.tree :
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    58
            return html(" &raquo; ".join(self.tree.split('/')))
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    59
        else :
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    60
            return ""
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    61
 
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    62
    def url_tree (self, node) :
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    63
        """
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    64
            Return url for given sub-node.
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    65
        """
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    66
        
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    67
        if self.tree :
156
999ae3e9fdec pvl.web.rrd: split out pvl.rrd.args + pvl.rrd.rrds; bugfix
Tero Marttila <terom@paivola.fi>
parents: 155
diff changeset
    68
            path = urls.join(self.tree, node)
152
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    69
        else :
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    70
            path = node
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    71
        
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    72
        return self.url(tree=path)
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    73
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    74
    def process (self, tree=None) :
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    75
        """
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    76
            Lookup path -> self.tree.
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    77
        """
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    78
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    79
        if tree :
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    80
            try :
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    81
                # XXX: unicode?
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    82
                self.tree = self.app.rrd.tree(tree)
156
999ae3e9fdec pvl.web.rrd: split out pvl.rrd.args + pvl.rrd.rrds; bugfix
Tero Marttila <terom@paivola.fi>
parents: 155
diff changeset
    83
152
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    84
            except ValueError as ex :
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    85
                # mask
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    86
                raise web.NotFound(tree)
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    87
        else :
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    88
            # root
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    89
            self.tree = self.app.rrd.tree()
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    90
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    91
    def render_list (self, items) :
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    92
        return (
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    93
            html.li(class_=('odd' if idx % 2 else 'even'))(item) for idx, item in enumerate(items)
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    94
        )
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    95
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    96
    def render_rrd (self, rrd) :
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    97
        """
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    98
            Render overview link/image for given rrd.
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    99
        """
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   100
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   101
        target_url = self.url(Target, tree=self.tree, target=rrd)
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   102
        graph_url = self.url(Graph, tree=self.tree, target=rrd)
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   103
        
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   104
        return html.a(href=target_url)(
153
8930f54b59b4 pvl.verkko.rrd: --rrd is required; fix overview rrd name layout
Tero Marttila <terom@paivola.fi>
parents: 152
diff changeset
   105
                html.h3(rrd),
152
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   106
                html.img(src=graph_url),
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   107
        )
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   108
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   109
    def render (self) :
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   110
        """
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   111
            Render list of trees/rrds.
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   112
        """
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   113
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   114
        trees, rrds = self.app.rrd.list(self.tree)
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   115
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   116
        return self.render_breadcrumb(self.tree), html.div(id='overview')(
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   117
                html.ul(id='tree-list')(
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   118
                    self.render_list(
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   119
                        html.a(href=self.url_tree(subtree))(subtree)
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   120
                    for subtree in trees)
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   121
                ) if trees else None,
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   122
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   123
                html.hr() if trees and rrds else None,
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   124
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   125
                html.ul(id='rrd-list')(
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   126
                    self.render_list(
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   127
                        self.render_rrd(rrd)
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   128
                    for rrd in rrds)
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   129
                ) if rrds else None,
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   130
        )
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   131
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   132
class Target (Handler) :
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   133
    """
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   134
        Show graphs for RRD file.
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   135
    """
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   136
    
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   137
    def _title (self) :
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   138
        return html(" &raquo; ".join(self.rrd.split('/')))
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   139
        
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   140
    def process (self, target, tree=None) :
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   141
        """
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   142
            Lookup tree/target -> self.target
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   143
        """
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   144
        
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   145
        try :
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   146
            self.tree = self.app.rrd.tree(tree)
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   147
            self.rrd = self.app.rrd.rrd(target, self.tree)
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   148
            self.target = target
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   149
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   150
        except ValueError as ex :
157
2cc65177260c pvl.verkko.rrd: fix NotFound path
Tero Marttila <terom@paivola.fi>
parents: 156
diff changeset
   151
            raise web.NotFound(tree + '/' + target)
152
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   152
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   153
    def render_interval (self, interval, style='detail') :
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   154
        """
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   155
            Render detail link/image.
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   156
        """
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   157
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   158
        graph_url = self.url(Graph, tree=self.tree, target=self.target, style=style, interval=interval)
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   159
        
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   160
        return (
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   161
                html.h2(interval.title()),
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   162
                html.img(src=graph_url)
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   163
        )
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   164
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   165
    INTERVALS = ('daily', 'weekly', 'yearly')
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   166
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   167
    def render (self) :
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   168
        return self.render_breadcrumb(self.tree, self.target), html.div(id='detail')(
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   169
                self.render_interval(interval) for interval in self.INTERVALS
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   170
        )
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   171
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   172
from pvl.invoke import merge # XXX
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   173
import werkzeug # wrap_file
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   174
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   175
class Graph (Handler) :
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   176
    """
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   177
        Render graph for RRD.
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   178
    """
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   179
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   180
    ARGS = { 'interval': 'daily', 'style': 'overview' }
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   181
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   182
    def process (self, tree, target, style, interval) :
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   183
        """
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   184
            Return Graph for given options.
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   185
        """
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   186
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   187
        try :
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   188
            self.tree = self.app.rrd.tree(tree)
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   189
            self.rrd = self.app.rrd.rrd(target, self.tree)
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   190
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   191
        except ValueError as ex :
156
999ae3e9fdec pvl.web.rrd: split out pvl.rrd.args + pvl.rrd.rrds; bugfix
Tero Marttila <terom@paivola.fi>
parents: 155
diff changeset
   192
            raise web.NotFound(tree + '/' + target)
152
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   193
        
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   194
        self.style = style
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   195
        self.interval = interval
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   196
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   197
    def render_png (self) :
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   198
        """
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   199
            Return PNG data as a file-like object for our graph.
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   200
        """
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   201
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   202
        return self.app.rrd.graph(self.rrd, self.style, self.interval)
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   203
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   204
    def respond (self) :
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   205
        """
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   206
            Return Response for our request.
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   207
        """
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   208
        
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   209
        # process params+args -> self.graph
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   210
        process = merge(self.params, dict((arg, self.request.args.get(arg, default)) for arg, default in self.ARGS.iteritems()))
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   211
        response = self.process(**process)
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   212
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   213
        if response :
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   214
            return response
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   215
        
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   216
        # PNG output
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   217
        render = self.render_png()
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   218
        file = werkzeug.wrap_file(self.request.environ, render)
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   219
        
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   220
        # respond with file wrapper
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   221
        return web.Response(file, mimetype='image/png', direct_passthrough=True)        
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   222
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   223
# WSGI
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   224
class Application (web.Application) :
156
999ae3e9fdec pvl.web.rrd: split out pvl.rrd.args + pvl.rrd.rrds; bugfix
Tero Marttila <terom@paivola.fi>
parents: 155
diff changeset
   225
    # dispatch
152
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   226
    urls = urls.Map((
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   227
        urls.rule('/',                              Index),
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   228
        urls.rule('/<target>',                      Target),
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   229
        urls.rule('/<path:tree>/',                  Index),
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   230
        urls.rule('/<path:tree>/<target>',          Target),
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   231
        urls.rule('/<path:tree>/<target>.png',      Graph),
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   232
    ))
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   233
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   234
    def __init__ (self, rrd) :
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   235
        """
156
999ae3e9fdec pvl.web.rrd: split out pvl.rrd.args + pvl.rrd.rrds; bugfix
Tero Marttila <terom@paivola.fi>
parents: 155
diff changeset
   236
            rrd     - pvl.rrd.RRDDatabase
152
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   237
        """
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   238
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   239
        self.rrd = rrd
33b98b46d8fb pvl.verkko.rrd: reimplementation of old rrdweb using pvl.web/rrd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   240