content: package com.sohu.cache.server.data;
  
  import java.math.BigDecimal;
  import java.util.ArrayList;
  import java.util.List;
  
  import org.apache.commons.lang.math.NumberUtils;
  
  
  /**
   * 网络流量
   */
  public class Net implements LineParser{
  	public static final String FLAG = "NET,";
  	
  	private float nin;
  	private float nout;
  	private StringBuilder ninDetail = new StringBuilder();
  	private StringBuilder noutDetail = new StringBuilder();
  	
  	private List<NetworkInterfaceCard> ncList = new ArrayList<NetworkInterfaceCard>();
  	
  	/**
  	 * line format:
  	 * NET,Network I/O bx-50-13,lo-read-KB/s,eth0-read-KB/s,eth1-read-KB/s,eth2-read-KB/s,eth3-read-KB/s,lo-write-KB/s,eth0-write-KB/s,eth1-write-KB/s,eth2-write-KB/s,eth3-write-KB/s,
  	 * NET,T0001,190.3,3317.8,0.0,0.0,0.0,190.3,3377.7,0.0,0.0,0.0,
  	 */
  	public void parse(String line, String timeKey) throws Exception{
  		if(line.startsWith(FLAG)) {
  			String[] items = line.split(",");
  			if(items[1].startsWith("Network")) {
  				for(int i = 0; i < items.length; ++i) {
  					if(items[i].startsWith("eth")) {
  						NetworkInterfaceCard nic = new NetworkInterfaceCard();
  						nic.setName(items[i]);
  						nic.setIdx(i);
  						ncList.add(nic);
  					}
  				}
  			} else {
  				for(NetworkInterfaceCard nic : ncList) {
  					nic.setValue(NumberUtils.toFloat(items[nic.getIdx()]));
  				}
  				caculate();
  			}
  		}
  	}
  	
  	private void caculate() {
  		float totalIn = 0;
  		float totalOut = 0;
  		for(NetworkInterfaceCard nic : ncList) {
  			String[] array = nic.getName().split("-");
  			if("read".equals(array[1])) {
  				ninDetail.append(array[0]);
  				ninDetail.append(",");
  				ninDetail.append(nic.getValue());
  				ninDetail.append(";");
  				totalIn += nic.getValue();
  			} else if("write".equals(array[1])) {
  				noutDetail.append(array[0]);
  				noutDetail.append(",");
  				noutDetail.append(nic.getValue());
  				noutDetail.append(";");
  				totalOut += nic.getValue();
  			}
  		}
  		nin = new BigDecimal(totalIn).setScale(2, BigDecimal.ROUND_HALF_UP).floatValue(); 
  		nout = new BigDecimal(totalOut).setScale(2, BigDecimal.ROUND_HALF_UP).floatValue(); 
  	}
  	
  	public float getNin() {
  		return nin;
  	}
  
  	public float getNout() {
  		return nout;
  	}
  	public String getNinDetail() {
  		return ninDetail.toString();
  	}
  
  	public String getNoutDetail() {
  		return noutDetail.toString();
  	}
  
  	class NetworkInterfaceCard{
  		private String name;
  		private float value;
  		private int idx;
  		public String getName() {
  			return name;
  		}
  		public void setName(String name) {
  			this.name = name;
  		}
  		public float getValue() {
  			return value;
  		}
  		public void setValue(float value) {
  			this.value = value;
  		}
  		public int getIdx() {
  			return idx;
  		}
  		public void setIdx(int idx) {
  			this.idx = idx;
  		}
  	}
  }
  