Class SlowQueryReport

All Implemented Interfaces:
InvocationHandler
Direct Known Subclasses:
SlowQueryReportJmx

public class SlowQueryReport extends AbstractQueryReport
Slow query report interceptor. Tracks timing of query executions.
  • Field Details

  • Constructor Details

    • SlowQueryReport

      public SlowQueryReport()
      Creates a slow query report interceptor
  • Method Details

    • getPoolStats

      public static ConcurrentHashMap<String, SlowQueryReport.QueryStats> getPoolStats(String poolname)
      Returns the query stats for a given pool
      Parameters:
      poolname - - the name of the pool we want to retrieve stats for
      Returns:
      a hash map containing statistics for 0 to maxQueries
    • setMaxQueries

      public void setMaxQueries(int maxQueries)
      Sets the maximum number of queries to track statistics for.
      Parameters:
      maxQueries - the maximum number of queries
    • reportFailedQuery

      protected String reportFailedQuery(String query, Object[] args, String name, long start, Throwable t)
      Description copied from class: AbstractQueryReport
      Invoked when a query execution, a call to execute/executeQuery or executeBatch failed.
      Overrides:
      reportFailedQuery in class AbstractQueryReport
      Parameters:
      query - the query that was executed and failed
      args - the arguments to the execution
      name - the name of the method used to execute AbstractCreateStatementInterceptor.isExecute(Method, boolean)
      start - the time the query execution started
      t - the exception that happened
      Returns:
      - the SQL that was executed or the string "batch" if it was a batch execution
    • reportQuery

      protected String reportQuery(String query, Object[] args, String name, long start, long delta)
      Description copied from class: AbstractQueryReport
      Invoked when a query execution, a call to execute/executeQuery or executeBatch succeeded and was within the timing threshold
      Overrides:
      reportQuery in class AbstractQueryReport
      Parameters:
      query - the query that was executed and failed
      args - the arguments to the execution
      name - the name of the method used to execute AbstractCreateStatementInterceptor.isExecute(Method, boolean)
      start - the time the query execution started
      delta - the time the execution took
      Returns:
      - the SQL that was executed or the string "batch" if it was a batch execution
    • reportSlowQuery

      protected String reportSlowQuery(String query, Object[] args, String name, long start, long delta)
      Description copied from class: AbstractQueryReport
      Invoked when a query execution, a call to execute/executeQuery or executeBatch succeeded and was exceeded the timing threshold
      Overrides:
      reportSlowQuery in class AbstractQueryReport
      Parameters:
      query - the query that was executed and failed
      args - the arguments to the execution
      name - the name of the method used to execute AbstractCreateStatementInterceptor.isExecute(Method, boolean)
      start - the time the query execution started
      delta - the time the execution took
      Returns:
      - the SQL that was executed or the string "batch" if it was a batch execution
    • closeInvoked

      public void closeInvoked()
      invoked when the connection receives the close request Not used for now.
      Specified by:
      closeInvoked in class AbstractCreateStatementInterceptor
    • prepareStatement

      public void prepareStatement(String sql, long time)
      Tracks the preparation time for a prepared statement.
      Specified by:
      prepareStatement in class AbstractQueryReport
      Parameters:
      sql - the SQL statement
      time - the time taken to prepare the statement
    • prepareCall

      public void prepareCall(String sql, long time)
      Tracks the preparation time for a callable statement.
      Specified by:
      prepareCall in class AbstractQueryReport
      Parameters:
      sql - the SQL call
      time - the time taken to prepare the call
    • poolStarted

      public void poolStarted(ConnectionPool pool)
      Initializes the query statistics map for the given connection pool.
      Overrides:
      poolStarted in class JdbcInterceptor
      Parameters:
      pool - the connection pool that has started
    • poolClosed

      public void poolClosed(ConnectionPool pool)
      Removes the query statistics map for the given connection pool.
      Overrides:
      poolClosed in class JdbcInterceptor
      Parameters:
      pool - the connection pool that has been closed
    • getQueryStats

      protected SlowQueryReport.QueryStats getQueryStats(String sql)
      Retrieves or creates a QueryStats entry for the given SQL string.
      Parameters:
      sql - the SQL query string
      Returns:
      the query statistics, or null if the pool has been closed
    • removeOldest

      protected void removeOldest(ConcurrentHashMap<String, SlowQueryReport.QueryStats> queries)
      Sort QueryStats by last invocation time
      Parameters:
      queries - The queries map
    • reset

      public void reset(ConnectionPool parent, PooledConnection con)
      Resets the query statistics reference when a connection is reset.
      Overrides:
      reset in class AbstractCreateStatementInterceptor
      Parameters:
      parent - the connection pool
      con - the pooled connection being reset
    • isLogSlow

      public boolean isLogSlow()
      Returns whether slow query logging is enabled.
      Returns:
      true if slow query logging is enabled
    • setLogSlow

      public void setLogSlow(boolean logSlow)
      Enables or disables slow query logging.
      Parameters:
      logSlow - true to enable slow query logging
    • isLogFailed

      public boolean isLogFailed()
      Returns whether failed query logging is enabled.
      Returns:
      true if failed query logging is enabled
    • setLogFailed

      public void setLogFailed(boolean logFailed)
      Enables or disables failed query logging.
      Parameters:
      logFailed - true to enable failed query logging
    • setProperties

      public void setProperties(Map<String, PoolProperties.InterceptorProperty> properties)
      Configures this interceptor from the given properties map, supporting threshold, maxQueries, logSlow, and logFailed settings.
      Overrides:
      setProperties in class JdbcInterceptor
      Parameters:
      properties - the interceptor properties