There are several options for doing this, including configuring your IP sprayer to do quota management, or facading your services with a 3rd party service management product like Layer 7 or SOA Software, but you might also consider the very simple Java web service based solution using the open source JAMon library.
The sample code below illustrates a simple per-IP address monitoring solution that you might customise to be per-account or whatever else is available in the HTTP request header.
Firstly, a servlet filter:
public class MonitorFilter extends HttpServlet implements Filter {
@Override
public void init(FilterConfig filterConfig) {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain filterChain) throws IOException, ServletException {
Monitor monitor = MonitorFactory.start(request.getRemoteAddr());
try {
filterChain.doFilter(request, response);
} finally {
monitor.stop();
}
}
@Override
public void destroy() {
}
}
Having gathered the data, a simple Spring framework based REST service to show how to get at the data:
@Component
@Controller("monitorController")
public class MonitorController {
/**
* Return all monitor results
*/
@RequestMapping(value = "/monitor", method = { RequestMethod.GET })
@ResponseBody
public String findAll() {
return MonitorFactory.getReport();
}
/**
* Return the monitor results for the given key
*/
@RequestMapping(value = "/monitor/{key}", method = { RequestMethod.GET })
@ResponseBody
public String findByKey(@PathVariable String key) {
return MonitorFactory.getMonitor(key, "ms.").toString();
}
/**
* Return all monitor results
*/
@RequestMapping(value = "/monitor/keys", method = { RequestMethod.GET })
@ResponseBody
public ArrayList
ArrayList
Iterator iter = MonitorFactory.getFactory().iterator();
while (iter.hasNext()) {
Monitor monitor = (Monitor) iter.next();
keys.add(monitor.getLabel());
}
return keys;
}
}
(Aside: see here for more on building REST services using Spring)
Some sample raw output:
http://localhost:8080/sample/monitor
Service-oriented architecture (SOA) management, REST API monitoring