content: package com.sohu.cache.server.data;
  
  import java.text.ParseException;
  import java.text.SimpleDateFormat;
  import java.util.Date;
  import java.util.Locale;
  import java.util.regex.Pattern;
  
  import org.apache.commons.lang.math.NumberUtils;
  /**
   *	服务器基本状态
   */
  public class Server implements LineParser{
  	public static final String TIME_FLAG = "ZZZZ";
  	public static final String FLAG = "AAA";
  	public static final Pattern pattern = Pattern.compile("^BBBP,[0-9]+,/proc/cpuinfo,\"model name");
  	public static final String OPEN_FILES = "open files";
  	public static final String MX_PROCESS = "max user processes";
  	//标志时间的字段
  	private String timeKey;
  	//收集日期 类似18:49:21,31-MAY-2016格式
  	private String dateTime;
  	private Date collectTime;
  	private String ip;
  	//host
  	private String host;
  	//逻辑cpu个数
  	private int cpus;
  	//nmon版本
  	private String nmon;
  	//cpu型号
  	private String cpuModel;
  	//内核版本
  	private String kernel;
  	//发行版本
  	private String dist;
  	//ulimit
  	private String ulimit = "";
  	
  	private CPU cpu;
  	private Memory mem;
  	private Load load;
  	private Disk disk;
  	private Net net;
  	private Connection connection;
  	
  	public Server() {
  		cpu = new CPU();
  		mem = new Memory();
  		load = new Load();
  		disk = new Disk();
  		net = new Net();
  		connection = new Connection();
  	}
  	
  	public static void main(String[] args) throws ParseException {
  		String s = "18:49:21,31-MAY-2016";
  		SimpleDateFormat sdf = new SimpleDateFormat(
  				"HH:mm:ss,dd-MMM-yyyy", Locale.ENGLISH);
  		System.out.println(sdf.parse(s));
  	}
  
  	/**
  	 * line format:
  	 * ZZZZ,T0001,09:50:01,01-JUL-2016
  	 * AAA,host,localhost
  	 * AAA,version,14g
  	 * AAA,cpus,16
  	 * AAA,OS,Linux,2.6.18-348.el5,#1 SMP Wed Nov 28 21:22:00 EST 2012,x86_64
  	 * BBBP,374,/proc/cpuinfo,"model name      : Intel(R) Xeon(R) CPU           E5620  @ 2.40GHz"
  	 * open files                      (-n) 65535
  	 * max user processes              (-u) 65535
  	 */
  	public void parse(String line, String key) throws Exception {
  		if(line.startsWith(TIME_FLAG)) {
  			String[] items = line.split(",", 3);
  			if(items.length == 3) {
  				this.timeKey = items[1];
  				this.dateTime = items[2];
  				SimpleDateFormat sdf = new SimpleDateFormat(
  						"HH:mm:ss,dd-MMM-yyyy", Locale.ENGLISH);
  				this.collectTime = sdf.parse(dateTime);
  			}
  		} else if(line.startsWith(FLAG)) {
  			String[] items = line.split(",", 3);
  			if(items.length > 2) {
  				if("host".equals(items[1])) {
  					host = items[2];
  				} else if("version".equals(items[1])) {
  					nmon = items[2];
  				} else if("cpus".equals(items[1])) {
  					cpus = NumberUtils.toInt(items[2]);
  				} else if("OS".equals(items[1])) {
  					kernel = items[2];
  				}
  			}
  		} else if(cpuModel == null && pattern.matcher(line).find()) {
  			String[] tmp = line.split("model name");
  			if(tmp.length == 2) {
  				cpuModel = tmp[1].trim();
  				cpuModel = cpuModel.substring(1, cpuModel.length() - 1);
  			}
  		}
  		String mxFile = parseULimit(line, OPEN_FILES, "f");
  		if(mxFile != null) {
  			ulimit += mxFile;
  		}
  		String mxProcess = parseULimit(line, MX_PROCESS, "p");
  		if(mxProcess != null) {
  			ulimit += mxProcess;
  		}
  		
  		load.parse(line, timeKey);
  		cpu.parse(line, timeKey);
  		mem.parse(line, timeKey);
  		net.parse(line, timeKey);
  		disk.parse(line, timeKey);
  		connection.parse(line, timeKey);
  	}
  	
  	private String parseULimit(String line, String prefix, String flag) {
  		String result = null;
  		if(line.startsWith(prefix)) {
  			String[] tmp = line.split("\\s+");
  			if(tmp.length > 0) {
  				int v = NumberUtils.toInt(tmp[tmp.length - 1]);
  				if(v > 0) {
  					result = flag + "," + v +";";
  				}
  			}
  		}
  		return result;
  	}
  	public String getDateTime() {
  		return dateTime;
  	}
  	public Date getCollectTime() {
  		return collectTime;
  	}
  
  	public Connection getConnection() {
  		return connection;
  	}
  	public String getIp() {
  		return ip;
  	}
  	public void setIp(String ip) {
  		this.ip = ip;
  	}
  
  	public String getHost() {
  		return host;
  	}
  
  	public int getCpus() {
  		return cpus;
  	}
  
  	public String getUlimit() {
  		return ulimit;
  	}
  
  	public String getNmon() {
  		return nmon;
  	}
  
  	public String getCpuModel() {
  		return cpuModel;
  	}
  
  	public String getKernel() {
  		return kernel;
  	}
  
  	public String getDist() {
  		return dist;
  	}
  
  	public CPU getCpu() {
  		return cpu;
  	}
  
  	public Memory getMem() {
  		return mem;
  	}
  	public String getTime() {
  		return new SimpleDateFormat("HHmm").format(collectTime);
  	}
  	public Load getLoad() {
  		return load;
  	}
  
  	public Disk getDisk() {
  		return disk;
  	}
  
  	public Net getNet() {
  		return net;
  	}
  	public void setHost(String host) {
  		this.host = host;
  	}
  
  	public void setCpus(int cpus) {
  		this.cpus = cpus;
  	}
  
  	public void setNmon(String nmon) {
  		this.nmon = nmon;
  	}
  
  	public void setCpuModel(String cpuModel) {
  		this.cpuModel = cpuModel;
  	}
  	public void setDist(String dist) {
  		this.dist = dist;
  	}
  
  	public void setKernel(String kernel) {
  		this.kernel = kernel;
  	}
  
  	public void setUlimit(String ulimit) {
  		this.ulimit = ulimit;
  	}
  
  	@Override
  	public String toString() {
  		return "Server [timeKey=" + timeKey + ", dateTime=" + dateTime
  				+ ", collectTime=" + collectTime + ", ip=" + ip + ", host="
  				+ host + ", cpus=" + cpus + ", nmon=" + nmon + ", cpuModel="
  				+ cpuModel + ", kernel=" + kernel + ", dist=" + dist
  				+ ", ulimit=" + ulimit + ", cpu=" + cpu + ", mem=" + mem
  				+ ", load=" + load + ", disk=" + disk + ", net=" + net
  				+ ", connection=" + connection + "]";
  	}
  }
  