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; } } }