rrdweb/rrd.py
author Tero Marttila <terom@fixme.fi>
Tue, 25 Jan 2011 01:28:06 +0200
changeset 32 47e977c23ba2
parent 29 c756e522c9ac
permissions -rw-r--r--
implement rendering of pmacct rrd graphs, and a dir/top.png feature
1
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     1
"""
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     2
    Friendly wrapper around the rrdtool python interface
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     3
"""
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     4
29
c756e522c9ac pmacct: load pmacct data to rrd
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
     5
import rrdtool
c756e522c9ac pmacct: load pmacct data to rrd
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
     6
32
47e977c23ba2 implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents: 29
diff changeset
     7
import tempfile
29
c756e522c9ac pmacct: load pmacct data to rrd
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
     8
import logging
32
47e977c23ba2 implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents: 29
diff changeset
     9
import os
29
c756e522c9ac pmacct: load pmacct data to rrd
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
    10
c756e522c9ac pmacct: load pmacct data to rrd
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
    11
log = logging.getLogger('rrdweb.rrd')
c756e522c9ac pmacct: load pmacct data to rrd
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
    12
1
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    13
def normalize_option_key (key) :
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    14
    """
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    15
        Normalize the given option key.
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    16
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    17
        A -- is prepended, and _'s are converted to -
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    18
    """
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    19
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    20
    return '--' + str(key).replace('_', '-')
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    21
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    22
def normalize_option_multi (key, values) :
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    23
    """
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    24
        Normalize a list of option values, returning a series of --opt, val1, --opt, val2, ...
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    25
    """
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    26
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    27
    for value in values :
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    28
        yield key
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    29
        yield str(value)
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    30
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    31
def normalize_option (key, value) :
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    32
    """
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    33
        Normalize the given option to a series of cmd-args.
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    34
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    35
        If value is None or False, no cmd-args are emitted. If value is True, only --opt is emitted. If value is a list,
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    36
        --opt and value are emitted for each item.
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    37
        
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    38
        Otherwise, both --opt and str(value) are emitted.
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    39
    """
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    40
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    41
    key = normalize_option_key(key)
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    42
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    43
    if value is None or value is False :
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    44
        # omit
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    45
        return ()
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    46
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    47
    elif value is True :
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    48
        # flag
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    49
        return (key, )
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    50
    
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    51
    elif isinstance(value, list) :
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    52
        # list of option values
29
c756e522c9ac pmacct: load pmacct data to rrd
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
    53
        return tuple(normalize_option_multi(key, value))
1
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    54
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    55
    else :
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    56
        # option value
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    57
        return (key, str(value))
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    58
5
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents: 1
diff changeset
    59
def merge_opts (*all_opts) :
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents: 1
diff changeset
    60
    """
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents: 1
diff changeset
    61
        Merge the given series of opt dicts
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents: 1
diff changeset
    62
    """
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents: 1
diff changeset
    63
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents: 1
diff changeset
    64
    out = dict()
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents: 1
diff changeset
    65
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents: 1
diff changeset
    66
    for opts in all_opts :
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents: 1
diff changeset
    67
        # XXX: not strictly true, merge lists
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents: 1
diff changeset
    68
        out.update(opts)
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents: 1
diff changeset
    69
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents: 1
diff changeset
    70
    return out
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents: 1
diff changeset
    71
1
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    72
def run_cmd (func, pre_args, opts, post_args) :
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    73
    """
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    74
        Run the given rrdtool.* function, formatting the given positional arguments and options.
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    75
    """
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    76
    
29
c756e522c9ac pmacct: load pmacct data to rrd
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
    77
    # series of (cmd-arg, cmd-arg, ...) tuples, giving all '--opt' and 'value' arguments for each keyword argument
1
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    78
    opt_items = (normalize_option(key, value) for key, value in opts.iteritems())
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    79
29
c756e522c9ac pmacct: load pmacct data to rrd
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
    80
    # decomposed series of cmd-args for options
1
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    81
    opt_args = [item for items in opt_items for item in items]
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    82
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    83
    # positional arguments
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    84
    pre_args = [str(arg) for arg in pre_args]
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    85
    post_args = [str(arg) for arg in post_args]
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    86
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    87
    # full arguments
29
c756e522c9ac pmacct: load pmacct data to rrd
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
    88
    args = pre_args + opt_args + ['--'] + post_args
c756e522c9ac pmacct: load pmacct data to rrd
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
    89
c756e522c9ac pmacct: load pmacct data to rrd
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
    90
    log.debug('rrdtool %s %s', func.__name__, args)
1
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    91
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    92
    return func(*args)
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    93
32
47e977c23ba2 implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents: 29
diff changeset
    94
def graph (out, *args, **opts) :
29
c756e522c9ac pmacct: load pmacct data to rrd
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
    95
    """
32
47e977c23ba2 implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents: 29
diff changeset
    96
        Render a graph image and/or print a report from data stored in one or several RRDs.
29
c756e522c9ac pmacct: load pmacct data to rrd
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
    97
32
47e977c23ba2 implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents: 29
diff changeset
    98
        If the output path is given, the graph data is written to the given file, otherwise a temporary file is
47e977c23ba2 implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents: 29
diff changeset
    99
        created. The resulting output file is returned as an opened file object, ready to read() the graph data.
29
c756e522c9ac pmacct: load pmacct data to rrd
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
   100
32
47e977c23ba2 implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents: 29
diff changeset
   101
        In the temporary file case, the returned file is unlinked before being returned.
47e977c23ba2 implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents: 29
diff changeset
   102
47e977c23ba2 implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents: 29
diff changeset
   103
        If out is explicitly given as False, no graph output is generated, and graph_file is returned as None.
47e977c23ba2 implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents: 29
diff changeset
   104
47e977c23ba2 implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents: 29
diff changeset
   105
        Returns a (width, height, [ report output lines ], graph_file) tuple.
29
c756e522c9ac pmacct: load pmacct data to rrd
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
   106
    """
32
47e977c23ba2 implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents: 29
diff changeset
   107
    
47e977c23ba2 implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents: 29
diff changeset
   108
    # open/tempfile
47e977c23ba2 implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents: 29
diff changeset
   109
    if out is None :
47e977c23ba2 implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents: 29
diff changeset
   110
        # tempfile
47e977c23ba2 implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents: 29
diff changeset
   111
        tmp_fd, out_path = tempfile.mkstemp('.png')
29
c756e522c9ac pmacct: load pmacct data to rrd
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
   112
32
47e977c23ba2 implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents: 29
diff changeset
   113
        # disregard the tmp_fd, we re-open the file after it's been written out
47e977c23ba2 implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents: 29
diff changeset
   114
        os.close(tmp_fd)
47e977c23ba2 implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents: 29
diff changeset
   115
        
47e977c23ba2 implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents: 29
diff changeset
   116
    elif out is False :
47e977c23ba2 implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents: 29
diff changeset
   117
        # no output
47e977c23ba2 implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents: 29
diff changeset
   118
        tmp_fd = None
47e977c23ba2 implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents: 29
diff changeset
   119
        out_path = ''
47e977c23ba2 implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents: 29
diff changeset
   120
47e977c23ba2 implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents: 29
diff changeset
   121
    else :
47e977c23ba2 implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents: 29
diff changeset
   122
        # direct output
47e977c23ba2 implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents: 29
diff changeset
   123
        tmp_fd = None
47e977c23ba2 implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents: 29
diff changeset
   124
        out_path = out
47e977c23ba2 implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents: 29
diff changeset
   125
    
47e977c23ba2 implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents: 29
diff changeset
   126
    # render
47e977c23ba2 implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents: 29
diff changeset
   127
    try :
47e977c23ba2 implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents: 29
diff changeset
   128
        # invoke
47e977c23ba2 implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents: 29
diff changeset
   129
        width, height, output = run_cmd(rrdtool.graph, (out_path, ), opts, args)
47e977c23ba2 implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents: 29
diff changeset
   130
        
47e977c23ba2 implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents: 29
diff changeset
   131
        # return resulting file
47e977c23ba2 implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents: 29
diff changeset
   132
        if out_path :
47e977c23ba2 implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents: 29
diff changeset
   133
            out_file = open(out_path, 'r')
47e977c23ba2 implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents: 29
diff changeset
   134
47e977c23ba2 implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents: 29
diff changeset
   135
        else :
47e977c23ba2 implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents: 29
diff changeset
   136
            # no graph output
47e977c23ba2 implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents: 29
diff changeset
   137
            out_file = None
47e977c23ba2 implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents: 29
diff changeset
   138
47e977c23ba2 implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents: 29
diff changeset
   139
        return width, height, output, out_file
47e977c23ba2 implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents: 29
diff changeset
   140
47e977c23ba2 implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents: 29
diff changeset
   141
    finally :
47e977c23ba2 implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents: 29
diff changeset
   142
        if tmp_fd :
47e977c23ba2 implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents: 29
diff changeset
   143
            # cleanup tempfile
47e977c23ba2 implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents: 29
diff changeset
   144
            # XXX: definately not portable to windows
47e977c23ba2 implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents: 29
diff changeset
   145
            os.unlink(out_path)
1
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   146
29
c756e522c9ac pmacct: load pmacct data to rrd
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
   147
def create (rrd_path, *args, **opts) :
c756e522c9ac pmacct: load pmacct data to rrd
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
   148
    """
c756e522c9ac pmacct: load pmacct data to rrd
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
   149
        Set up a new Round Robin Database (RRD).
c756e522c9ac pmacct: load pmacct data to rrd
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
   150
    """
c756e522c9ac pmacct: load pmacct data to rrd
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
   151
c756e522c9ac pmacct: load pmacct data to rrd
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
   152
    return run_cmd(rrdtool.create, (rrd_path, ), opts, args)
c756e522c9ac pmacct: load pmacct data to rrd
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
   153
c756e522c9ac pmacct: load pmacct data to rrd
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
   154
def update (rrd_path, *args, **opts) :
c756e522c9ac pmacct: load pmacct data to rrd
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
   155
    """
c756e522c9ac pmacct: load pmacct data to rrd
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
   156
        Store new data values into an RRD.
c756e522c9ac pmacct: load pmacct data to rrd
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
   157
    """
c756e522c9ac pmacct: load pmacct data to rrd
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
   158
c756e522c9ac pmacct: load pmacct data to rrd
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
   159
    return run_cmd(rrdtool.update, (rrd_path, ), opts, args)
c756e522c9ac pmacct: load pmacct data to rrd
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
   160
c756e522c9ac pmacct: load pmacct data to rrd
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
   161
c756e522c9ac pmacct: load pmacct data to rrd
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
   162