stats.java

来自「JGRoups源码」· Java 代码 · 共 199 行

JAVA
199
字号
package org.jgroups.protocols;import org.jgroups.stack.Protocol;import org.jgroups.Event;import org.jgroups.Message;import org.jgroups.Address;import org.jgroups.View;import java.util.*;/** * Provides various stats * @author Bela Ban * @version $Id: STATS.java,v 1.3 2006/01/14 14:00:38 belaban Exp $ */public class STATS extends Protocol {    long sent_msgs, sent_bytes, sent_ucasts, sent_mcasts, received_ucasts, received_mcasts;    long received_msgs, received_bytes, sent_ucast_bytes, sent_mcast_bytes, received_ucast_bytes, received_mcast_bytes;    /** HashMap<Address,Entry>, maintains stats per target destination */    HashMap sent=new HashMap();    /** HashMap<Address,Entry>, maintains stats per receiver */    HashMap received=new HashMap();    static final short UP=1;    static final short DOWN=2;    public String getName() {        return "STATS";    }    public boolean setProperties(Properties props) {        super.setProperties(props);        down_thread=false; // never use a down thread        up_thread=false;   // never use an up thread        if(props.size() > 0) {            log.error("the following properties are not recognized: " + props);            return false;        }        return true;    }    public void resetStats() {        sent_msgs=sent_bytes=sent_ucasts=sent_mcasts=received_ucasts=received_mcasts=0;        received_msgs=received_bytes=sent_ucast_bytes=sent_mcast_bytes=received_ucast_bytes=received_mcast_bytes=0;        sent.clear();        received.clear();    }    public long getSentMessages() {return sent_msgs;}    public long getSentBytes() {return sent_bytes;}    public long getSentUnicastMessages() {return sent_ucasts;}    public long getSentUnicastBytes() {return sent_ucast_bytes;}    public long getSentMcastMessages() {return sent_mcasts;}    public long getSentMcastBytes() {return sent_mcast_bytes;}    public long getReceivedMessages() {return received_msgs;}    public long getReceivedBytes() {return received_bytes;}    public long getReceivedUnicastMessages() {return received_ucasts;}    public long getReceivedUnicastBytes() {return received_ucast_bytes;}    public long getReceivedMcastMessages() {return received_mcasts;}    public long getReceivedMcastBytes() {return received_mcast_bytes;}    public void up(Event evt) {        if(evt.getType() == Event.MSG) {            Message msg=(Message)evt.getArg();            updateStats(msg, UP);        }        else if(evt.getType() == Event.VIEW_CHANGE) {            handleViewChange((View)evt.getArg());        }        passUp(evt);    }    public void down(Event evt) {        if(evt.getType() == Event.MSG) {            Message msg=(Message)evt.getArg();            updateStats(msg, DOWN);        }        else if(evt.getType() == Event.VIEW_CHANGE) {            handleViewChange((View)evt.getArg());        }        passDown(evt);    }    public String printStats() {        Map.Entry entry;        Object key, val;        StringBuffer sb=new StringBuffer();        sb.append("sent:\n");        for(Iterator it=sent.entrySet().iterator(); it.hasNext();) {            entry=(Map.Entry)it.next();            key=entry.getKey();            if(key == null) key="<mcast dest>";            val=entry.getValue();            sb.append(key).append(": ").append(val).append("\n");        }        sb.append("\nreceived:\n");        for(Iterator it=received.entrySet().iterator(); it.hasNext();) {            entry=(Map.Entry)it.next();            key=entry.getKey();            val=entry.getValue();            sb.append(key).append(": ").append(val).append("\n");        }        return sb.toString();    }    private void handleViewChange(View view) {        Vector members=view.getMembers();        Set tmp=new LinkedHashSet(members);        tmp.add(null); // for null destination (= mcast)        sent.keySet().retainAll(tmp);        received.keySet().retainAll(tmp);    }    private void updateStats(Message msg, short direction) {        int     length;        HashMap map;        boolean mcast;        Address dest, src;        if(msg == null) return;        length=msg.getLength();        dest=msg.getDest();        src=msg.getSrc();        mcast=dest == null || dest.isMulticastAddress();        if(direction == UP) { // received            received_msgs++;            received_bytes+=length;            if(mcast) {                received_mcasts++;                received_mcast_bytes+=length;            }            else {                received_ucasts++;                received_ucast_bytes+=length;            }        }        else {                // sent            sent_msgs++;            sent_bytes+=length;            if(mcast) {                sent_mcasts++;                sent_mcast_bytes+=length;            }            else {                sent_ucasts++;                sent_ucast_bytes+=length;            }        }        Address key=direction == UP? src : dest;        map=direction == UP? received : sent;        Entry entry=(Entry)map.get(key);        if(entry == null) {            entry=new Entry();            map.put(key, entry);        }        entry.msgs++;        entry.bytes+=length;        if(mcast) {            entry.mcasts++;            entry.mcast_bytes+=length;        }        else {            entry.ucasts++;            entry.ucast_bytes+=length;        }    }    static class Entry {        long msgs, bytes, ucasts, mcasts, ucast_bytes, mcast_bytes;        public String toString() {            StringBuffer sb=new StringBuffer();            sb.append(msgs).append(" (").append(bytes).append(" bytes)");            sb.append(": ").append(ucasts).append(" ucasts (").append(ucast_bytes).append(" bytes), ");            sb.append(mcasts).append(" mcasts (").append(mcast_bytes).append(" bytes)");            return sb.toString();        }    }}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?