Class SlowQueryReport

  • All Implemented Interfaces:
    java.lang.reflect.InvocationHandler
    Direct Known Subclasses:
    SlowQueryReportJmx

    public class SlowQueryReport
    extends AbstractQueryReport
    Slow query report interceptor. Tracks timing of query executions.
    Version:
    1.0
    • Field Detail

      • perPoolStats

        protected static final java.util.concurrent.ConcurrentHashMap<java.lang.String,​java.util.concurrent.ConcurrentHashMap<java.lang.String,​SlowQueryReport.QueryStats>> perPoolStats
        we will be keeping track of query stats on a per pool basis
      • queries

        protected volatile java.util.concurrent.ConcurrentHashMap<java.lang.String,​SlowQueryReport.QueryStats> queries
        the queries that are used for this interceptor.
      • maxQueries

        protected int maxQueries
        Maximum number of queries we will be storing
      • logSlow

        protected boolean logSlow
        Flag to enable disable logging of slow queries
      • logFailed

        protected boolean logFailed
        Flag to enable disable logging of failed queries
      • queryStatsComparator

        protected final java.util.Comparator<SlowQueryReport.QueryStats> queryStatsComparator
        Sort QueryStats by last invocation time
    • Constructor Detail

      • SlowQueryReport

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

      • getPoolStats

        public static java.util.concurrent.ConcurrentHashMap<java.lang.String,​SlowQueryReport.QueryStats> getPoolStats​(java.lang.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)
      • reportFailedQuery

        protected java.lang.String reportFailedQuery​(java.lang.String query,
                                                     java.lang.Object[] args,
                                                     java.lang.String name,
                                                     long start,
                                                     java.lang.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 java.lang.String reportQuery​(java.lang.String query,
                                               java.lang.Object[] args,
                                               java.lang.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 java.lang.String reportSlowQuery​(java.lang.String query,
                                                   java.lang.Object[] args,
                                                   java.lang.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
      • prepareStatement

        public void prepareStatement​(java.lang.String sql,
                                     long time)
        Description copied from class: AbstractQueryReport
        Invoked when prepareStatement has been called and completed.
        Specified by:
        prepareStatement in class AbstractQueryReport
        Parameters:
        sql - - the string used to prepare the statement with
        time - - the time it took to invoke prepare
      • prepareCall

        public void prepareCall​(java.lang.String sql,
                                long time)
        Description copied from class: AbstractQueryReport
        Invoked when prepareCall has been called and completed.
        Specified by:
        prepareCall in class AbstractQueryReport
        Parameters:
        sql - - the string used to prepare the statement with
        time - - the time it took to invoke prepare
      • poolStarted

        public void poolStarted​(ConnectionPool pool)
        This method is invoked by a connection pool when the pool is first started up, usually when the first connection is requested. Interceptor classes can override this method if they keep static variables or other tracking means around. This method is only invoked on a single instance of the interceptor, and not on every instance created.
        Overrides:
        poolStarted in class JdbcInterceptor
        Parameters:
        pool - - the pool that is being closed.
      • poolClosed

        public void poolClosed​(ConnectionPool pool)
        This method is invoked by a connection pool when the pool is closed. Interceptor classes can override this method if they keep static variables or other tracking means around. This method is only invoked on a single instance of the interceptor, and not on every instance created.
        Overrides:
        poolClosed in class JdbcInterceptor
        Parameters:
        pool - - the pool that is being closed.
      • removeOldest

        protected void removeOldest​(java.util.concurrent.ConcurrentHashMap<java.lang.String,​SlowQueryReport.QueryStats> queries)
        Sort QueryStats by last invocation time
        Parameters:
        queries - The queries map
      • isLogSlow

        public boolean isLogSlow()
      • setLogSlow

        public void setLogSlow​(boolean logSlow)
      • isLogFailed

        public boolean isLogFailed()
      • setLogFailed

        public void setLogFailed​(boolean logFailed)
      • setProperties

        public void setProperties​(java.util.Map<java.lang.String,​PoolProperties.InterceptorProperty> properties)
        Description copied from class: JdbcInterceptor
        Called during the creation of an interceptor The properties can be set during the configuration of an interceptor Override this method to perform type casts between string values and object properties
        Overrides:
        setProperties in class JdbcInterceptor
        Parameters:
        properties - The properties