Package org.apache.mina.filter.statistic
Class ProfilerTimerFilter
- java.lang.Object
-
- org.apache.mina.core.filterchain.IoFilterAdapter
-
- org.apache.mina.filter.statistic.ProfilerTimerFilter
-
- All Implemented Interfaces:
IoFilter
public class ProfilerTimerFilter extends IoFilterAdapter
This class will measure the time it takes for a method in theIoFilterAdapterclass to execute. The basic premise of the logic in this class is to get the current time at the beginning of the method, call method on nextFilter, and then get the current time again. An example of how to use the filter is:ProfilerTimerFilter profiler = new ProfilerTimerFilter(TimeUnit.MILLISECOND, IoEventType.MESSAGE_RECEIVED); chain.addFirst("Profiler", profiler);The profiledIoEventTypeare :- IoEventType.MESSAGE_RECEIVED
- IoEventType.MESSAGE_SENT
- IoEventType.SESSION_CREATED
- IoEventType.SESSION_OPENED
- IoEventType.SESSION_IDLE
- IoEventType.SESSION_CLOSED
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description private classProfilerTimerFilter.TimerWorkerClass that will track the time each method takes and be able to provide information for each method.-
Nested classes/interfaces inherited from interface org.apache.mina.core.filterchain.IoFilter
IoFilter.NextFilter
-
-
Field Summary
Fields Modifier and Type Field Description private ProfilerTimerFilter.TimerWorkermessageReceivedTimerWorkerA TimerWorker for the MessageReceived eventsprivate ProfilerTimerFilter.TimerWorkermessageSentTimerWorkerA TimerWorker for the MessageSent eventsprivate booleanprofileMessageReceivedA flag to tell the filter that the MessageReceived must be profiledprivate booleanprofileMessageSentA flag to tell the filter that the MessageSent must be profiledprivate booleanprofileSessionClosedA flag to tell the filter that the SessionClosed must be profiledprivate booleanprofileSessionCreatedA flag to tell the filter that the SessionCreated must be profiledprivate booleanprofileSessionIdleA flag to tell the filter that the SessionIdle must be profiledprivate booleanprofileSessionOpenedA flag to tell the filter that the SessionOpened must be profiledprivate ProfilerTimerFilter.TimerWorkersessionClosedTimerWorkerA TimerWorker for the SessionClosed eventsprivate ProfilerTimerFilter.TimerWorkersessionCreatedTimerWorkerA TimerWorker for the SessionCreated eventsprivate ProfilerTimerFilter.TimerWorkersessionIdleTimerWorkerA TimerWorker for the SessionIdle eventsprivate ProfilerTimerFilter.TimerWorkersessionOpenedTimerWorkerA TimerWorker for the SessionOpened eventsprivate java.util.concurrent.TimeUnittimeUnitTRhe selected time unit
-
Constructor Summary
Constructors Constructor Description ProfilerTimerFilter()Creates a new instance of ProfilerFilter.ProfilerTimerFilter(java.util.concurrent.TimeUnit timeUnit)Creates a new instance of ProfilerFilter.ProfilerTimerFilter(java.util.concurrent.TimeUnit timeUnit, IoEventType... eventTypes)Creates a new instance of ProfilerFilter.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description doublegetAverageTime(IoEventType type)Get the average time for the specified method represented by theIoEventTypejava.util.Set<IoEventType>getEventsToProfile()Return the set ofIoEventTypewhich are profiled.longgetMaximumTime(IoEventType type)The maximum time the method represented byIoEventTypehas executedlonggetMinimumTime(IoEventType type)The minimum time the method represented byIoEventTypehas executedlonggetTotalCalls(IoEventType type)Gets the total number of times the method has been called that is represented by theIoEventTypelonggetTotalTime(IoEventType type)The total time this method has been executingvoidmessageReceived(IoFilter.NextFilter nextFilter, IoSession session, java.lang.Object message)Profile a MessageReceived event.voidmessageSent(IoFilter.NextFilter nextFilter, IoSession session, WriteRequest writeRequest)Profile a MessageSent event.voidprofile(IoEventType type)Set theIoEventTypeto be profiledvoidsessionClosed(IoFilter.NextFilter nextFilter, IoSession session)Profile a SessionClosed event.voidsessionCreated(IoFilter.NextFilter nextFilter, IoSession session)Profile a SessionCreated event.voidsessionIdle(IoFilter.NextFilter nextFilter, IoSession session, IdleStatus status)Profile a SessionIdle event.voidsessionOpened(IoFilter.NextFilter nextFilter, IoSession session)Profile a SessionOpened event.voidsetEventsToProfile(IoEventType... eventTypes)Set the profilers for a list ofIoEventTypeprivate voidsetProfilers(IoEventType... eventTypes)Create the profilers for a list ofIoEventType.voidsetTimeUnit(java.util.concurrent.TimeUnit timeUnit)Sets theTimeUnitbeing used.voidstopProfile(IoEventType type)Stop profiling anIoEventTypeprivate longtimeNow()-
Methods inherited from class org.apache.mina.core.filterchain.IoFilterAdapter
destroy, event, exceptionCaught, filterClose, filterWrite, init, inputClosed, onPostAdd, onPostRemove, onPreAdd, onPreRemove, toString
-
-
-
-
Field Detail
-
timeUnit
private volatile java.util.concurrent.TimeUnit timeUnit
TRhe selected time unit
-
messageReceivedTimerWorker
private ProfilerTimerFilter.TimerWorker messageReceivedTimerWorker
A TimerWorker for the MessageReceived events
-
profileMessageReceived
private boolean profileMessageReceived
A flag to tell the filter that the MessageReceived must be profiled
-
messageSentTimerWorker
private ProfilerTimerFilter.TimerWorker messageSentTimerWorker
A TimerWorker for the MessageSent events
-
profileMessageSent
private boolean profileMessageSent
A flag to tell the filter that the MessageSent must be profiled
-
sessionCreatedTimerWorker
private ProfilerTimerFilter.TimerWorker sessionCreatedTimerWorker
A TimerWorker for the SessionCreated events
-
profileSessionCreated
private boolean profileSessionCreated
A flag to tell the filter that the SessionCreated must be profiled
-
sessionOpenedTimerWorker
private ProfilerTimerFilter.TimerWorker sessionOpenedTimerWorker
A TimerWorker for the SessionOpened events
-
profileSessionOpened
private boolean profileSessionOpened
A flag to tell the filter that the SessionOpened must be profiled
-
sessionIdleTimerWorker
private ProfilerTimerFilter.TimerWorker sessionIdleTimerWorker
A TimerWorker for the SessionIdle events
-
profileSessionIdle
private boolean profileSessionIdle
A flag to tell the filter that the SessionIdle must be profiled
-
sessionClosedTimerWorker
private ProfilerTimerFilter.TimerWorker sessionClosedTimerWorker
A TimerWorker for the SessionClosed events
-
profileSessionClosed
private boolean profileSessionClosed
A flag to tell the filter that the SessionClosed must be profiled
-
-
Constructor Detail
-
ProfilerTimerFilter
public ProfilerTimerFilter()
Creates a new instance of ProfilerFilter. This is the default constructor and will print out timings for messageReceived and messageSent and the time increment will be in milliseconds.
-
ProfilerTimerFilter
public ProfilerTimerFilter(java.util.concurrent.TimeUnit timeUnit)
Creates a new instance of ProfilerFilter. This is the default constructor and will print out timings for messageReceived and messageSent.- Parameters:
timeUnit- the time increment to set
-
ProfilerTimerFilter
public ProfilerTimerFilter(java.util.concurrent.TimeUnit timeUnit, IoEventType... eventTypes)Creates a new instance of ProfilerFilter. An example of this call would be:new ProfilerTimerFilter(TimeUnit.MILLISECONDS, IoEventType.MESSAGE_RECEIVED, IoEventType.MESSAGE_SENT);
Note : you can add as manyIoEventTypeas you want. The method accepts a variable number of arguments.- Parameters:
timeUnit- Used to determine the level of precision you need in your timing.eventTypes- A list ofIoEventTyperepresentation of the methods to profile
-
-
Method Detail
-
setProfilers
private void setProfilers(IoEventType... eventTypes)
Create the profilers for a list ofIoEventType.- Parameters:
eventTypes- the list ofIoEventTypeto profile
-
setTimeUnit
public void setTimeUnit(java.util.concurrent.TimeUnit timeUnit)
Sets theTimeUnitbeing used.- Parameters:
timeUnit- the newTimeUnitto be used.
-
profile
public void profile(IoEventType type)
Set theIoEventTypeto be profiled- Parameters:
type- TheIoEventTypeto profile
-
stopProfile
public void stopProfile(IoEventType type)
Stop profiling anIoEventType- Parameters:
type- TheIoEventTypeto stop profiling
-
getEventsToProfile
public java.util.Set<IoEventType> getEventsToProfile()
Return the set ofIoEventTypewhich are profiled.- Returns:
- a Set containing all the profiled
IoEventType
-
setEventsToProfile
public void setEventsToProfile(IoEventType... eventTypes)
Set the profilers for a list ofIoEventType- Parameters:
eventTypes- the list ofIoEventTypeto profile
-
messageReceived
public void messageReceived(IoFilter.NextFilter nextFilter, IoSession session, java.lang.Object message) throws java.lang.Exception
Profile a MessageReceived event. This method will gather the following informations : - the method duration - the shortest execution time - the slowest execution time - the average execution time - the global number of calls- Specified by:
messageReceivedin interfaceIoFilter- Overrides:
messageReceivedin classIoFilterAdapter- Parameters:
nextFilter- The filter to call nextsession- The associated sessionmessage- the received message- Throws:
java.lang.Exception- If an error occurred while processing the event
-
messageSent
public void messageSent(IoFilter.NextFilter nextFilter, IoSession session, WriteRequest writeRequest) throws java.lang.Exception
Profile a MessageSent event. This method will gather the following informations : - the method duration - the shortest execution time - the slowest execution time - the average execution time - the global number of calls- Specified by:
messageSentin interfaceIoFilter- Overrides:
messageSentin classIoFilterAdapter- Parameters:
nextFilter- The filter to call nextsession- The associated sessionwriteRequest- the sent message- Throws:
java.lang.Exception- If an error occurred while processing the event
-
sessionCreated
public void sessionCreated(IoFilter.NextFilter nextFilter, IoSession session) throws java.lang.Exception
Profile a SessionCreated event. This method will gather the following informations : - the method duration - the shortest execution time - the slowest execution time - the average execution time - the global number of calls- Specified by:
sessionCreatedin interfaceIoFilter- Overrides:
sessionCreatedin classIoFilterAdapter- Parameters:
nextFilter- The filter to call nextsession- The associated session- Throws:
java.lang.Exception- If an error occurred while processing the event
-
sessionOpened
public void sessionOpened(IoFilter.NextFilter nextFilter, IoSession session) throws java.lang.Exception
Profile a SessionOpened event. This method will gather the following informations : - the method duration - the shortest execution time - the slowest execution time - the average execution time - the global number of calls- Specified by:
sessionOpenedin interfaceIoFilter- Overrides:
sessionOpenedin classIoFilterAdapter- Parameters:
nextFilter- The filter to call nextsession- The associated session- Throws:
java.lang.Exception- If an error occurred while processing the event
-
sessionIdle
public void sessionIdle(IoFilter.NextFilter nextFilter, IoSession session, IdleStatus status) throws java.lang.Exception
Profile a SessionIdle event. This method will gather the following informations : - the method duration - the shortest execution time - the slowest execution time - the average execution time - the global number of calls- Specified by:
sessionIdlein interfaceIoFilter- Overrides:
sessionIdlein classIoFilterAdapter- Parameters:
nextFilter- The filter to call nextsession- The associated sessionstatus- The session's status- Throws:
java.lang.Exception- If an error occurred while processing the event
-
sessionClosed
public void sessionClosed(IoFilter.NextFilter nextFilter, IoSession session) throws java.lang.Exception
Profile a SessionClosed event. This method will gather the following informations : - the method duration - the shortest execution time - the slowest execution time - the average execution time - the global number of calls- Specified by:
sessionClosedin interfaceIoFilter- Overrides:
sessionClosedin classIoFilterAdapter- Parameters:
nextFilter- The filter to call nextsession- The associated session- Throws:
java.lang.Exception- If an error occurred while processing the event
-
getAverageTime
public double getAverageTime(IoEventType type)
Get the average time for the specified method represented by theIoEventType- Parameters:
type- TheIoEventTypethat the user wants to get the average method call time- Returns:
- The average time it took to execute the method represented by the
IoEventType
-
getTotalCalls
public long getTotalCalls(IoEventType type)
Gets the total number of times the method has been called that is represented by theIoEventType- Parameters:
type- TheIoEventTypethat the user wants to get the total number of method calls- Returns:
- The total number of method calls for the method represented by the
IoEventType
-
getTotalTime
public long getTotalTime(IoEventType type)
The total time this method has been executing- Parameters:
type- TheIoEventTypethat the user wants to get the total time this method has been executing- Returns:
- The total time for the method represented by the
IoEventType
-
getMinimumTime
public long getMinimumTime(IoEventType type)
The minimum time the method represented byIoEventTypehas executed- Parameters:
type- TheIoEventTypethat the user wants to get the minimum time this method has executed- Returns:
- The minimum time this method has executed represented by the
IoEventType
-
getMaximumTime
public long getMaximumTime(IoEventType type)
The maximum time the method represented byIoEventTypehas executed- Parameters:
type- TheIoEventTypethat the user wants to get the maximum time this method has executed- Returns:
- The maximum time this method has executed represented by the
IoEventType
-
timeNow
private long timeNow()
- Returns:
- the current time, expressed using the fixed TimeUnit.
-
-