Example #1
0
def send_summary_graph(metric,start, end):
    """Sends summary graph."""
    probes_list = []
    if metric == 'energy':                                                     
        probes_list = flask.request.probes_power                                    
    elif metric == 'network':                                                  
        probes_list = flask.request.probes_network                                  
    else:                                                                      
        flask.abort(404) 
    probes = flask.request.args.get('probes')
    if probes:
        probes = probes.split(',')
        probes = [probe.encode('utf-8') for probe in probes]
        for probe in probes:
            if probe not in probes_list:
                flask.abort(404)
    else:
        probes = list(probes_list)
    start = start.encode('utf-8')
    end = end.encode('utf-8')
    png_file = live.build_graph(metric, int(start), int(end), probes, True)
    if not png_file:
        flask.abort(404)
    tmp_file = tempfile.NamedTemporaryFile()
    shutil.copy2(png_file, tmp_file.name)
    if not png_file.endswith('summary-'+metric+'.png'):
        os.unlink(png_file)
    try:
        return flask.send_file(tmp_file,
                               mimetype='image/png',
                               cache_timeout=0,
                               conditional=True)
    except:
        flask.abort(404)
Example #2
0
def send_probe_graph(metric, probe, start, end):
    """Sends graph."""
    probe = probe.encode('utf-8')
    start = start.encode('utf-8')
    end = end.encode('utf-8')
    png_file = live.build_graph(metric, int(start), int(end), probe, False)
    if not png_file:
        flask.abort(404)
    tmp_file = tempfile.NamedTemporaryFile()
    shutil.copy2(png_file, tmp_file.name)
    #os.unlink(png_file)
    #os.close(png_file)
    try:
        return flask.send_file(tmp_file, cache_timeout=0, conditional=True)
    except:
        flask.abort(404)
Example #3
0
def send_zip():
    """Sends zip file."""
    probes = flask.request.args.get('probes') 
    try:
        if probes:
            probes = probes.split(',')
        else:
            probes = []
        probes = [probe.encode('utf-8') for probe in probes]
    except:
        probes = []
    tmp_file = tempfile.NamedTemporaryFile(prefix="kwapi", suffix=".zip")
    zip_file = zipfile.ZipFile(tmp_file.name, 'w')
    metrics = ['power','network_in', 'network_out']
    scales = ['minute', 'hour', 'day', 'week', 'month', 'year']
    if len(probes) == 0:
        probes = flask.request.probes_network
    for metric in metrics:
        for probe in probes:
            try:
                rrd_files = live.get_rrds_from_name(probe, metric)
                for i in range(len(rrd_files)):
                    zip_file.write(rrd_files[i], '/rrd/%s_%s_%d.rrd' %(metric, probe.replace(".","-"), i))
                for scale in scales:
                    # FIXME: Hack to chose metric
                    if metric == "power":
                        png_file = live.build_graph("energy",
                                            int(time.time()) - flask.request.scales[scale][0]['interval'],
                                            int(time.time()),
                                            probe,
                                            summary=False,
                                            zip_file=True)
                        zip_file.write(png_file, '/png/%s_%s_%s.png' % (metric, probe, scale))
                        os.unlink(png_file)
                    elif metric == "network_in":
                        png_file = live.build_graph("network",
                                            int(time.time()) - flask.request.scales[scale][0]['interval'],
                                            int(time.time()),
                                            probe,
                                            summary=False,
                                            zip_file=True)
                        zip_file.write(png_file, '/png/%s_%s_%s.png' % ("network", probe, scale))
                        os.unlink(png_file)
                    else:
                        continue
            except:
                continue
    # Generate summary
    for scale in scales:
        try:
            png_file_energy = live.build_graph('energy',
                                               int(time.time()) - flask.request.scales[scale][0]['interval'],
                                               int(time.time()),
                                               probes,
                                               summary=True,
                                               zip_file=True)
            zip_file.write(png_file_energy, '/png/summary-energy-' + scale + '.png')
            os.unlink(png_file_energy)
        except:
            continue
    for scale in scales:
        try:
            png_file_network = live.build_graph('network',
                                                int(time.time()) - flask.request.scales[scale][0]['interval'],
                                                int(time.time()),
                                                probes,
                                                summary=True,
                                                zip_file=True)
            zip_file.write(png_file_network, '/png/summary-network-' + scale + '.png')
            os.unlink(png_file_network)
        except:
            continue
    return flask.send_file(tmp_file,
                           as_attachment=True,
                           attachment_filename='rrd.zip',
                           cache_timeout=0,
                           conditional=True)