# Class ThroughputInterceptor

java.lang.Object
org.apache.catalina.tribes.group.ChannelInterceptorBase
org.apache.catalina.tribes.group.interceptors.ThroughputInterceptor

All Implemented Interfaces:
  `ChannelInterceptor, ThroughputInterceptorMBean, Heartbeat, MembershipListener`

public class ThroughputInterceptor extends ChannelInterceptorBase implements ThroughputInterceptorMBean
Interceptor that measures and reports message throughput statistics.

## Nested Class Summary

### Nested classes/interfaces inherited from interface ChannelInterceptor

`ChannelInterceptor.InterceptorEvent`

## Field Summary

Fields
Modifier and Type
Field
Description
`protected static final StringManager`
`sm`
The string manager for this package.

### Fields inherited from class ChannelInterceptorBase

`optionFlag`

## Constructor Summary

Constructors
Constructor
Description
`ThroughputInterceptor()`
Constructs a new ThroughputInterceptor.

## Method Summary

Modifier and Type
Method
Description
`int`
`getInterval()`
Returns the reporting interval in milliseconds.
`double`
`getLastCnt()`
Returns the last message count.
`double`
`getMbAppTx()`
Returns the application-layer transmit rate in MB/s.
`double`
`getMbRx()`
Returns the receive rate in MB/s.
`double`
`getMbTx()`
Returns the transmit rate in MB/s.
`AtomicLong`
`getMsgRxCnt()`
Returns the received message count.
`AtomicLong`
`getMsgTxCnt()`
Returns the transmitted message count.
`AtomicLong`
`getMsgTxErr()`
Returns the transmit error count.
`long`
`getRxStart()`
Returns the receive start timestamp.
`double`
`getTimeTx()`
Returns the last transmit time.
`long`
`getTxStart()`
Returns the transmit start timestamp.
`void`
`messageReceived(ChannelMessage msg)`
The `messageReceived` is invoked when a message is received.
`void`
`report(double timeTx)`
Reports throughput statistics.
`void`
`sendMessage(Member[] destination, ChannelMessage msg, InterceptorPayload payload)`
The `sendMessage` method is called when a message is being sent to one more destinations.
`void`
`setInterval(int interval)`
Sets the reporting interval in milliseconds.

### Methods inherited from class ChannelInterceptorBase

`fireInterceptorEvent, getChannel, getLocalMember, getMember, getMembers, getNext, getOptionFlag, getPrevious, hasMembers, heartbeat, memberAdded, memberDisappeared, okToProcess, setChannel, setNext, setOptionFlag, setPrevious, start, stop`

### Methods inherited from class Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Methods inherited from interface ThroughputInterceptorMBean

`getOptionFlag`

## Field Details

### sm

protected static final StringManager sm
The string manager for this package.

## Constructor Details

### ThroughputInterceptor

public ThroughputInterceptor()
Constructs a new ThroughputInterceptor.

## Method Details

### sendMessage

public void sendMessage(Member[] destination, ChannelMessage msg, InterceptorPayload payload) throws ChannelException
Description copied from interface: `ChannelInterceptor`
The `sendMessage` method is called when a message is being sent to one more destinations. The interceptor can modify any of the parameters and then pass on the message down the stack by invoking `getNext().sendMessage(destination,msg,payload)`.

Alternatively the interceptor can stop the message from being sent by not invoking `getNext().sendMessage(destination,msg,payload)`.

If the message is to be sent asynchronous the application can be notified of completion and errors by passing in an error handler attached to a payload object.

The ChannelMessage.getAddress contains Channel.getLocalMember, and can be overwritten to simulate a message sent from another node.

Specified by:
  `sendMessage` in interface `ChannelInterceptor`
Overrides:
  `sendMessage` in class `ChannelInterceptorBase`
Parameters:
  `destination` - Member[] - the destination for this message
  `msg` - ChannelMessage - the message to be sent
  `payload` - InterceptorPayload - the payload, carrying an error handler and future useful data, can be null
Throws:
  `ChannelException` - if a serialization error happens.
See Also:
  - `ErrorHandler`
  - `InterceptorPayload`

### messageReceived

public void messageReceived(ChannelMessage msg)
Description copied from interface: `ChannelInterceptor`
The `messageReceived` is invoked when a message is received. `ChannelMessage.getAddress()` is the sender, or the reply-to address if it has been overwritten.

Specified by:
  `messageReceived` in interface `ChannelInterceptor`
Overrides:
  `messageReceived` in class `ChannelInterceptorBase`
Parameters:
  `msg` - ChannelMessage

### report

public void report(double timeTx)
Description copied from interface: `ThroughputInterceptorMBean`
Reports throughput statistics.

Specified by:
  `report` in interface `ThroughputInterceptorMBean`
Parameters:
  `timeTx` - the transmit time

### setInterval

public void setInterval(int interval)
Description copied from interface: `ThroughputInterceptorMBean`
Sets the reporting interval in milliseconds.

Specified by:
  `setInterval` in interface `ThroughputInterceptorMBean`
Parameters:
  `interval` - the interval

### getInterval

public int getInterval()
Description copied from interface: `ThroughputInterceptorMBean`
Returns the reporting interval in milliseconds.

Specified by:
  `getInterval` in interface `ThroughputInterceptorMBean`
Returns:
  the interval

### getLastCnt

public double getLastCnt()
Description copied from interface: `ThroughputInterceptorMBean`
Returns the last message count.

Specified by:
  `getLastCnt` in interface `ThroughputInterceptorMBean`
Returns:
  the last count

### getMbAppTx

public double getMbAppTx()
Description copied from interface: `ThroughputInterceptorMBean`
Returns the application-layer transmit rate in MB/s.

Specified by:
  `getMbAppTx` in interface `ThroughputInterceptorMBean`
Returns:
  the MB/s rate

### getMbRx

public double getMbRx()
Description copied from interface: `ThroughputInterceptorMBean`
Returns the receive rate in MB/s.

Specified by:
  `getMbRx` in interface `ThroughputInterceptorMBean`
Returns:
  the MB/s rate

### getMbTx

public double getMbTx()
Description copied from interface: `ThroughputInterceptorMBean`
Returns the transmit rate in MB/s.

Specified by:
  `getMbTx` in interface `ThroughputInterceptorMBean`
Returns:
  the MB/s rate

### getMsgRxCnt

public AtomicLong getMsgRxCnt()
Description copied from interface: `ThroughputInterceptorMBean`
Returns the received message count.

Specified by:
  `getMsgRxCnt` in interface `ThroughputInterceptorMBean`
Returns:
  the count

### getMsgTxCnt

public AtomicLong getMsgTxCnt()
Description copied from interface: `ThroughputInterceptorMBean`
Returns the transmitted message count.

Specified by:
  `getMsgTxCnt` in interface `ThroughputInterceptorMBean`
Returns:
  the count

### getMsgTxErr

public AtomicLong getMsgTxErr()
Description copied from interface: `ThroughputInterceptorMBean`
Returns the transmit error count.

Specified by:
  `getMsgTxErr` in interface `ThroughputInterceptorMBean`
Returns:
  the count

### getRxStart

public long getRxStart()
Description copied from interface: `ThroughputInterceptorMBean`
Returns the receive start timestamp.

Specified by:
  `getRxStart` in interface `ThroughputInterceptorMBean`
Returns:
  the timestamp

### getTimeTx

public double getTimeTx()
Description copied from interface: `ThroughputInterceptorMBean`
Returns the last transmit time.

Specified by:
  `getTimeTx` in interface `ThroughputInterceptorMBean`
Returns:
  the time

### getTxStart

public long getTxStart()
Description copied from interface: `ThroughputInterceptorMBean`
Returns the transmit start timestamp.

Specified by:
  `getTxStart` in interface `ThroughputInterceptorMBean`
Returns:
  the timestamp