package scouter.agent.netio.request.worker;
import scouter.agent.util.DumpUtil;
import scouter.net.RequestCmd;
import scouter.util.RequestQueue;
import scouter.util.ThreadUtil;
/**
* @author Gun Lee (gunlee01@gmail.com) on 2016. 11. 18.
*/
public class DumpOnCpuExceedanceWorker extends Thread {
private static DumpOnCpuExceedanceWorker instance;
private RequestQueue<String> queue = new RequestQueue<String>(2);
public final static synchronized DumpOnCpuExceedanceWorker getInstance() {
if (instance == null) {
instance = new DumpOnCpuExceedanceWorker();
instance.setDaemon(true);
instance.setName(ThreadUtil.getName(instance));
instance.start();
}
return instance;
}
public void add(String dumpReason) {
if(dumpReason == null) {
queue.put("x");
} else {
queue.put(dumpReason);
}
}
public void run() {
while (true) {
String reason = queue.get();
try {
if(RequestCmd.TRIGGER_DUMP_REASON_TYPE_CPU_EXCEEDED.equals(reason)) {
DumpUtil.autoDumpByCpuExceedance();
} else {
DumpUtil.triggerThreadDump();
}
} catch (Throwable t) {
t.printStackTrace();
}
}
}
}