public JFreeChart makegraph(Second g_start, Second g_end) { // read XYDataset readset = this.createread(); XYItemRenderer minichart1 = new StandardXYItemRenderer(); minichart1.setSeriesPaint(0, kSarConfig.color1); minichart1.setBaseStroke(kSarConfig.DEFAULT_STROKE); XYPlot subplot1 = new XYPlot(readset, null, new NumberAxis("Read"), minichart1); // writ XYDataset writset = this.createwrit(); XYItemRenderer minichart2 = new StandardXYItemRenderer(); minichart2.setSeriesPaint(0, kSarConfig.color2); minichart1.setSeriesPaint(1, kSarConfig.color3); minichart2.setBaseStroke(kSarConfig.DEFAULT_STROKE); XYPlot subplot2 = new XYPlot(writset, null, new NumberAxis("Write"), minichart2); // wcache XYDataset wcacheset = this.createwcache(); XYItemRenderer minichart3 = new StandardXYItemRenderer(); minichart3.setSeriesPaint(0, kSarConfig.color4); minichart3.setBaseStroke(kSarConfig.DEFAULT_STROKE); XYPlot subplot3 = new XYPlot(wcacheset, null, new NumberAxis("%wcache"), minichart3); // rcache XYDataset rcacheset = this.creatercache(); XYItemRenderer minichart4 = new StandardXYItemRenderer(); minichart4.setSeriesPaint(0, kSarConfig.color5); minichart4.setBaseStroke(kSarConfig.DEFAULT_STROKE); XYPlot subplot4 = new XYPlot(rcacheset, null, new NumberAxis("%rcache"), minichart4); // PANEL CombinedDomainXYPlot plot = new CombinedDomainXYPlot(new DateAxis("")); plot.add(subplot1, 1); plot.add(subplot2, 1); plot.add(subplot3, 1); plot.add(subplot4, 1); plot.setOrientation(PlotOrientation.VERTICAL); JFreeChart mychart = new JFreeChart(this.getGraphTitle(), kSarConfig.DEFAULT_FONT, plot, true); if (setbackgroundimage(mychart) == 1) { subplot1.setBackgroundPaint(null); subplot2.setBackgroundPaint(null); subplot3.setBackgroundPaint(null); subplot4.setBackgroundPaint(null); } if (g_start != null) { DateAxis dateaxis1 = (DateAxis) mychart.getXYPlot().getDomainAxis(); dateaxis1.setRange(g_start.getStart(), g_end.getEnd()); } bufferrcachetrigger.setTriggerValue(kSarConfig.hpuxbufferrcachetrigger); bufferrcachetrigger.tagMarker(subplot4); return mychart; }
public JFreeChart makegraph(Second g_start, Second g_end) { // used XYDataset xydataset1 = this.createused(); XYPlot subplot1; NumberAxis usedaxis = new NumberAxis("% used cpu"); if (mysar.show100axiscpu) { usedaxis.setRange(0.0D, 100D); } if (mysar.showstackedcpu) { StackedXYAreaRenderer2 renderer = new StackedXYAreaRenderer2(); renderer.setSeriesPaint(0, kSarConfig.color1); renderer.setSeriesPaint(1, kSarConfig.color2); renderer.setSeriesPaint(2, kSarConfig.color3); renderer.setSeriesPaint(3, kSarConfig.color4); subplot1 = new XYPlot(stacked_used, new DateAxis(null), usedaxis, renderer); } else { XYItemRenderer minichart1 = new StandardXYItemRenderer(); minichart1.setBaseStroke(kSarConfig.DEFAULT_STROKE); minichart1.setSeriesPaint(0, kSarConfig.color1); minichart1.setSeriesPaint(1, kSarConfig.color2); minichart1.setSeriesPaint(2, kSarConfig.color3); minichart1.setSeriesPaint(2, kSarConfig.color4); subplot1 = new XYPlot(xydataset1, null, usedaxis, minichart1); } // idle XYDataset idleset = this.createidle(); XYItemRenderer minichart2 = new StandardXYItemRenderer(); minichart2.setSeriesPaint(0, kSarConfig.color5); minichart2.setBaseStroke(kSarConfig.DEFAULT_STROKE); XYPlot subplot2 = new XYPlot(idleset, null, new NumberAxis("% idle"), minichart2); // nice XYDataset niceset = this.createnice(); XYItemRenderer minichart3 = new StandardXYItemRenderer(); minichart3.setSeriesPaint(0, kSarConfig.color6); minichart3.setBaseStroke(kSarConfig.DEFAULT_STROKE); XYPlot subplot3 = new XYPlot(niceset, null, new NumberAxis("% niced"), minichart3); // the graph CombinedDomainXYPlot plot = new CombinedDomainXYPlot(new DateAxis("")); plot.add(subplot1, 2); plot.add(subplot3, 1); plot.add(subplot2, 1); plot.setOrientation(PlotOrientation.VERTICAL); // the graph JFreeChart mychart = new JFreeChart(this.getGraphTitle(), kSarConfig.DEFAULT_FONT, plot, true); if (g_start != null) { DateAxis dateaxis1 = (DateAxis) mychart.getXYPlot().getDomainAxis(); dateaxis1.setRange(g_start.getStart(), g_end.getEnd()); } if (setbackgroundimage(mychart) == 1) { subplot1.setBackgroundPaint(null); subplot2.setBackgroundPaint(null); subplot3.setBackgroundPaint(null); } // idle trigger cpuidletrigger.setTriggerValue(kSarConfig.linuxcpuidletrigger); cpuidletrigger.tagMarker(subplot2); // system trigger cpusystemtrigger.setTriggerValue(kSarConfig.linuxcpusystemtrigger); cpusystemtrigger.tagMarker(subplot1); // wio trigger if (cpuOpt.equals("%iowait") || cpuOpt.equals("%steal")) { cpuwiotrigger.setTriggerValue(kSarConfig.linuxcpuwiotrigger); cpuwiotrigger.tagMarker(subplot1); } // usr trigger cpuusrtrigger.setTriggerValue(kSarConfig.linuxcpuusrtrigger); cpuusrtrigger.tagMarker(subplot1); // return mychart; }
private File createPNG( String streamName, int width, int height, String outputPath, boolean isLine, boolean isShape) { StreamDatabaseDriver db = null; String requestingUser = owner; String streamOwner = owner; String startTime = fmt.print(startDate); String endTime = fmt.print(endDate); try { db = DatabaseConnector.getStreamDatabase(); boolean isData = db.prepareQuery( requestingUser, streamOwner, streamName, startTime, endTime, null, null, 0, 0, 0, true, null); Stream stream = db.getStoredStreamInfo(); if (!isData) { Log.error("isData null"); return null; } if (stream.num_samples > width) { db.close(); db = DatabaseConnector.getStreamDatabase(); int skipEveryNth = (int) (stream.num_samples / width); isData = db.prepareQuery( requestingUser, streamOwner, streamName, startTime, endTime, null, null, 0, 0, skipEveryNth, false, null); stream = db.getStoredStreamInfo(); if (!isData) { Log.error("isData null"); return null; } } // Prepare data XYSeries[] series = null; long minTsInterval = Long.MAX_VALUE; // to determine whether to use marker on the plot. long prevTimestamp = -1; Object[] tuple = new Object[db.getStoredStreamInfo().channels.size() + 1]; while (db.getNextTuple(tuple)) { // Init XYSeries array if (series == null) { series = new XYSeries[tuple.length - 1]; for (int i = 0; i < series.length; i++) { series[i] = new XYSeries(stream.channels.get(i).name); } } long timestamp = ((Long) tuple[0]).longValue(); for (int i = 1; i < tuple.length; i++) { try { series[i - 1].add(timestamp, (Number) tuple[i]); } catch (ClassCastException e) { continue; } } long diff = timestamp - prevTimestamp; if (diff > 0 && diff < minTsInterval) { minTsInterval = diff; } prevTimestamp = timestamp; } db.close(); db = null; if (series == null) { throw new UnsupportedOperationException("No data for " + streamName); } XYSeriesCollection xyDataset = new XYSeriesCollection(); for (XYSeries s : series) { xyDataset.addSeries(s); } // Generate title string long start = (long) series[0].getMinX(); long end = (long) series[0].getMaxX(); Timestamp startTimestamp = new Timestamp(start); Timestamp endTimestamp = new Timestamp(end); String title = stream.owner + ": " + stream.name + "\n" + startTimestamp.toString() + " ~ " + endTimestamp.toString(); // Create the chart object DateAxis xAxis = new DateAxis("Time"); xAxis.setDateFormatOverride(new SimpleDateFormat("hh:mm aa")); // NumberAxis xAxis = new NumberAxis(""); long margin = (endDate.getMillis() - startDate.getMillis()) / 24; xAxis.setRange( new Date(startDate.getMillis() - margin), new Date(endDate.getMillis() + margin)); NumberAxis yAxis = new NumberAxis("Value"); yAxis.setAutoRangeIncludesZero(false); // override default if (streamName.equals(ACTIVITY_SENSOR)) { yAxis.setTickUnit(new NumberTickUnit(1.0)); yAxis.setRange(0.0, 4.0); } else if (streamName.equals(STRESS_SENSOR)) { yAxis.setTickUnit(new NumberTickUnit(1.0)); yAxis.setRange(0.0, 1.0); } else if (streamName.equals(CONVERSATION_SENSOR)) { yAxis.setTickUnit(new NumberTickUnit(1.0)); yAxis.setRange(0.0, 2.0); } StandardXYItemRenderer renderer; // long dataCount = (end - start) / minTsInterval; // if (dataCount <= width) { // renderer = new StandardXYItemRenderer(StandardXYItemRenderer.LINES + // StandardXYItemRenderer.SHAPES); // } else { // renderer = new StandardXYItemRenderer(StandardXYItemRenderer.LINES); // } if (isLine && isShape) { renderer = new StandardXYItemRenderer( StandardXYItemRenderer.LINES + StandardXYItemRenderer.SHAPES); } else if (isLine && !isShape) { renderer = new StandardXYItemRenderer(StandardXYItemRenderer.LINES); } else if (!isLine && isShape) { renderer = new StandardXYItemRenderer(StandardXYItemRenderer.SHAPES); } else { renderer = new StandardXYItemRenderer(StandardXYItemRenderer.LINES); } // renderer.setShapesFilled(true); XYPlot plot = new XYPlot(xyDataset, xAxis, yAxis, renderer); JFreeChart chart = new JFreeChart(title, new Font(Font.SANS_SERIF, Font.BOLD, 12), plot, true); // JFreeChart chart = new JFreeChart(title, plot); chart.setBackgroundPaint(java.awt.Color.WHITE); chart.removeLegend(); // Marker final Color c = new Color(255, 60, 24, 63); List<Range> markerRanges = getUnsharedRanges(streamOwner, streamName); for (Range range : markerRanges) { Marker marker = new IntervalMarker( range.startTimeInMillis, range.endTimeInMillis, c, new BasicStroke(2.0f), null, null, 1.0f); plot.addDomainMarker(marker, Layer.BACKGROUND); } ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection()); String filename = ServletUtilities.saveChartAsPNG(chart, width, height, info, null); File imageFile = new File("/tmp/" + filename); File toFile = new File(outputPath + "/" + streamName + "_" + fileFmt.print(startDate) + ".png"); imageFile.renameTo(toFile); return toFile; } catch (ClassNotFoundException | IOException | NamingException | SQLException | UnsupportedOperationException e) { e.printStackTrace(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } finally { if (db != null) { try { db.close(); } catch (SQLException e) { e.printStackTrace(); } } } return null; }