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 the IoFilterAdapter class 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 profiled IoEventType are :
  • IoEventType.MESSAGE_RECEIVED
  • IoEventType.MESSAGE_SENT
  • IoEventType.SESSION_CREATED
  • IoEventType.SESSION_OPENED
  • IoEventType.SESSION_IDLE
  • IoEventType.SESSION_CLOSED
  • Field Details

    • timeUnit

      private volatile 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 Details

    • 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(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(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 many IoEventType as 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 of IoEventType representation of the methods to profile
  • Method Details

    • setProfilers

      private void setProfilers(IoEventType... eventTypes)
      Create the profilers for a list of IoEventType.
      Parameters:
      eventTypes - the list of IoEventType to profile
    • setTimeUnit

      public void setTimeUnit(TimeUnit timeUnit)
      Sets the TimeUnit being used.
      Parameters:
      timeUnit - the new TimeUnit to be used.
    • profile

      public void profile(IoEventType type)
      Set the IoEventType to be profiled
      Parameters:
      type - The IoEventType to profile
    • stopProfile

      public void stopProfile(IoEventType type)
      Stop profiling an IoEventType
      Parameters:
      type - The IoEventType to stop profiling
    • getEventsToProfile

      public Set<IoEventType> getEventsToProfile()
      Return the set of IoEventType which are profiled.
      Returns:
      a Set containing all the profiled IoEventType
    • setEventsToProfile

      public void setEventsToProfile(IoEventType... eventTypes)
      Set the profilers for a list of IoEventType
      Parameters:
      eventTypes - the list of IoEventType to profile
    • messageReceived

      public void messageReceived(IoFilter.NextFilter nextFilter, IoSession session, Object message) throws 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:
      messageReceived in interface IoFilter
      Overrides:
      messageReceived in class IoFilterAdapter
      Parameters:
      nextFilter - The filter to call next
      session - The associated session
      message - the received message
      Throws:
      Exception - If an error occurred while processing the event
    • messageSent

      public void messageSent(IoFilter.NextFilter nextFilter, IoSession session, WriteRequest writeRequest) throws 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:
      messageSent in interface IoFilter
      Overrides:
      messageSent in class IoFilterAdapter
      Parameters:
      nextFilter - The filter to call next
      session - The associated session
      writeRequest - the sent message
      Throws:
      Exception - If an error occurred while processing the event
    • sessionCreated

      public void sessionCreated(IoFilter.NextFilter nextFilter, IoSession session) throws 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:
      sessionCreated in interface IoFilter
      Overrides:
      sessionCreated in class IoFilterAdapter
      Parameters:
      nextFilter - The filter to call next
      session - The associated session
      Throws:
      Exception - If an error occurred while processing the event
    • sessionOpened

      public void sessionOpened(IoFilter.NextFilter nextFilter, IoSession session) throws 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:
      sessionOpened in interface IoFilter
      Overrides:
      sessionOpened in class IoFilterAdapter
      Parameters:
      nextFilter - The filter to call next
      session - The associated session
      Throws:
      Exception - If an error occurred while processing the event
    • sessionIdle

      public void sessionIdle(IoFilter.NextFilter nextFilter, IoSession session, IdleStatus status) throws 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:
      sessionIdle in interface IoFilter
      Overrides:
      sessionIdle in class IoFilterAdapter
      Parameters:
      nextFilter - The filter to call next
      session - The associated session
      status - The session's status
      Throws:
      Exception - If an error occurred while processing the event
    • sessionClosed

      public void sessionClosed(IoFilter.NextFilter nextFilter, IoSession session) throws 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:
      sessionClosed in interface IoFilter
      Overrides:
      sessionClosed in class IoFilterAdapter
      Parameters:
      nextFilter - The filter to call next
      session - The associated session
      Throws:
      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 the IoEventType
      Parameters:
      type - The IoEventType that 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 the IoEventType
      Parameters:
      type - The IoEventType that 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 - The IoEventType that 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 by IoEventType has executed
      Parameters:
      type - The IoEventType that 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 by IoEventType has executed
      Parameters:
      type - The IoEventType that 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.