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)
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)
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)