/**
* Copyright 2013 Marin Solutions
*/
package com.captaindebug.store.monitoring;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.TimeUnit;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* @author Roger
*
*/
// @Service
public class HeapMonitor extends SingleThreadRunner {
private static Logger logger = LoggerFactory.getLogger(HeapMonitor.class);
// @Value("interval")
private long interval;
// @Value("TimeUnit")
private TimeUnit timeUnit;
private final Runtime runtime = Runtime.getRuntime();
/**
* @param threadName
*/
public HeapMonitor() {
super("HeapMonitor");
}
private ExecutorService executor;
/** Called by Spring on shutdown */
public void destroy() {
executor.shutdown();
}
/**
* @see com.captaindebug.store.monitoring.SingleThreadRunner#getRunnable()
*/
@Override
protected Runnable getRunnable() {
Runnable runnable = new Runnable() {
@Override
public void run() {
while (true) {
Point point = createPoint();
addPointToList(point);
sleep();
}
}
private Point createPoint() {
Point point = new Point(runtime.freeMemory(), runtime.totalMemory(), runtime.maxMemory());
return point;
}
private void addPointToList(Point point) {
// TODO create a sparse list adding only those entries that need
// to be added
}
private void sleep() {
try {
timeUnit.sleep(interval);
} catch (InterruptedException e) {
logger.warn("InterruptedException: " + e.getMessage(), e);
}
}
};
return runnable;
}
}