package org.fremantle.gmond; import java.io.BufferedInputStream; import java.io.InputStream; import java.net.ConnectException; import java.net.Socket; import javax.xml.stream.XMLInputFactory; import javax.xml.stream.XMLStreamReader; import org.apache.axiom.om.OMAbstractFactory; import org.apache.axiom.om.OMElement; import org.apache.axiom.om.OMNamespace; import org.apache.axiom.om.impl.builder.StAXOMBuilder; import org.apache.axiom.om.impl.dom.DOOMAbstractFactory; import org.apache.axis2.addressing.EndpointReference; import org.apache.synapse.MessageContext; import org.apache.synapse.core.SynapseEnvironment; import org.quartz.Job; import org.quartz.JobDataMap; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; public class GMondPollerJob implements Job { public void execute(JobExecutionContext arg0) throws JobExecutionException { JobDataMap jdm = arg0.getMergedJobDataMap(); int port = jdm.getIntFromString("port"); String hostName = jdm.getString("hostname"); String toAddress = jdm.getString("toAddress"); SynapseEnvironment se = (SynapseEnvironment)jdm.get("Synapse.Environment"); try { java.net.Socket socket = new Socket(hostName, port); InputStream is = socket.getInputStream(); BufferedInputStream bis = new BufferedInputStream(is); StAXOMBuilder builder = new StAXOMBuilder(bis); OMElement gmond = builder.getDocumentElement(); gmond.build(); MessageContext mc = se.createMessageContext(); mc.getEnvelope().getBody().addChild(gmond); bis.close(); is.close(); socket.close(); mc.setTo(new EndpointReference(toAddress)); se.injectMessage(mc); } catch (ConnectException ce) { // another instance is connecting. GMond is single threaded as a listener } catch (Exception e) { e.printStackTrace(); throw new JobExecutionException(e); } } }