package org.helios.apmrouter.trace; import org.apache.log4j.BasicConfigurator; import org.apache.log4j.Level; import org.apache.log4j.Logger; import org.helios.apmrouter.metric.MetricType; import org.helios.apmrouter.nativex.APMSigar; import org.helios.apmrouter.sender.ISender; import org.helios.apmrouter.sender.SenderFactory; import org.helios.apmrouter.util.SystemClock; import org.hyperic.sigar.CpuPerc; import org.hyperic.sigar.FileSystem; import org.hyperic.sigar.FileSystemUsage; import org.snmp4j.PDU; import java.lang.management.ManagementFactory; import java.lang.management.MemoryUsage; public class TracingDemo { public static void main(String[] args) { System.setProperty("theice.agent.name", "tracing-demo"); final int LOOPS = 100000; final int SLEEP = 1000; BasicConfigurator.configure(); final ITracer tracer = TracerFactory.getTracer(); Logger traceLogger = Logger.getLogger(TracingDemo.class); traceLogger.setLevel(Level.DEBUG); traceLogger.removeAllAppenders(); traceLogger.addAppender(new LogTracer()); APMSigar sigar = APMSigar.getInstance(); TXContext.rollContext(); MetricType.setCompress(true); ISender sender = SenderFactory.getInstance().getDefaultSender(); log("Basic Tracing Test: [" + tracer.getHost() + "/" + tracer.getAgent() + "]"); traceTotalCpuUsage(tracer, sigar); while(true) { traceTotalCpuUsage(tracer, sigar); SystemClock.sleep(1000); } //DefaultMonitorBoot.boot(); // for(int i = 0; i < LOOPS; i++) { // if(i>0 && i%10==0) { // //TXContext.rollContext(); // } // SystemClock.startTimer(); // //boolean success = sender.ping(2000); // ElapsedTime et = SystemClock.endTimer(); // tracer.trace(System.currentTimeMillis(), "Foo", MetricType.LONG_COUNTER, "Bar"); // //log("Ping [" + success + "]-- " + et ); // //tracer.traceLong(i, "TXTest", "Foo", "Bar"); //// for(GarbageCollectorMXBean gc: ManagementFactory.getGarbageCollectorMXBeans()) { //// tracer.traceDelta(gc.getCollectionCount(), "CollectionCount", "JVM", "Memory", "GC", gc.getName()); //// tracer.traceDelta(gc.getCollectionTime(), "CollectionTime", "JVM", "Memory", "GC", gc.getName()); //// } //// traceCpuUsages(tracer, sigar); //// traceTotalCpuUsage(tracer, sigar); //// traceDiskUsage(tracer, sigar); // //traceMemorySpacesSNMP(tracer, sigar); //// try { //// traceLogger.info("Hello World [" + i + "]"); //// traceLogger.info("Hello Pluto [" + i + "]", new Throwable()); //// } catch (Exception e) {} // // if(i%100==0) { // long ns = sender.getAveragePingTime(); // long ms = TimeUnit.MILLISECONDS.convert(ns, TimeUnit.NANOSECONDS); //// log("Ping Time:" + ns + " ns. " + ms + " ms."); // } // TXContext.clearContext(); // SystemClock.sleep(SLEEP); // } // SystemClock.sleep(Long.MAX_VALUE); } public static void traceCpuUsages(ITracer tracer, APMSigar sigar) { int cpuId = 0; for(CpuPerc cpu : sigar.getCpuPercList()) { tracer.traceGauge((long)(cpu.getCombined()*100), "Total", "CPU", "Usage", "Cpu" + cpuId); tracer.traceGauge((long)(cpu.getSys()*100), "Sys", "CPU", "Usage", "Cpu" + cpuId); tracer.traceGauge((long)(cpu.getUser()*100), "User", "CPU", "Usage", "Cpu" + cpuId); cpuId++; } } public static void traceTotalCpuUsage(ITracer tracer, APMSigar sigar) { CpuPerc perc = sigar.getCpuPerc(); tracer.traceGauge((long)(perc.getCombined()*100), "Total", "CPU", "Usage", "Combined"); tracer.traceGauge((long)(perc.getSys()*100), "Sys", "CPU", "Usage", "Combined"); tracer.traceGauge((long)(perc.getUser()*100), "User", "CPU", "Usage", "Combined"); } public static void traceMemorySpacesSNMP(ITracer tracer, APMSigar sigar) { MemoryUsage usage = ManagementFactory.getMemoryMXBean().getHeapMemoryUsage(); tracer.tracePDUDirect(PDUBuilder.builder(PDU.NOTIFICATION, ".1.3.6.1.4.1.42.2.145.3.163.1.1.2.") .counter64("10", usage.getInit()) .counter64("11", usage.getUsed()) .counter64("12", usage.getCommitted()) .counter64("13", usage.getMax()) .build(), "HeapUsage", "JVM", "Memory" ); usage = ManagementFactory.getMemoryMXBean().getNonHeapMemoryUsage(); try { tracer.tracePDUDirect(PDUBuilder.builder(PDU.NOTIFICATION, ".1.3.6.1.4.1.42.2.145.3.163.1.1.2.") .counter64("20", usage.getInit()) .counter64("21", usage.getUsed()) .counter64("22", usage.getCommitted()) .counter64("23", usage.getMax()) .build(), "NonHeapUsage", "JVM", "Memory" ); } catch (Exception e) { log("Direct Request Failed:" + e); } } public static void traceDiskUsage(ITracer tracer, APMSigar sigar) { for(FileSystem fs: sigar.getFileSystemList()) { FileSystemUsage fsu = sigar.getFileSystemUsageOrNull(fs.getDevName().trim()); if(fsu==null) { //log("No Usage for [" + fs.getDirName() + "]"); continue; } tracer.traceGauge(fsu.getAvail(), "Available", "FileSystems", fs.getSysTypeName(), fs.getDirName().replace("\\", "")); tracer.traceGauge(fsu.getUsed(), "Used", "FileSystems", fs.getSysTypeName(), fs.getDirName().replace("\\", "")); tracer.traceGauge(fsu.getTotal(), "Total", "FileSystems", fs.getSysTypeName(), fs.getDirName().replace("\\", "")); tracer.traceGauge((long)(fsu.getUsePercent()*100), "Used%", "FileSystems", fs.getSysTypeName(), fs.getDirName().replace("\\", "")); tracer.traceGauge((long)(fsu.getDiskQueue()*100), "Queue", "FileSystems", fs.getSysTypeName(), fs.getDirName().replace("\\", "")); tracer.traceGauge((long)(fsu.getDiskServiceTime()*100), "ServiceTime", "FileSystems", fs.getSysTypeName(), fs.getDirName().replace("\\", "")); tracer.traceDeltaCounter(fsu.getDiskReadBytes(), "BytesRead", "FileSystems", fs.getSysTypeName(), fs.getDirName().replace("\\", "")); tracer.traceDeltaCounter(fsu.getDiskWriteBytes(), "BytesWritten", "FileSystems", fs.getSysTypeName(), fs.getDirName().replace("\\", "")); tracer.traceDeltaCounter(fsu.getDiskReads(), "Reads", "FileSystems", fs.getSysTypeName(), fs.getDirName().replace("\\", "")); tracer.traceDeltaCounter(fsu.getDiskWrites(), "Writes", "FileSystems", fs.getSysTypeName(), fs.getDirName().replace("\\", "")); } } public static void log(Object msg) { System.out.println(msg); } }