--- projects/cms/source/host/java/DecodeCPU_TXT.java 2000/12/07 18:26:19 1.1 +++ projects/cms/source/host/java/DecodeCPU_TXT.java 2000/12/13 19:00:37 1.5 @@ -5,59 +5,105 @@ class DecodeCPU_TXT { XMLFormatter packet; - public DecodeCPU_TXT(String _file){ + public DecodeCPU_TXT(){ // open the file and read in all the relevant details try { - BufferedReader in = new BufferedReader(new FileReader(_file)); - String line = new String(); + String[] cmd = {"/usr/local/sbin/top","-s1","-d2","0"}; + Process proc = Runtime.getRuntime().exec(cmd); + // this process will take atleast 2 seconds to complete + BufferedReader in = new BufferedReader(new InputStreamReader(proc.getInputStream())); + String line = new String(); + // get rid of the first output (it doesn't contain cpu info) for ( int i=0; i < 7; i++ ){ line = in.readLine(); - System.out.println("Throwing away line: "+line); + //System.out.println("Throwing away line: "+line); } // first line has the format: load averages: 0.30, 0.27, 0.29 16:58:10 // tokenize it using spaces as delimiters? + line = in.readLine(); + // it seems some versions of top prefix this line with something else... lets remove it :) + line = line.substring(line.indexOf("load averages:")); + // System.out.println("line1: "+line); StringTokenizer tok = new StringTokenizer(line,":",false); - tok.nextToken(); // load averages: - String load1 = tok.nextToken(" ,"); // "0.30" - String load2 = tok.nextToken(); // "0.27" - String load3 = tok.nextToken(); // "0.29" + tok.nextToken(); // load averages + tok.nextToken(" ,"); // : + String load1 = tok.nextToken(); // "0.30" + // System.out.println("load1: "+load1); + String load5 = tok.nextToken(); // "0.27" + // System.out.println("load5: "+load5); + String load15 = tok.nextToken(); // "0.29" + // System.out.println("load15: "+load15); String sTime = tok.nextToken(); // "16:58:10" + // System.out.println("sTime: "+sTime); // get the next line line = in.readLine(); // 632 processes: 591 sleeping, 10 zombie, 30 stopped, 1 on cpu + // System.out.println("line2: "+line); tok = new StringTokenizer(line," ",false); String totalProcesses = tok.nextToken(); // "632" + // System.out.println("totalProcesses: "+totalProcesses); + tok.nextToken(); // processes String sleeping = tok.nextToken(": ,"); // "591" + // System.out.println("sleeping: "+sleeping); + tok.nextToken(); // sleeping String zombie = tok.nextToken(); // "10" - String stopped = tok.nextToken(","); // "30" + // System.out.println("zombie: "+zombie); + tok.nextToken(); // zombie + String stopped = tok.nextToken(); // "30" + // System.out.println("stopped: "+stopped); + tok.nextToken(); // stopped + String onCPU = tok.nextToken(); // "1" + // System.out.println("onCPU: "+onCPU); // get the next line line = in.readLine(); // CPU states: 71.1% idle, 1.8% user, 4.8% kernel, 22.2% iowait, 0.0% swap + // System.out.println("line3: "+line); tok = new StringTokenizer(line,":%,",false); + tok.nextToken(); // CPU states String idle = tok.nextToken(); // "71.1" + // System.out.println("idle: "+idle); + tok.nextToken(); // idle String user = tok.nextToken(",%"); // " 1.8" + // System.out.println("user: "+user); + tok.nextToken(); // user String kernel = tok.nextToken(); // " 4.8" + // System.out.println("kernel: "+kernel); + tok.nextToken(); // kernel String iowait = tok.nextToken(); // " 22.2" + // System.out.println("iowait: "+iowait); + tok.nextToken(); // iowait String swap = tok.nextToken(); // " 0.0" + // System.out.println("swap: "+swap); line = in.readLine(); // Memory: 4096M real, 2380M free, 1237M swap in use, 9774M swap free + // System.out.println("line4: "+line); tok = new StringTokenizer(line,": ,",false); tok.nextToken(); // Memory: String real = tok.nextToken(); // "4096M" + // System.out.println("real: "+real); + tok.nextToken(); // real String free = tok.nextToken(", "); // "2380M" + // System.out.println("free: "+free); + tok.nextToken(); // free String swapInUse = tok.nextToken(); // "1237M" + // System.out.println("swapInUse: "+swapInUse); + tok.nextToken(); // swap + tok.nextToken(); // in + tok.nextToken(); // use String swapFree = tok.nextToken(", "); // "9774M" + // System.out.println("swapFree: "+swapFree); // done now make it into an xml packet ;) - - packet = new XMLFormatter("core"); + + packet = new XMLFormatter(); + packet.addElement("sTime",sTime); packet.addNest("load"); - packet.addElement("1",load1); - packet.addElement("2",load2); - packet.addElement("3",load3); + packet.addElement("load1",load1); + packet.addElement("load5",load5); + packet.addElement("load15",load15); packet.closeNest(); packet.addNest("processes"); packet.addElement("total",totalProcesses); @@ -66,22 +112,24 @@ class DecodeCPU_TXT { packet.addElement("stopped",stopped); packet.closeNest(); packet.addNest("cpu"); - packet.addElement("idle",idle); - packet.addElement("user",user); - packet.addElement("kernel",kernel); - packet.addElement("iowait",iowait); - packet.addElement("swap",swap); + packet.addElement("idle",idle.trim()); + packet.addElement("user",user.trim()); + packet.addElement("kernel",kernel.trim()); + packet.addElement("iowait",iowait.trim()); + packet.addElement("swap",swap.trim()); packet.closeNest(); packet.addNest("memory"); - packet.addElement("real",real); - packet.addElement("free",free); - packet.addElement("swapinuse",swapInUse); - packet.addElement("swapfree",swapFree); + packet.addElement("real",real.substring(0, real.length()-1)); + packet.addElement("free",free.substring(0, free.length()-1)); + packet.addElement("swapinuse",swapInUse.substring(0, swapInUse.length()-1)); + packet.addElement("swapfree",swapFree.substring(0, swapFree.length()-1)); packet.closeNest(); + in.close(); } - catch ( IOException e ){ - // probably couldn't find the file + catch (Exception e ){ + // probably couldn't find the file + System.out.println(e); } @@ -90,8 +138,7 @@ class DecodeCPU_TXT { public String getItems(){ // return the xml return packet.returnXML(); - } -} // class \ No newline at end of file +} // class