package com.cloudera.sa.node360.nodepuller.operations; import com.cloudera.sa.node360.model.EventPojo; import com.cloudera.sa.node360.nodepuller.listener.EventListener; import com.cloudera.sa.node360.model.SamplePojo; import java.io.IOException; import java.util.ArrayList; import java.util.concurrent.ExecutionException; /** * Created by ted.malaska on 6/3/15. */ public class TopOperation extends AbstractSshExecOperation { @Override public String getCommand() { return "top -n 1 -b"; } @Override public void processResults(String host, int port, String result, EventListener listener) throws ExecutionException, InterruptedException, IOException { processCpuData(host, result, listener); processMemoryData(host, result, listener); processSwapData(host, result, listener); } private void processCpuData(String host, String result, EventListener listener) throws ExecutionException, InterruptedException, IOException { ArrayList list = new ArrayList<SamplePojo>(); int cpuIndex = result.indexOf("Cpu(s):"); int cpuPercentIndex = result.indexOf('%', cpuIndex); String cpuUser = result.substring(cpuIndex + 7, cpuPercentIndex).trim(); list.add(new SamplePojo("User", cpuUser)); int cpuSystemIndex = result.indexOf('%', cpuPercentIndex + 4); String cpuSystem = result.substring(cpuPercentIndex + 4, cpuSystemIndex).trim(); list.add(new SamplePojo("Sys", cpuSystem)); int cpuNiIndex = result.indexOf("%ni,"); int cpuIdletIndex = result.indexOf('%', cpuNiIndex + 4); String cpuIdle = result.substring(cpuIndex + 4, cpuPercentIndex).trim(); list.add(new SamplePojo("Idle", cpuIdle)); listener.publishEvent(new EventPojo(host, System.currentTimeMillis(), "cpu", list)); } private void processMemoryData(String host, String result, EventListener listener) throws ExecutionException, InterruptedException, IOException { ArrayList list = new ArrayList<SamplePojo>(); int memIndex = result.indexOf("Mem:"); int k1Index = result.indexOf('k', memIndex + 4); String totalMemory = result.substring(memIndex + 4, k1Index).trim(); list.add(new SamplePojo("Total", totalMemory)); int k2Index = result.indexOf('k', k1Index + 8); String usedMemory = result.substring(k1Index + 8, k2Index).trim(); list.add(new SamplePojo("Used", usedMemory)); listener.publishEvent(new EventPojo(host, System.currentTimeMillis(), "memory", list)); } private void processSwapData(String host, String result, EventListener listener) throws ExecutionException, InterruptedException, IOException { ArrayList list = new ArrayList<SamplePojo>(); int swapIndex = result.indexOf("Swap:"); int k1Index = result.indexOf('k', swapIndex + 5); String swaped = result.substring(swapIndex + 5, k1Index).trim(); list.add(new SamplePojo("Swap", swaped)); listener.publishEvent(new EventPojo(host, System.currentTimeMillis(), "swap", list)); } }