bin/rrdweb
author Tero Marttila <terom@fixme.fi>
Tue, 02 Nov 2010 05:36:16 +0200
changeset 25 9fa9d881fd87
parent 20 86bbabd10ff6
permissions -rwxr-xr-x
Merge with previous bin/rrdweb development, and fix up merge bugs
12
baf5d3537484 rework etc/generate.py -> bin/rrdweb, just use target names...
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
     1
#!/usr/bin/env python
5
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     2
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     3
import os.path, fnmatch
12
baf5d3537484 rework etc/generate.py -> bin/rrdweb, just use target names...
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
     4
import optparse, logging
5
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     5
12
baf5d3537484 rework etc/generate.py -> bin/rrdweb, just use target names...
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
     6
from rrdweb import graph, html
baf5d3537484 rework etc/generate.py -> bin/rrdweb, just use target names...
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
     7
baf5d3537484 rework etc/generate.py -> bin/rrdweb, just use target names...
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
     8
baf5d3537484 rework etc/generate.py -> bin/rrdweb, just use target names...
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
     9
def parse_args (args) :
baf5d3537484 rework etc/generate.py -> bin/rrdweb, just use target names...
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
    10
    global options
baf5d3537484 rework etc/generate.py -> bin/rrdweb, just use target names...
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
    11
baf5d3537484 rework etc/generate.py -> bin/rrdweb, just use target names...
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
    12
    parser = optparse.OptionParser(
baf5d3537484 rework etc/generate.py -> bin/rrdweb, just use target names...
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
    13
        usage   = "%prog [options] <target> [...]"
baf5d3537484 rework etc/generate.py -> bin/rrdweb, just use target names...
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
    14
    )
14
bfa9a0e11382 add -q/-v/-D args, generate_target, urljoin
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
    15
    
bfa9a0e11382 add -q/-v/-D args, generate_target, urljoin
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
    16
    # generic
bfa9a0e11382 add -q/-v/-D args, generate_target, urljoin
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
    17
    parser.add_option('-q', "--quiet", help="No output in normal operation",
bfa9a0e11382 add -q/-v/-D args, generate_target, urljoin
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
    18
        action='store_const', dest="loglvl", const=logging.WARNING,
bfa9a0e11382 add -q/-v/-D args, generate_target, urljoin
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
    19
    )
bfa9a0e11382 add -q/-v/-D args, generate_target, urljoin
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
    20
    parser.add_option('-v', "--verbose", help="More output",
bfa9a0e11382 add -q/-v/-D args, generate_target, urljoin
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
    21
        action='store_const', dest="loglvl", const=logging.INFO,
bfa9a0e11382 add -q/-v/-D args, generate_target, urljoin
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
    22
    )
bfa9a0e11382 add -q/-v/-D args, generate_target, urljoin
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
    23
    parser.add_option('-D', "--debug", help="Even more output",
bfa9a0e11382 add -q/-v/-D args, generate_target, urljoin
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
    24
        action='store_const', dest="loglvl", const=logging.DEBUG,
bfa9a0e11382 add -q/-v/-D args, generate_target, urljoin
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
    25
    )
18
eaf06ae5df16 add --rrd-type, and trees of targets
Tero Marttila <terom@fixme.fi>
parents: 14
diff changeset
    26
eaf06ae5df16 add --rrd-type, and trees of targets
Tero Marttila <terom@fixme.fi>
parents: 14
diff changeset
    27
    # options
eaf06ae5df16 add --rrd-type, and trees of targets
Tero Marttila <terom@fixme.fi>
parents: 14
diff changeset
    28
    parser.add_option(      "--rrd-type", default="mrtg", help="RRD style to use: mrtg, collectd_ifoctets")
14
bfa9a0e11382 add -q/-v/-D args, generate_target, urljoin
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
    29
    
bfa9a0e11382 add -q/-v/-D args, generate_target, urljoin
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
    30
    # paths
12
baf5d3537484 rework etc/generate.py -> bin/rrdweb, just use target names...
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
    31
    parser.add_option('-R', "--rrd-dir", default="rrd", help="Path to directory containing .rrd files")
baf5d3537484 rework etc/generate.py -> bin/rrdweb, just use target names...
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
    32
    parser.add_option('-I', "--img-dir", default="img", help="Path to directory containing .png files")
baf5d3537484 rework etc/generate.py -> bin/rrdweb, just use target names...
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
    33
    parser.add_option('-W', "--web-dir", default="web", help="Path to directory containing .html files")
baf5d3537484 rework etc/generate.py -> bin/rrdweb, just use target names...
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
    34
    parser.add_option('-T', "--tpl-dir", default="templates", help="Path to directory containing .html templates files")
14
bfa9a0e11382 add -q/-v/-D args, generate_target, urljoin
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
    35
bfa9a0e11382 add -q/-v/-D args, generate_target, urljoin
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
    36
    # urls
12
baf5d3537484 rework etc/generate.py -> bin/rrdweb, just use target names...
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
    37
    parser.add_option('-P', "--url-prefix", default="", help="Prefix for URLs")
baf5d3537484 rework etc/generate.py -> bin/rrdweb, just use target names...
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
    38
    parser.add_option(      "--img-url", default="img", help="URL to directory containing .png files")
baf5d3537484 rework etc/generate.py -> bin/rrdweb, just use target names...
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
    39
    parser.add_option(      "--web-url", default="web", help="URL to directory containing .html files")
baf5d3537484 rework etc/generate.py -> bin/rrdweb, just use target names...
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
    40
    
14
bfa9a0e11382 add -q/-v/-D args, generate_target, urljoin
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
    41
    # defaults
bfa9a0e11382 add -q/-v/-D args, generate_target, urljoin
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
    42
    parser.set_defaults(
bfa9a0e11382 add -q/-v/-D args, generate_target, urljoin
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
    43
        loglvl      = logging.INFO,
bfa9a0e11382 add -q/-v/-D args, generate_target, urljoin
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
    44
    )
bfa9a0e11382 add -q/-v/-D args, generate_target, urljoin
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
    45
    
bfa9a0e11382 add -q/-v/-D args, generate_target, urljoin
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
    46
    ## parse
12
baf5d3537484 rework etc/generate.py -> bin/rrdweb, just use target names...
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
    47
    options, targets = parser.parse_args(args)
baf5d3537484 rework etc/generate.py -> bin/rrdweb, just use target names...
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
    48
    
14
bfa9a0e11382 add -q/-v/-D args, generate_target, urljoin
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
    49
bfa9a0e11382 add -q/-v/-D args, generate_target, urljoin
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
    50
    ## apply
bfa9a0e11382 add -q/-v/-D args, generate_target, urljoin
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
    51
    logging.basicConfig(
bfa9a0e11382 add -q/-v/-D args, generate_target, urljoin
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
    52
        format      = "[%(levelname)8s] %(funcName)20s : %(message)s",
bfa9a0e11382 add -q/-v/-D args, generate_target, urljoin
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
    53
        level       = options.loglvl,
bfa9a0e11382 add -q/-v/-D args, generate_target, urljoin
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
    54
    )
bfa9a0e11382 add -q/-v/-D args, generate_target, urljoin
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
    55
    
12
baf5d3537484 rework etc/generate.py -> bin/rrdweb, just use target names...
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
    56
    return targets
baf5d3537484 rework etc/generate.py -> bin/rrdweb, just use target names...
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
    57
14
bfa9a0e11382 add -q/-v/-D args, generate_target, urljoin
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
    58
bfa9a0e11382 add -q/-v/-D args, generate_target, urljoin
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
    59
def scan_targets () :
bfa9a0e11382 add -q/-v/-D args, generate_target, urljoin
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
    60
    """
bfa9a0e11382 add -q/-v/-D args, generate_target, urljoin
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
    61
        Scan for targets from rrd_dir
bfa9a0e11382 add -q/-v/-D args, generate_target, urljoin
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
    62
    """
18
eaf06ae5df16 add --rrd-type, and trees of targets
Tero Marttila <terom@fixme.fi>
parents: 14
diff changeset
    63
    
eaf06ae5df16 add --rrd-type, and trees of targets
Tero Marttila <terom@fixme.fi>
parents: 14
diff changeset
    64
    # root dir for searching
eaf06ae5df16 add --rrd-type, and trees of targets
Tero Marttila <terom@fixme.fi>
parents: 14
diff changeset
    65
    rrd_dir = options.rrd_dir
eaf06ae5df16 add --rrd-type, and trees of targets
Tero Marttila <terom@fixme.fi>
parents: 14
diff changeset
    66
    
eaf06ae5df16 add --rrd-type, and trees of targets
Tero Marttila <terom@fixme.fi>
parents: 14
diff changeset
    67
    # recurse
eaf06ae5df16 add --rrd-type, and trees of targets
Tero Marttila <terom@fixme.fi>
parents: 14
diff changeset
    68
    for dirpath, dirs, files in os.walk(rrd_dir) :
eaf06ae5df16 add --rrd-type, and trees of targets
Tero Marttila <terom@fixme.fi>
parents: 14
diff changeset
    69
        for name in files :
eaf06ae5df16 add --rrd-type, and trees of targets
Tero Marttila <terom@fixme.fi>
parents: 14
diff changeset
    70
            # full path
eaf06ae5df16 add --rrd-type, and trees of targets
Tero Marttila <terom@fixme.fi>
parents: 14
diff changeset
    71
            path = os.path.join(dirpath, name)
14
bfa9a0e11382 add -q/-v/-D args, generate_target, urljoin
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
    72
18
eaf06ae5df16 add --rrd-type, and trees of targets
Tero Marttila <terom@fixme.fi>
parents: 14
diff changeset
    73
            # relative path from rrd_dir
eaf06ae5df16 add --rrd-type, and trees of targets
Tero Marttila <terom@fixme.fi>
parents: 14
diff changeset
    74
            relpath = path[len(os.path.commonprefix([rrd_dir, path])):]
14
bfa9a0e11382 add -q/-v/-D args, generate_target, urljoin
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
    75
18
eaf06ae5df16 add --rrd-type, and trees of targets
Tero Marttila <terom@fixme.fi>
parents: 14
diff changeset
    76
            # skip dotfiles
eaf06ae5df16 add --rrd-type, and trees of targets
Tero Marttila <terom@fixme.fi>
parents: 14
diff changeset
    77
            if name.startswith('.') :
eaf06ae5df16 add --rrd-type, and trees of targets
Tero Marttila <terom@fixme.fi>
parents: 14
diff changeset
    78
                continue
eaf06ae5df16 add --rrd-type, and trees of targets
Tero Marttila <terom@fixme.fi>
parents: 14
diff changeset
    79
            
eaf06ae5df16 add --rrd-type, and trees of targets
Tero Marttila <terom@fixme.fi>
parents: 14
diff changeset
    80
            # foo/bar, .rrd
eaf06ae5df16 add --rrd-type, and trees of targets
Tero Marttila <terom@fixme.fi>
parents: 14
diff changeset
    81
            target, ext = os.path.splitext(relpath)
eaf06ae5df16 add --rrd-type, and trees of targets
Tero Marttila <terom@fixme.fi>
parents: 14
diff changeset
    82
            
eaf06ae5df16 add --rrd-type, and trees of targets
Tero Marttila <terom@fixme.fi>
parents: 14
diff changeset
    83
            if ext.lower() == '.rrd' :
eaf06ae5df16 add --rrd-type, and trees of targets
Tero Marttila <terom@fixme.fi>
parents: 14
diff changeset
    84
                # as target name
eaf06ae5df16 add --rrd-type, and trees of targets
Tero Marttila <terom@fixme.fi>
parents: 14
diff changeset
    85
                yield target
14
bfa9a0e11382 add -q/-v/-D args, generate_target, urljoin
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
    86
bfa9a0e11382 add -q/-v/-D args, generate_target, urljoin
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
    87
12
baf5d3537484 rework etc/generate.py -> bin/rrdweb, just use target names...
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
    88
18
eaf06ae5df16 add --rrd-type, and trees of targets
Tero Marttila <terom@fixme.fi>
parents: 14
diff changeset
    89
def check_output_file (path) :
eaf06ae5df16 add --rrd-type, and trees of targets
Tero Marttila <terom@fixme.fi>
parents: 14
diff changeset
    90
    """
eaf06ae5df16 add --rrd-type, and trees of targets
Tero Marttila <terom@fixme.fi>
parents: 14
diff changeset
    91
        Create the directory for the given output path if missing
eaf06ae5df16 add --rrd-type, and trees of targets
Tero Marttila <terom@fixme.fi>
parents: 14
diff changeset
    92
    """
eaf06ae5df16 add --rrd-type, and trees of targets
Tero Marttila <terom@fixme.fi>
parents: 14
diff changeset
    93
    
eaf06ae5df16 add --rrd-type, and trees of targets
Tero Marttila <terom@fixme.fi>
parents: 14
diff changeset
    94
    dir, file = os.path.split(path)
12
baf5d3537484 rework etc/generate.py -> bin/rrdweb, just use target names...
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
    95
18
eaf06ae5df16 add --rrd-type, and trees of targets
Tero Marttila <terom@fixme.fi>
parents: 14
diff changeset
    96
    if not os.path.exists(dir) :
eaf06ae5df16 add --rrd-type, and trees of targets
Tero Marttila <terom@fixme.fi>
parents: 14
diff changeset
    97
        logging.warn("Create directory for output file %s: %s", file, dir)
12
baf5d3537484 rework etc/generate.py -> bin/rrdweb, just use target names...
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
    98
18
eaf06ae5df16 add --rrd-type, and trees of targets
Tero Marttila <terom@fixme.fi>
parents: 14
diff changeset
    99
        os.makedirs(dir)
14
bfa9a0e11382 add -q/-v/-D args, generate_target, urljoin
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   100
5
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   101
def target_graph (target, style, interval) : 
12
baf5d3537484 rework etc/generate.py -> bin/rrdweb, just use target names...
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
   102
    """
baf5d3537484 rework etc/generate.py -> bin/rrdweb, just use target names...
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
   103
        Generate .rrd -> .png for given target
baf5d3537484 rework etc/generate.py -> bin/rrdweb, just use target names...
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
   104
    """
baf5d3537484 rework etc/generate.py -> bin/rrdweb, just use target names...
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
   105
baf5d3537484 rework etc/generate.py -> bin/rrdweb, just use target names...
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
   106
    # XXX: title..
baf5d3537484 rework etc/generate.py -> bin/rrdweb, just use target names...
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
   107
    title = target
baf5d3537484 rework etc/generate.py -> bin/rrdweb, just use target names...
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
   108
5
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   109
    # compose paths
12
baf5d3537484 rework etc/generate.py -> bin/rrdweb, just use target names...
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
   110
    rrd_path = os.path.join(options.rrd_dir, target) + '.rrd'
baf5d3537484 rework etc/generate.py -> bin/rrdweb, just use target names...
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
   111
    out_path = os.path.join(options.img_dir, style, interval, target) + '.png'
5
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   112
18
eaf06ae5df16 add --rrd-type, and trees of targets
Tero Marttila <terom@fixme.fi>
parents: 14
diff changeset
   113
    # create out path if not exists
eaf06ae5df16 add --rrd-type, and trees of targets
Tero Marttila <terom@fixme.fi>
parents: 14
diff changeset
   114
    check_output_file(out_path)
eaf06ae5df16 add --rrd-type, and trees of targets
Tero Marttila <terom@fixme.fi>
parents: 14
diff changeset
   115
14
bfa9a0e11382 add -q/-v/-D args, generate_target, urljoin
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   116
    logging.debug("%s: %s -> %s", target, rrd_path, out_path)
18
eaf06ae5df16 add --rrd-type, and trees of targets
Tero Marttila <terom@fixme.fi>
parents: 14
diff changeset
   117
    
eaf06ae5df16 add --rrd-type, and trees of targets
Tero Marttila <terom@fixme.fi>
parents: 14
diff changeset
   118
    # graph function to use
eaf06ae5df16 add --rrd-type, and trees of targets
Tero Marttila <terom@fixme.fi>
parents: 14
diff changeset
   119
    graph_func = getattr(graph, options.rrd_type)
14
bfa9a0e11382 add -q/-v/-D args, generate_target, urljoin
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   120
5
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   121
    # graph
18
eaf06ae5df16 add --rrd-type, and trees of targets
Tero Marttila <terom@fixme.fi>
parents: 14
diff changeset
   122
    graph_func(style, interval, title, rrd_path, out_path)
5
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   123
14
bfa9a0e11382 add -q/-v/-D args, generate_target, urljoin
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   124
12
baf5d3537484 rework etc/generate.py -> bin/rrdweb, just use target names...
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
   125
def target_html (target, formatter) :
baf5d3537484 rework etc/generate.py -> bin/rrdweb, just use target names...
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
   126
    """
baf5d3537484 rework etc/generate.py -> bin/rrdweb, just use target names...
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
   127
        Generate .html for given target
baf5d3537484 rework etc/generate.py -> bin/rrdweb, just use target names...
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
   128
    """
5
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   129
12
baf5d3537484 rework etc/generate.py -> bin/rrdweb, just use target names...
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
   130
    # XXX: title..
baf5d3537484 rework etc/generate.py -> bin/rrdweb, just use target names...
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
   131
    title = target
baf5d3537484 rework etc/generate.py -> bin/rrdweb, just use target names...
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
   132
    
baf5d3537484 rework etc/generate.py -> bin/rrdweb, just use target names...
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
   133
    # build paths
baf5d3537484 rework etc/generate.py -> bin/rrdweb, just use target names...
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
   134
    html_path = os.path.join(options.web_dir, target + '.html')
18
eaf06ae5df16 add --rrd-type, and trees of targets
Tero Marttila <terom@fixme.fi>
parents: 14
diff changeset
   135
    
eaf06ae5df16 add --rrd-type, and trees of targets
Tero Marttila <terom@fixme.fi>
parents: 14
diff changeset
   136
    # create out path if not exists
eaf06ae5df16 add --rrd-type, and trees of targets
Tero Marttila <terom@fixme.fi>
parents: 14
diff changeset
   137
    check_output_file(html_path)
14
bfa9a0e11382 add -q/-v/-D args, generate_target, urljoin
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   138
bfa9a0e11382 add -q/-v/-D args, generate_target, urljoin
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   139
    logging.debug("%s: %s", target, html_path)
12
baf5d3537484 rework etc/generate.py -> bin/rrdweb, just use target names...
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
   140
    
baf5d3537484 rework etc/generate.py -> bin/rrdweb, just use target names...
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
   141
    # render
25
9fa9d881fd87 Merge with previous bin/rrdweb development, and fix up merge bugs
Tero Marttila <terom@fixme.fi>
parents: 20
diff changeset
   142
    open(html_path, 'w').write(formatter.target(target, title).encode('utf-8'))
12
baf5d3537484 rework etc/generate.py -> bin/rrdweb, just use target names...
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
   143
baf5d3537484 rework etc/generate.py -> bin/rrdweb, just use target names...
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
   144
def overview_html (targets, formatter) :
baf5d3537484 rework etc/generate.py -> bin/rrdweb, just use target names...
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
   145
    """
baf5d3537484 rework etc/generate.py -> bin/rrdweb, just use target names...
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
   146
        Generate .html index
baf5d3537484 rework etc/generate.py -> bin/rrdweb, just use target names...
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
   147
    """
baf5d3537484 rework etc/generate.py -> bin/rrdweb, just use target names...
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
   148
    
baf5d3537484 rework etc/generate.py -> bin/rrdweb, just use target names...
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
   149
    # paths
baf5d3537484 rework etc/generate.py -> bin/rrdweb, just use target names...
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
   150
    overview_path = os.path.join(options.web_dir, "index.html")
14
bfa9a0e11382 add -q/-v/-D args, generate_target, urljoin
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   151
18
eaf06ae5df16 add --rrd-type, and trees of targets
Tero Marttila <terom@fixme.fi>
parents: 14
diff changeset
   152
    # create out path if not exists
eaf06ae5df16 add --rrd-type, and trees of targets
Tero Marttila <terom@fixme.fi>
parents: 14
diff changeset
   153
    check_output_file(overview_path)
eaf06ae5df16 add --rrd-type, and trees of targets
Tero Marttila <terom@fixme.fi>
parents: 14
diff changeset
   154
14
bfa9a0e11382 add -q/-v/-D args, generate_target, urljoin
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   155
    logging.debug("%s", overview_path)
12
baf5d3537484 rework etc/generate.py -> bin/rrdweb, just use target names...
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
   156
    
baf5d3537484 rework etc/generate.py -> bin/rrdweb, just use target names...
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
   157
    # as (target, title) pairs
25
9fa9d881fd87 Merge with previous bin/rrdweb development, and fix up merge bugs
Tero Marttila <terom@fixme.fi>
parents: 20
diff changeset
   158
    open(overview_path, 'w').write(formatter.overview('/', ((target, target) for target in targets)).encode('utf-8'))
12
baf5d3537484 rework etc/generate.py -> bin/rrdweb, just use target names...
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
   159
14
bfa9a0e11382 add -q/-v/-D args, generate_target, urljoin
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   160
bfa9a0e11382 add -q/-v/-D args, generate_target, urljoin
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   161
def generate_target (target, formatter) :
bfa9a0e11382 add -q/-v/-D args, generate_target, urljoin
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   162
    
bfa9a0e11382 add -q/-v/-D args, generate_target, urljoin
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   163
    # overview
bfa9a0e11382 add -q/-v/-D args, generate_target, urljoin
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   164
    target_graph(target, 'overview', 'daily')
bfa9a0e11382 add -q/-v/-D args, generate_target, urljoin
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   165
    
bfa9a0e11382 add -q/-v/-D args, generate_target, urljoin
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   166
    # details
bfa9a0e11382 add -q/-v/-D args, generate_target, urljoin
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   167
    for interval in ('daily', 'weekly', 'yearly') :
bfa9a0e11382 add -q/-v/-D args, generate_target, urljoin
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   168
        target_graph(target, 'detail', interval)
bfa9a0e11382 add -q/-v/-D args, generate_target, urljoin
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   169
bfa9a0e11382 add -q/-v/-D args, generate_target, urljoin
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   170
    # html for target
bfa9a0e11382 add -q/-v/-D args, generate_target, urljoin
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   171
    target_html(target, formatter)
bfa9a0e11382 add -q/-v/-D args, generate_target, urljoin
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   172
bfa9a0e11382 add -q/-v/-D args, generate_target, urljoin
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   173
12
baf5d3537484 rework etc/generate.py -> bin/rrdweb, just use target names...
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
   174
def generate (targets, filters=None):
14
bfa9a0e11382 add -q/-v/-D args, generate_target, urljoin
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   175
    if not targets :
bfa9a0e11382 add -q/-v/-D args, generate_target, urljoin
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   176
        # autodetect
20
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
   177
        targets = sorted(list(scan_targets()))
14
bfa9a0e11382 add -q/-v/-D args, generate_target, urljoin
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   178
        
bfa9a0e11382 add -q/-v/-D args, generate_target, urljoin
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   179
        logging.info("Autodetected %d targets", len(targets))
bfa9a0e11382 add -q/-v/-D args, generate_target, urljoin
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   180
5
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   181
    if filters :
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   182
        # filter targets
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   183
        targets = [target for target in targets if any(fnmatch.fnmatch(target.name, filter) for filter in filters)]
14
bfa9a0e11382 add -q/-v/-D args, generate_target, urljoin
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   184
    
12
baf5d3537484 rework etc/generate.py -> bin/rrdweb, just use target names...
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
   185
    logging.info("Updating %d targets", len(targets))
baf5d3537484 rework etc/generate.py -> bin/rrdweb, just use target names...
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
   186
5
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   187
    # overview
12
baf5d3537484 rework etc/generate.py -> bin/rrdweb, just use target names...
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
   188
    formatter = html.Formatter(
baf5d3537484 rework etc/generate.py -> bin/rrdweb, just use target names...
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
   189
        url_prefix      = options.url_prefix,
14
bfa9a0e11382 add -q/-v/-D args, generate_target, urljoin
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   190
        img_url         = html.urljoin(options.url_prefix, options.img_url, "%(style)s", "%(interval)s", "%(target)s.png"),
bfa9a0e11382 add -q/-v/-D args, generate_target, urljoin
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   191
        target_url      = html.urljoin(options.url_prefix, options.web_url, "%(target)s.html"),
5
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   192
    )
12
baf5d3537484 rework etc/generate.py -> bin/rrdweb, just use target names...
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
   193
    
baf5d3537484 rework etc/generate.py -> bin/rrdweb, just use target names...
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
   194
    # html for overview
baf5d3537484 rework etc/generate.py -> bin/rrdweb, just use target names...
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
   195
    overview_html(targets, formatter)
5
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   196
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   197
    for target in targets :
12
baf5d3537484 rework etc/generate.py -> bin/rrdweb, just use target names...
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
   198
        logging.info("Target: %s", target)
baf5d3537484 rework etc/generate.py -> bin/rrdweb, just use target names...
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
   199
        
14
bfa9a0e11382 add -q/-v/-D args, generate_target, urljoin
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   200
        # HTML and PNGs
bfa9a0e11382 add -q/-v/-D args, generate_target, urljoin
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   201
        generate_target(target, formatter)
12
baf5d3537484 rework etc/generate.py -> bin/rrdweb, just use target names...
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
   202
baf5d3537484 rework etc/generate.py -> bin/rrdweb, just use target names...
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
   203
def main (args) :
baf5d3537484 rework etc/generate.py -> bin/rrdweb, just use target names...
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
   204
    # parse args
baf5d3537484 rework etc/generate.py -> bin/rrdweb, just use target names...
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
   205
    targets = parse_args(args)
baf5d3537484 rework etc/generate.py -> bin/rrdweb, just use target names...
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
   206
    
baf5d3537484 rework etc/generate.py -> bin/rrdweb, just use target names...
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
   207
    # run
baf5d3537484 rework etc/generate.py -> bin/rrdweb, just use target names...
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
   208
    generate(targets)
5
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   209
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   210
if __name__ == '__main__' :
12
baf5d3537484 rework etc/generate.py -> bin/rrdweb, just use target names...
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
   211
    from sys import argv
5
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   212
12
baf5d3537484 rework etc/generate.py -> bin/rrdweb, just use target names...
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
   213
    main(argv[1:])
5
e716718482c3 hack hack hack some HTML output
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   214