package com.sohu.cache.server.data; import java.util.ArrayList; import java.util.List; import org.apache.commons.lang.math.NumberUtils; /** * cpu状况 */ public class CPU implements LineParser{ public static final String FLAG = "CPU"; public static final String CPU_ALL = "CPU_ALL"; private Usage allUsage; //包含各个虚拟cpu的情况 private List<Usage> cpuList = new ArrayList<Usage>(); /** * line format: * CPU001,CPU 1 bx-50-13,User%,Sys%,Wait%,Idle% * CPU002,CPU 2 bx-50-13,User%,Sys%,Wait%,Idle% * CPU_ALL,CPU Total bx-50-13,User%,Sys%,Wait%,Idle%,Busy,CPUs * CPU001,T0001,1.8,0.9,4.5,92.9 * CPU002,T0001,3.6,1.8,0.0,94.6 * CPU_ALL,T0001,2.1,1.3,0.6,95.9,,16 */ public void parse(String line, String timeKey) throws Exception{ if(line.startsWith(FLAG)) { String[] items = line.split(",", 6); if(items.length != 6) { return; } if(!items[1].equals(timeKey)) { return; } Usage usage = new Usage(); usage.setUser(NumberUtils.toFloat(items[2])); usage.setSys(NumberUtils.toFloat(items[3])); usage.setWait(NumberUtils.toFloat(items[4])); if(CPU_ALL.equals(items[0])) { allUsage = usage; } else { usage.setName(items[0]); cpuList.add(usage); } } } public List<Usage> getCpuList() { return cpuList; } public Usage getAllUsage() { return allUsage; } public float getUser() { return allUsage == null ? 0 : allUsage.getUser(); } public float getSys() { return allUsage == null ? 0 : allUsage.getSys(); } public float getWait() { return allUsage == null ? 0 : allUsage.getWait(); } public String getExt(){ StringBuilder sb = new StringBuilder(); for(Usage usage : cpuList) { sb.append(usage.getName()); sb.append(","); sb.append(usage.getUser()); sb.append(","); sb.append(usage.getSys()); sb.append(","); sb.append(usage.getWait()); sb.append(";"); } return sb.toString(); } public String toString() { return "CPU [cpuList=" + cpuList + "]"; } /** * cpu使用率 */ public class Usage{ //代表那个cpu private String name; //用户空间使用率 private float user; //内核空间使用率 private float sys; //wio private float wait; public float getUser() { return user; } public void setUser(float user) { this.user = user; } public float getSys() { return sys; } public void setSys(float sys) { this.sys = sys; } public float getWait() { return wait; } public void setWait(float wait) { this.wait = wait; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String toString() { return "Usage [name=" + name + ", user=" + user + ", sys=" + sys + ", wait=" + wait + "]"; } } }