import java.awt.Color; import java.awt.Font; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.ByteArrayOutputStream; import java.io.File; import java.util.ArrayList; import java.util.List; import java.util.Random; import javax.imageio.ImageIO; /** * graph drawer * * @author matecsaba */ public class grapher { /** * this is needed for cli startup * * @param args command line parameters */ public static void main(String[] args) { grapher app = new grapher(); String a; try { ByteArrayOutputStream buf = new ByteArrayOutputStream(); a = "" + app.getClass().getName() + "."; a = app.httpRequest("http://localhost/" + a, "./" + a, "cli", "clibrowser", "user", args, buf); a = "type=" + a + "\r\ndata:\r\n" + buf.toString(); } catch (Exception e) { a = "exception " + e.getMessage(); } System.out.println(a); } /** * do one request * * @param url url of app * @param path path of app * @param peer client address * @param agent user agent * @param user auth data * @param par parameters * @param buf result buffer, if empty, pathname must present * @return [pathname"][file name.]extension * @throws Exception if something went wrong */ public String httpRequest(String url, String path, String peer, String agent, String user, String[] par, ByteArrayOutputStream buf) throws Exception { try { str = par[0]; str = str.substring(str.indexOf("=") + 1, str.length()); BufferedImage img = doImage(); ImageIO.write(img, "png", buf); return "png"; } catch (Exception e) { buf.write(path.getBytes()); buf.write("...exception happened...".getBytes()); return "txt"; } } private String str; private int max; private String word() { str = str.trim(); int i = str.indexOf(" "); if (i < 0) { String a = str; str = ""; return a; } String a = str.substring(0, i).trim(); str = str.substring(i, str.length()).trim(); return a; } private static int str2num(String s) { int i = 0; s = s.trim(); try { i = Integer.parseInt(s, 10); } catch (Exception e) { } return i; } private int location(int i) { if (i < 0) { i = 0; } return ((max - i) * 570) / max; } private BufferedImage doImage() { List rx = new ArrayList(); List tx = new ArrayList(); List dr = new ArrayList(); for (;;) { String s = word(); if (s.length() < 1) { break; } if (!s.endsWith("s")) { continue; } word(); rx.add(str2num(word())); word(); tx.add(str2num(word())); word(); dr.add(str2num(word())); } max = 0; for (int i = 0; i < rx.size(); i++) { int o = rx.get(i); if (o > max) { max = o; } o = tx.get(i); if (o > max) { max = o; } } BufferedImage img = new BufferedImage(800, 600, BufferedImage.TYPE_INT_RGB); Graphics2D g2d = img.createGraphics(); g2d.setBackground(Color.gray); g2d.setFont(new Font("Serif", Font.BOLD, 20)); g2d.setPaint(Color.gray); g2d.fillRect(0, 0, img.getWidth(), img.getHeight()); g2d.setPaint(Color.black); for (int i = 0; i < 10; i++) { int o = (max * i) / 10; String a = "" + o; if (o > 4096) { o /= 1024; a = o + "k"; if (o > 4096) { o /= 1024; a = o + "m"; } } g2d.drawString(a, 5, (10 - i) * 57); o = (rx.size() * i) / 10; g2d.drawString(o + "s", 80 + (i * 70), 595); } g2d.drawLine(80, 0, 80, 600); g2d.drawLine(0, 570, 800, 570); int or = location(rx.get(0)); int ot = location(tx.get(0)); int od = location(dr.get(0)); int ox = 80; for (int i = 1; i < rx.size(); i++) { int cr = location(rx.get(i)); int ct = location(tx.get(i)); int cd = location(dr.get(i)); int cx = 80 + ((i * 700) / rx.size()); g2d.setPaint(Color.green); g2d.drawLine(ox, or, cx, cr); g2d.setPaint(Color.red); g2d.drawLine(ox, ot, cx, ct); g2d.setPaint(Color.black); g2d.drawLine(ox, od, cx, cd); or = cr; ot = ct; od = cd; ox = cx; } g2d.dispose(); return img; } }