rrdweb/rrd.py
author Tero Marttila <terom@fixme.fi>
Tue, 08 Dec 2009 20:41:16 +0200
changeset 5 e716718482c3
parent 1 18787b57ba46
child 19 58df27d54d2e
child 29 c756e522c9ac
permissions -rw-r--r--
hack hack hack some HTML output
1
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     1
import rrdtool
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     2
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
    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
     5
"""
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     6
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     7
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
     8
    """
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     9
        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
    10
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    11
        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
    12
    """
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    13
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    14
    return '--' + str(key).replace('_', '-')
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    15
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    16
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
    17
    """
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    18
        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
    19
    """
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    20
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    21
    for value in values :
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    22
        yield key
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    23
        yield str(value)
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    24
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    25
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
    26
    """
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    27
        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
    28
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    29
        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
    30
        --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
    31
        
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    32
        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
    33
    """
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
    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
    36
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    37
    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
    38
        # omit
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    39
        return ()
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
    elif value is True :
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    42
        # flag
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    43
        return (key, )
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    44
    
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    45
    elif isinstance(value, list) :
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    46
        # list of option values
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    47
        return normalize_option_multi(key, value)
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    48
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    49
    else :
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    50
        # option value
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    51
        return (key, str(value))
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    52
5
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents: 1
diff changeset
    53
def merge_opts (*all_opts) :
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents: 1
diff changeset
    54
    """
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents: 1
diff changeset
    55
        Merge the given series of opt dicts
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents: 1
diff changeset
    56
    """
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents: 1
diff changeset
    57
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents: 1
diff changeset
    58
    out = dict()
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents: 1
diff changeset
    59
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents: 1
diff changeset
    60
    for opts in all_opts :
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents: 1
diff changeset
    61
        # XXX: not strictly true, merge lists
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents: 1
diff changeset
    62
        out.update(opts)
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
    return out
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents: 1
diff changeset
    65
1
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    66
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
    67
    """
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    68
        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
    69
    """
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    70
    
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    71
    # series of (cmd-arg, cmd-arg, ...) tuples
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    72
    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
    73
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    74
    # decomposed series of cmd-args
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    75
    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
    76
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    77
    # positional arguments
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    78
    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
    79
    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
    80
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    81
    # full arguments
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    82
    args = pre_args + opt_args + post_args
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    83
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    84
    return func(*args)
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    85
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    86
def graph (out_path, *args, **opts) :
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    87
    return run_cmd(rrdtool.graph, (out_path, ), opts, args)
18787b57ba46 rrd module to wrap rrdtool, providing a nicer command argument style
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    88