/**
* Copyright (C) 2012-14 graphene developers. See COPYRIGHT.TXT
* All rights reserved. Use is subject to license terms. See LICENSE.TXT
*/
package org.epics.graphene.rrdtool;
import java.awt.image.BufferedImage;
import java.io.BufferedWriter;
import java.io.File;
import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.file.FileSystems;
import java.nio.file.Files;
import javax.imageio.ImageIO;
import org.epics.graphene.BubbleGraph2DRenderer;
import org.epics.graphene.Point3DWithLabelDataset;
import org.epics.util.time.Timestamp;
import org.epics.util.time.TimestampFormat;
/**
*
* @author carcassi
*/
public class BubbleUtil {
private static TimestampFormat format = new TimestampFormat("yyyy/MM/dd HH:mm:ss");
public static void createBubblePlot(String filename, final Point3DWithLabelDataset dataset, final String urlPrototype, String path, String signalX, String signalY, String signalZ, Timestamp time) throws IOException {
if (dataset.getXStatistics() == null) {
System.out.println("Found no valid data for x");
return;
}
if (dataset.getYStatistics() == null) {
System.out.println("Found no valid data for y");
return;
}
if (dataset.getZStatistics() == null) {
System.out.println("Found no valid data for size");
return;
}
BufferedImage image = new BufferedImage(800, 600, BufferedImage.TYPE_3BYTE_BGR);
final StringBuilder html = new StringBuilder();
html.append("<!DOCTYPE html>\n");
html.append("<html>\n");
html.append(" <head>\n");
html.append(" <title></title>\n");
html.append(" <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\n");
html.append(" </head>\n");
html.append(" <body>\n");
html.append(" <h1>AGLT2 node performance details</h1>\n");
html.append(" <center>\n");
html.append(" <p> <span class=\"rotated\"><b>" + signalY + "</b></span>\n");
html.append(" <img src=\"").append(filename).append(".png\" usemap=\"#graph\"><br/><b>" + signalX + "</b></p>\n");
html.append(" </center>\n");
html.append(" <map name=\"graph\">\n");
BubbleGraph2DRenderer renderer = new BubbleGraph2DRenderer(800, 600) {
{
this.bottomAreaMargin = 10;
this.topAreaMargin = 10;
this.leftAreaMargin = 10;
this.rightAreaMargin = 10;
}
protected void newValue(double x, double y, double size, int i) {
String url = urlPrototype.replaceAll("DATASETLABEL", dataset.getLabels().get(i));
html.append(" <area shape=\"circle\" coords=\"" + (int) x + "," + (int) y + "," + (int) size + "\" href=\"" + url + "\" alt=\"" + dataset.getLabels().get(i) + "\">\n");
}
};
renderer.draw(image.createGraphics(), dataset);
html.append(" </map>\n");
html.append(" <p>Size of the bubble represents <b>bytes_in</b></p>\n");
html.append(" <p>Data gathered from directory " + path + ". Data timestamp " + format.format(time) + "</p>\n");
html.append(" <style>\n");
html.append(" .rotated {\n");
html.append(" display:block;\n");
html.append(" position:relative; top: 300px; right: 420px;\n");
html.append(" -webkit-transform: rotate(-90deg);\n");
html.append(" -moz-transform: rotate(-90deg);\n");
html.append(" }\n");
html.append(" </style>\n");
html.append(" </body>\n");
html.append("</html>\n");
BufferedWriter writer =
Files.newBufferedWriter(
FileSystems.getDefault().getPath(".", filename + ".html"),
Charset.forName("US-ASCII"));
writer.write(html.toString());
writer.close();
ImageIO.write(image, "png", new File(filename + ".png"));
}
}