package com.redhat.training.sender; import java.lang.management.ManagementFactory; import java.lang.management.ThreadMXBean; import javax.jms.Connection; import javax.jms.ConnectionFactory; import javax.jms.JMSException; import javax.jms.MessageProducer; import javax.jms.Queue; import javax.jms.Session; import javax.jms.TextMessage; import javax.naming.InitialContext; import javax.naming.NamingException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class SendMetric { public static void main(String... args) { Logger LOG = LoggerFactory.getLogger(SendMetric.class); // prepare metrics objects ThreadMXBean thr = ManagementFactory.getThreadMXBean(); long processId = ManagementFactory.getRuntimeMXBean().getPid(); long threadId = Thread.currentThread().getId(); long oldTime = 0; // declare JMS objects InitialContext ctx; ConnectionFactory cf; Connection c; Session s; MessageProducer mp; Queue q; try { ctx = new InitialContext(); cf = (ConnectionFactory)ctx.lookup("ConnectionFactory"); q = (Queue)ctx.lookup("queue/metrics"); } catch (NamingException ne) { ne.printStackTrace(); return; } try { c = cf.createConnection(); c.start(); s = c.createSession(); mp = s.createProducer(q); } catch (JMSException je) { je.printStackTrace(); return; } while (true) { long newTime = thr.getThreadCpuTime(threadId); String report = processId + "[" + threadId + "]: Current CPU time: " + (newTime - oldTime); LOG.info(report); try { TextMessage tm = s.createTextMessage(report); mp.send(tm); } catch (JMSException je) { je.printStackTrace(); } oldTime = newTime; try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } } }