You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by md...@apache.org on 2014/02/06 15:29:47 UTC

svn commit: r1565277 - /jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/QueryManagerImpl.java

Author: mduerig
Date: Thu Feb  6 14:29:46 2014
New Revision: 1565277

URL: http://svn.apache.org/r1565277
Log:
OAK-1338: Implement QueryStat from Jackrabbit API
Implement repository statistics: query count and query duration

Modified:
    jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/QueryManagerImpl.java

Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/QueryManagerImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/QueryManagerImpl.java?rev=1565277&r1=1565276&r2=1565277&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/QueryManagerImpl.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/QueryManagerImpl.java Thu Feb  6 14:29:46 2014
@@ -18,6 +18,9 @@
  */
 package org.apache.jackrabbit.oak.jcr.query;
 
+import static org.apache.jackrabbit.api.stats.RepositoryStatistics.Type.QUERY_COUNT;
+import static org.apache.jackrabbit.api.stats.RepositoryStatistics.Type.QUERY_DURATION;
+
 import java.text.ParseException;
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -25,6 +28,7 @@ import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
+import java.util.concurrent.atomic.AtomicLong;
 
 import javax.jcr.Node;
 import javax.jcr.RepositoryException;
@@ -55,6 +59,8 @@ public class QueryManagerImpl implements
     private final QueryObjectModelFactoryImpl qomFactory;
     private final QueryEngine queryEngine;
     private final HashSet<String> supportedQueryLanguages = new HashSet<String>();
+    private final AtomicLong queryCount;
+    private final AtomicLong queryDuration;
 
     public QueryManagerImpl(SessionContext sessionContext) {
         this.sessionDelegate = sessionContext.getSessionDelegate();
@@ -62,6 +68,8 @@ public class QueryManagerImpl implements
         qomFactory = new QueryObjectModelFactoryImpl(this, sessionContext);
         queryEngine = sessionDelegate.getQueryEngine();
         supportedQueryLanguages.addAll(queryEngine.getSupportedQueryLanguages());
+        queryCount = sessionContext.getCounter(QUERY_COUNT);
+        queryDuration = sessionContext.getCounter(QUERY_DURATION);
     }
 
     @Override
@@ -120,12 +128,15 @@ public class QueryManagerImpl implements
             long limit, long offset, HashMap<String, Value> bindVariableMap) throws RepositoryException {
         try {
             Map<String, PropertyValue> bindMap = convertMap(bindVariableMap);
-            long t = System.nanoTime();
+            long t0 = System.nanoTime();
             Result r = queryEngine.executeQuery(
                     statement, language, limit, offset, bindMap,
                     sessionContext.getSessionLocalMappings());
+            queryCount.incrementAndGet();
+            long dt = (System.nanoTime() - t0) / 1000000;
+            queryDuration.addAndGet(dt);
             sessionContext.getStatisticManager()
-                    .logQueryEvaluationTime(language, statement, (System.nanoTime() - t) / 1000000);
+                    .logQueryEvaluationTime(language, statement, dt);
             return new QueryResultImpl(sessionContext, r);
         } catch (IllegalArgumentException e) {
             throw new InvalidQueryException(e);