add graph

This commit is contained in:
DOHA 2015-03-23 19:17:48 +02:00
parent ffe552af83
commit 8e9bf9a739
4 changed files with 129 additions and 0 deletions

View File

@ -1,9 +1,13 @@
package org.baeldung.spring; package org.baeldung.spring;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.EnableWebMvc; import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.servlet.view.InternalResourceViewResolver;
@Configuration @Configuration
@ComponentScan("org.baeldung.web") @ComponentScan("org.baeldung.web")
@ -14,6 +18,18 @@ public class WebConfig extends WebMvcConfigurerAdapter {
super(); super();
} }
@Bean
public ViewResolver viewResolver() {
final InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
viewResolver.setPrefix("/WEB-INF/view/");
viewResolver.setSuffix(".jsp");
return viewResolver;
}
// API // API
@Override
public void addViewControllers(final ViewControllerRegistry registry) {
super.addViewControllers(registry);
registry.addViewController("/graph.html");
}
} }

View File

@ -51,4 +51,14 @@ public class RootController {
public String getStatusMetric() { public String getStatusMetric() {
return metricService.getStatusMetric(); return metricService.getStatusMetric();
} }
@RequestMapping(value = "/metric-graph", method = RequestMethod.GET)
@ResponseBody
public Object[][] drawMetric() {
final Object[][] result = metricService.getGraphData();
for (int i = 1; i < result[0].length; i++) {
result[0][i] = result[0][i].toString();
}
return result;
}
} }

View File

@ -1,6 +1,10 @@
package org.baeldung.web.metric; package org.baeldung.web.metric;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map.Entry;
import java.util.Set;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -9,12 +13,20 @@ public class MetricService {
private static HashMap<String, HashMap<Integer, Integer>> metricMap = new HashMap<String, HashMap<Integer, Integer>>(); private static HashMap<String, HashMap<Integer, Integer>> metricMap = new HashMap<String, HashMap<Integer, Integer>>();
private static HashMap<Integer, Integer> statusMetric = new HashMap<Integer, Integer>(); private static HashMap<Integer, Integer> statusMetric = new HashMap<Integer, Integer>();
private static HashMap<String, HashMap<Integer, Integer>> timeMap = new HashMap<String, HashMap<Integer, Integer>>();
private static final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm");
public MetricService() { public MetricService() {
super(); super();
} }
public void increaseCount(final String request, final int status) { public void increaseCount(final String request, final int status) {
increaseMainMetric(request, status);
increaseStatusMetric(status);
updateTimeMap(status);
}
private void increaseMainMetric(final String request, final int status) {
HashMap<Integer, Integer> statusMap = metricMap.get(request); HashMap<Integer, Integer> statusMap = metricMap.get(request);
if (statusMap == null) { if (statusMap == null) {
statusMap = new HashMap<Integer, Integer>(); statusMap = new HashMap<Integer, Integer>();
@ -28,7 +40,9 @@ public class MetricService {
} }
statusMap.put(status, count); statusMap.put(status, count);
metricMap.put(request, statusMap); metricMap.put(request, statusMap);
}
private void increaseStatusMetric(final int status) {
final Integer statusCount = statusMetric.get(status); final Integer statusCount = statusMetric.get(status);
if (statusCount == null) { if (statusCount == null) {
statusMetric.put(status, 1); statusMetric.put(status, 1);
@ -37,6 +51,23 @@ public class MetricService {
} }
} }
private void updateTimeMap(final int status) {
final String time = dateFormat.format(new Date());
HashMap<Integer, Integer> statusMap = timeMap.get(time);
if (statusMap == null) {
statusMap = new HashMap<Integer, Integer>();
}
Integer count = statusMap.get(status);
if (count == null) {
count = 1;
} else {
count++;
}
statusMap.put(status, count);
timeMap.put(time, statusMap);
}
public String getFullMetric() { public String getFullMetric() {
return metricMap.entrySet().toString(); return metricMap.entrySet().toString();
} }
@ -44,4 +75,34 @@ public class MetricService {
public String getStatusMetric() { public String getStatusMetric() {
return statusMetric.entrySet().toString(); return statusMetric.entrySet().toString();
} }
public Object[][] getGraphData(){
final int colCount = statusMetric.keySet().size()+1;
final Set<Integer> allStatus = statusMetric.keySet();
final int rowCount = timeMap.keySet().size()+1;
final Object[][] result = new Object[rowCount][colCount];
result[0][0] = "Time";
int j = 1;
for (final int status : allStatus) {
result[0][j] = status;
j++;
}
int i = 1;
HashMap<Integer, Integer> tempMap;
for (final Entry<String, HashMap<Integer, Integer>> entry : timeMap.entrySet()) {
result[i][0] = entry.getKey();
tempMap = entry.getValue();
for (j = 1; j < colCount; j++) {
result[i][j] = tempMap.get(result[0][j]);
if (result[i][j] == null) {
result[i][j] = 0;
}
}
i++;
}
return result;
}
} }

View File

@ -0,0 +1,42 @@
<html>
<head>
<title>Metric Graph</title>
<script
src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
<script type="text/javascript" src="https://www.google.com/jsapi"></script>
<script type="text/javascript">
google.load("visualization", "1", {
packages : [ "corechart" ]
});
function drawChart() {
$.get("http://localhost:8080/spring-security-rest-full/metric-graph",
function(mydata) {
var data = google.visualization.arrayToDataTable(mydata);
var options = {
title : 'Website Metric',
hAxis : {
title : 'Time',
titleTextStyle : {
color : '#333'
}
},
vAxis : {
minValue : 0
}
};
var chart = new google.visualization.AreaChart(document
.getElementById('chart_div'));
chart.draw(data, options);
});
}
</script>
</head>
<body onload="drawChart()">
<div id="chart_div" style="width: 900px; height: 500px;"></div>
</body>
</html>