Mercurial > hg > release > thermostat-0.4
changeset 573:92e6648fd11d
Add failure status to thread monitor agent code
review-thread: http://icedtea.classpath.org/pipermail/thermostat/2012-August/002990.html
reviewed-by: vanaltj
author | Mario Torre <neugens.limasoftware@gmail.com> |
---|---|
date | Fri, 31 Aug 2012 10:12:53 +0200 |
parents | 6f6d09025f91 |
children | 06f2dcf9ad3b |
files | thread/client-controllers/src/main/java/com/redhat/thermostat/thread/client/controller/impl/VMThreadCapabilitiesController.java thread/harvester/src/main/java/com/redhat/thermostat/thread/harvester/Harvester.java thread/harvester/src/main/java/com/redhat/thermostat/thread/harvester/ThreadHarvester.java |
diffstat | 3 files changed, 89 insertions(+), 45 deletions(-) [+] |
line wrap: on
line diff
--- a/thread/client-controllers/src/main/java/com/redhat/thermostat/thread/client/controller/impl/VMThreadCapabilitiesController.java Wed Aug 29 19:43:25 2012 -0400 +++ b/thread/client-controllers/src/main/java/com/redhat/thermostat/thread/client/controller/impl/VMThreadCapabilitiesController.java Fri Aug 31 10:12:53 2012 +0200 @@ -61,7 +61,9 @@ switch (actionEvent.getActionId()) { case VISIBLE: VMThreadCapabilities caps = collector.getVMThreadCapabilities(); - view.setVMThreadCapabilities(caps); + if (caps != null) { + view.setVMThreadCapabilities(caps); + } break; default:
--- a/thread/harvester/src/main/java/com/redhat/thermostat/thread/harvester/Harvester.java Wed Aug 29 19:43:25 2012 -0400 +++ b/thread/harvester/src/main/java/com/redhat/thermostat/thread/harvester/Harvester.java Fri Aug 31 10:12:53 2012 +0200 @@ -43,6 +43,8 @@ import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledFuture; import java.util.concurrent.TimeUnit; +import java.util.logging.Level; +import java.util.logging.Logger; import javax.management.MalformedObjectNameException; @@ -56,6 +58,8 @@ @SuppressWarnings("restriction") class Harvester { + private static final Logger logger = Logger.getLogger(Harvester.class.getSimpleName()); + private boolean isConnected; private ScheduledExecutorService threadPool; private ScheduledFuture<?> harvester; @@ -76,52 +80,66 @@ this.threadPool = threadPool; } - synchronized void start() { - if (isConnected) return; - + synchronized boolean start() { + if (isConnected) { + return true; + } + if (!connector.isAttached()) { try { connector.attach(); - } catch (Exception ignore) { - ignore.printStackTrace(); + } catch (Exception ex) { + logger.log(Level.SEVERE, "can't attach", ex); + return false; } } try { connection = connector.connect(); - } catch (Exception e) { - e.printStackTrace(); + } catch (Exception ex) { + logger.log(Level.SEVERE, "can't connect", ex); + return false; } - isConnected = true; + isConnected = true; harvester = threadPool.scheduleAtFixedRate(new HarvesterAction(), 0, 1, TimeUnit.SECONDS); + + return isConnected; } boolean isConnected() { return isConnected; } - synchronized void stop() { - if (!isConnected) - return; + synchronized boolean stop() { + if (!isConnected) { + return true; + } harvester.cancel(false); + isConnected = false; + boolean stillConnected = false; try { connection.close(); - } catch (IOException e) { - e.printStackTrace(); + } catch (IOException ex) { + logger.log(Level.SEVERE, "can't close connection", ex); + stillConnected = true; } if (connector.isAttached()) { try { connector.close(); - } catch (Exception ignore) { - ignore.printStackTrace(); + } catch (Exception ex) { + logger.log(Level.SEVERE, "can't detach", ex); + if (stillConnected) { + isConnected = true; + } + return false; } } - isConnected = false; + return true; } ThreadMXBean getDataCollectorBean(MXBeanConnection connection) @@ -161,12 +179,14 @@ if (collectorBean instanceof com.sun.management.ThreadMXBean) { com.sun.management.ThreadMXBean sunBean = (com.sun.management.ThreadMXBean) collectorBean; boolean wasEnabled = false; - if (sunBean.isThreadAllocatedMemorySupported()) { - wasEnabled = sunBean.isThreadAllocatedMemoryEnabled(); - sunBean.setThreadAllocatedMemoryEnabled(true); - allocatedBytes = sunBean.getThreadAllocatedBytes(ids); - sunBean.setThreadAllocatedMemoryEnabled(wasEnabled); - } + try { + if (sunBean.isThreadAllocatedMemorySupported()) { + wasEnabled = sunBean.isThreadAllocatedMemoryEnabled(); + sunBean.setThreadAllocatedMemoryEnabled(true); + allocatedBytes = sunBean.getThreadAllocatedBytes(ids); + sunBean.setThreadAllocatedMemoryEnabled(wasEnabled); + } + } catch (Exception ignore) {} } ThreadInfo[] threadInfos = collectorBean.getThreadInfo(ids, true, true); @@ -207,15 +227,19 @@ } } - synchronized void saveVmCaps() { + synchronized boolean saveVmCaps() { boolean closeAfter = false; if (!connector.isAttached()) { closeAfter = true; try { connector.attach(); - } catch (Exception ignore) { - ignore.printStackTrace(); + } catch (Exception ex) { + logger.log(Level.SEVERE, "can't attach", ex); + if (closeAfter) { + closeConnection(); + } + return false; } } @@ -231,22 +255,33 @@ if (bean instanceof com.sun.management.ThreadMXBean) { com.sun.management.ThreadMXBean sunBean = (com.sun.management.ThreadMXBean) bean; - if (sunBean.isThreadAllocatedMemorySupported()) - caps.addFeature(ThreadDao.THREAD_ALLOCATED_MEMORY); + + try { + if (sunBean.isThreadAllocatedMemorySupported()) { + caps.addFeature(ThreadDao.THREAD_ALLOCATED_MEMORY); + } + } catch (Exception ignore) {}; } threadDao.saveCapabilities(vmId, agentId, caps); - } catch (Exception e) { - e.printStackTrace(); + } catch (Exception ex) { + logger.log(Level.SEVERE, "can't get MXBeanConnection connection", ex); + return false; } if (closeAfter) { - try { - connector.close(); - } catch (Exception ignore) { - ignore.printStackTrace(); - } + closeConnection(); + } + + return true; + } + + private void closeConnection() { + try { + connector.close(); + } catch (Exception ex) { + logger.log(Level.SEVERE, "can't close connection to vm", ex); } } }
--- a/thread/harvester/src/main/java/com/redhat/thermostat/thread/harvester/ThreadHarvester.java Wed Aug 29 19:43:25 2012 -0400 +++ b/thread/harvester/src/main/java/com/redhat/thermostat/thread/harvester/ThreadHarvester.java Fri Aug 31 10:12:53 2012 +0200 @@ -64,48 +64,55 @@ @Override public Response receive(Request request) { + boolean result = false; + String command = request.getParameter(HarvesterCommand.class.getName()); switch (HarvesterCommand.valueOf(command)) { case START: { String vmId = request.getParameter(HarvesterCommand.VM_ID.name()); String agentId = request.getParameter(HarvesterCommand.AGENT_ID.name()); - startHarvester(vmId, agentId); + result = startHarvester(vmId, agentId); break; } case STOP: { String vmId = request.getParameter(HarvesterCommand.VM_ID.name()); - stopHarvester(vmId); + result = stopHarvester(vmId); break; } case VM_CAPS: { // this is blocking String vmId = request.getParameter(HarvesterCommand.VM_ID.name()); String agentId = request.getParameter(HarvesterCommand.AGENT_ID.name()); - saveVmCaps(vmId, agentId); + result = saveVmCaps(vmId, agentId); break; } default: break; } - return new Response(ResponseType.OK); + if (result) { + return new Response(ResponseType.OK); + } else { + return new Response(ResponseType.ERROR); + } } - private void startHarvester(String vmId, String agentId) { + private boolean startHarvester(String vmId, String agentId) { Harvester harvester = getHarvester(vmId, agentId); - harvester.start(); + return harvester.start(); } - private void saveVmCaps(String vmId, String agentId) { + private boolean saveVmCaps(String vmId, String agentId) { Harvester harvester = getHarvester(vmId, agentId); - harvester.saveVmCaps(); + return harvester.saveVmCaps(); } - private void stopHarvester(String vmId) { + private boolean stopHarvester(String vmId) { Harvester harvester = connectors.get(vmId); if (harvester != null) { - harvester.stop(); + return harvester.stop(); } + return true; } Harvester getHarvester(String vmId, String agentId) {