📄 statisticfilter.java
字号:
/****************************************************************************
* Package : com.ecSolutions.ecAppServer.server.filter
* File : StatisticFilter.java
* Create Date : 2007-7-20
* Author : Steven Chen
*
* Copyright(C) 2006 ecSolutions(shanghai) Co.,Limited.All Rights Reserved.
*
***************************************************************************/
package com.ecSolutions.ecAppServer.server.filter;
import com.ecSolutions.ecAppServer.server.Packet;
import com.ecSolutions.ecAppServer.server.Session;
import com.ecSolutions.ecAppServer.server.SessionFilterAdapter;
import com.ecSolutions.ecAppServer.server.SessionFilterChain;
import com.ecSolutions.ecAppServer.server.util.Speed;
/**
* Statistic filter.
*
* @author Steven Chen
* @version $Id: StatisticFilter.java,v 1.2 2007/07/26 03:24:37 stevenchen Exp $
*/
public class StatisticFilter extends SessionFilterAdapter {
private final Session session;
private final Speed received = Speed.getInstance();
private final Speed sent = Speed.getInstance();
private volatile boolean stopped;
// when stopped, use these values.
private double avgReceiveSpeed = 0;
private double avgSendSpeed = 0;
private long elapsedTime = 0;
/**
* Construct a statistic filter monitor all sessions.
*/
public StatisticFilter() {
this.session = null;
stopped = false;
}
/**
* Construct a statistic filter monitor special session.
*
* @param session
* monitor special session
*/
public StatisticFilter(Session session) {
this.session = session;
stopped = true;
}
public boolean isStopped() {
return stopped;
}
public void start() {
stopped = false;
}
public void stop() {
avgReceiveSpeed = received.getAvgSpeed();
avgSendSpeed = sent.getAvgSpeed();
elapsedTime = received.getElapsedTime();
stopped = true;
}
/**
* Get average receive speed, in byte/s.
*
* @return average receive speed.
*/
public double getAvgReceiveSpeed() {
return stopped ? avgReceiveSpeed : received.getAvgSpeed();
}
/**
* Get average send speed, in byte/s.
*
* @return average send speed.
*/
public double getAvgSendSpeed() {
return stopped ? avgSendSpeed : sent.getAvgSpeed();
}
/**
* Get elapsed time after session started and before session closed, in ms.
*
* @return elapsed time
*/
public long getElapsedTime() {
return stopped ? elapsedTime : received.getElapsedTime();
}
/**
* Get received bytes count. If session restart, the value will reset to 0.
*
* @return received bytes count
*/
public long getReceivedBytes() {
return received.getTotalValue();
}
/**
* Get sent bytes count. If session restart, the value will reset to 0.
*
* @return sent bytes count
*/
public long getSentBytes() {
return sent.getTotalValue();
}
/**
* Get instantaneous receive speed, in byte/s.
*
* @return received speed
*/
public double getReceiveSpeed() {
return stopped ? 0 : received.getSpeed();
}
/**
* Get instantaneous send speed, in byte/s.
*
* @return send speed
*/
public double getSendSpeed() {
return stopped ? 0 : sent.getSpeed();
}
/**
* Reset.
*/
public void reset() {
avgReceiveSpeed = 0;
avgSendSpeed = 0;
elapsedTime = 0;
received.reset();
sent.reset();
}
public void sessionStarted(SessionFilterChain filterChain) throws Exception {
if (session == filterChain.getSession()) {
reset();
start();
}
super.sessionStarted(filterChain);
}
public void sessionClosed(SessionFilterChain filterChain) throws Exception {
if (session == filterChain.getSession()) {
stop();
}
super.sessionClosed(filterChain);
}
public void packetReceived(SessionFilterChain filterChain, Packet packet)
throws Exception {
if (session == null || session == filterChain.getSession()) {
received.addValue(packet.getContent().remaining());
}
super.packetReceived(filterChain, packet);
}
public void packetSent(SessionFilterChain filterChain, Packet packet)
throws Exception {
if (session == null || session == filterChain.getSession()) {
sent.addValue(packet.getContent().remaining());
}
super.packetSent(filterChain, packet);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -