/polyglot/monitor/src/main/java/org/wgrus/web/ChartController.java

https://github.com/markfisher/springone-wgrus · Java · 90 lines · 72 code · 18 blank · 0 comment · 0 complexity · 12d864ff4e008c2dc7aa8d7c41aa8c64 MD5 · raw file

  1. package org.wgrus.web;
  2. import java.awt.Color;
  3. import java.awt.GradientPaint;
  4. import java.io.OutputStream;
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import org.springframework.data.mongodb.core.MongoTemplate;
  7. import org.springframework.stereotype.Controller;
  8. import org.springframework.web.bind.annotation.RequestMapping;
  9. import org.jfree.chart.ChartFactory;
  10. import org.jfree.chart.ChartUtilities;
  11. import org.jfree.chart.JFreeChart;
  12. import org.jfree.chart.axis.NumberAxis;
  13. import org.jfree.chart.plot.CategoryPlot;
  14. import org.jfree.chart.plot.PlotOrientation;
  15. import org.jfree.chart.renderer.category.BarRenderer;
  16. import org.jfree.data.category.DefaultCategoryDataset;
  17. @RequestMapping("/charts")
  18. @Controller
  19. public class ChartController {
  20. @Autowired
  21. MongoTemplate mongoTemplate;
  22. @RequestMapping("/orders.png")
  23. public void renderControllers(OutputStream stream)
  24. throws Exception {
  25. JFreeChart chart = generateChart();
  26. ChartUtilities.writeChartAsPNG(stream, chart, 750, 400);
  27. }
  28. private JFreeChart generateChart() {
  29. DefaultCategoryDataset dataset = getOrderData();
  30. boolean rotate = false;
  31. JFreeChart chart = ChartFactory.createBarChart("WGRUS Order Status", // title
  32. "Status", // x-axis label
  33. "Count", // y-axis label
  34. dataset, rotate ? PlotOrientation.HORIZONTAL
  35. : PlotOrientation.VERTICAL, true, // legend displayed
  36. true, // tooltips displayed
  37. false); // no URLs*/
  38. CategoryPlot plot = chart.getCategoryPlot();
  39. BarRenderer renderer = (BarRenderer) plot.getRenderer();
  40. GradientPaint paintPending = new GradientPaint(
  41. 0.0f, 0.0f, Color.yellow,
  42. 0.0f, 0.0f, new Color(0, 64, 64));
  43. GradientPaint paintProcessed = new GradientPaint(
  44. 0.0f, 0.0f, Color.green,
  45. 0.0f, 0.0f, new Color(0, 64, 0));
  46. GradientPaint paintReject = new GradientPaint(
  47. 0.0f, 0.0f, Color.red,
  48. 0.0f, 0.0f, new Color(64, 0, 0));
  49. renderer.setSeriesPaint(0, paintPending);
  50. renderer.setSeriesPaint(1, paintProcessed);
  51. renderer.setSeriesPaint(2, paintReject);
  52. NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
  53. rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
  54. return chart;
  55. }
  56. private DefaultCategoryDataset getOrderData() {
  57. DefaultCategoryDataset ds = null;
  58. long messages = mongoTemplate.getCollection("messages").count();
  59. long orders = mongoTemplate.getCollection("orders").count();
  60. long rejects = mongoTemplate.getCollection("rejects").count();
  61. try {
  62. ds = new DefaultCategoryDataset();
  63. ds.addValue(messages, "Pending", "Orders");
  64. ds.addValue(orders, "Processed", "Orders");
  65. ds.addValue(rejects, "Rejects", "Orders");
  66. return ds;
  67. } catch (Exception e) {
  68. e.printStackTrace();
  69. }
  70. return ds;
  71. }
  72. }