You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sirona.apache.org by ol...@apache.org on 2014/06/27 15:02:59 UTC

svn commit: r1606080 - in /incubator/sirona/trunk: core/src/main/java/org/apache/sirona/store/tracking/ server/reporting/src/main/java/org/apache/sirona/reporting/web/plugin/pathtracking/ server/reporting/src/main/resources/templates/pathtracking/ serv...

Author: olamy
Date: Fri Jun 27 13:02:59 2014
New Revision: 1606080

URL: http://svn.apache.org/r1606080
Log:
add an abstract class for path tracking storage to avoid breaking compat in the future

Added:
    incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/tracking/AbstractPathTrackingDataStore.java
      - copied, changed from r1599267, incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/tracking/PathTrackingDataStore.java
Modified:
    incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/tracking/DelegatedCollectorPathTrackingDataStore.java
    incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/tracking/InMemoryPathTrackingDataStore.java
    incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/tracking/PathTrackingDataStore.java
    incubator/sirona/trunk/server/reporting/src/main/java/org/apache/sirona/reporting/web/plugin/pathtracking/PathTrackingEndpoints.java
    incubator/sirona/trunk/server/reporting/src/main/resources/templates/pathtracking/home.vm
    incubator/sirona/trunk/server/store/cassandra/src/main/java/org/apache/sirona/cassandra/collector/pathtracking/CassandraPathTrackingDataStore.java

Copied: incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/tracking/AbstractPathTrackingDataStore.java (from r1599267, incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/tracking/PathTrackingDataStore.java)
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/tracking/AbstractPathTrackingDataStore.java?p2=incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/tracking/AbstractPathTrackingDataStore.java&p1=incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/tracking/PathTrackingDataStore.java&r1=1599267&r2=1606080&rev=1606080&view=diff
==============================================================================
--- incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/tracking/PathTrackingDataStore.java (original)
+++ incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/tracking/AbstractPathTrackingDataStore.java Fri Jun 27 13:02:59 2014
@@ -16,39 +16,31 @@
  */
 package org.apache.sirona.store.tracking;
 
-import org.apache.sirona.tracking.PathCallInformation;
 import org.apache.sirona.tracking.PathTrackingEntry;
 
 import java.util.Collection;
-import java.util.Date;
-import java.util.List;
+import java.util.Collections;
 
 /**
+ * Add new methods here to prevent breaking implementations.
+ * Because some impls are only read whereas others write
  *
  */
-public interface PathTrackingDataStore
+public abstract class AbstractPathTrackingDataStore
+    implements PathTrackingDataStore
 {
-    void store( PathTrackingEntry pathTrackingEntry );
-
-    void store( Collection<PathTrackingEntry> pathTrackingEntries );
-
-    void clearEntries();
-
-    /**
-     * <b>the result will be orderer by startTime</b>
-     *
-     * @param trackingId
-     * @return {@link List} of {@link org.apache.sirona.tracking.PathTrackingEntry} related to a tracking id
-     */
-    Collection<PathTrackingEntry> retrieve( String trackingId );
-
-    /**
-     * @param startTime
-     * @param endTime
-     * @return {@link org.apache.sirona.tracking.PathCallInformation} of all trackingIds available in the system between startTime and endTime
-     */
-    Collection<PathCallInformation> retrieveTrackingIds( Date startTime, Date endTime );
-
 
+    // FIXME olamy: maybe an exception will be more appropriate here?
 
+    @Override
+    public Collection<PathTrackingEntry> retrieve( String trackingId, int number )
+    {
+        return Collections.emptyList();
+    }
+
+    @Override
+    public Collection<PathTrackingEntry> retrieve( String trackingId, String start, String end )
+    {
+        return Collections.emptyList();
+    }
 }

Modified: incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/tracking/DelegatedCollectorPathTrackingDataStore.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/tracking/DelegatedCollectorPathTrackingDataStore.java?rev=1606080&r1=1606079&r2=1606080&view=diff
==============================================================================
--- incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/tracking/DelegatedCollectorPathTrackingDataStore.java (original)
+++ incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/tracking/DelegatedCollectorPathTrackingDataStore.java Fri Jun 27 13:02:59 2014
@@ -67,4 +67,16 @@ public class DelegatedCollectorPathTrack
     {
         return this.delegatedPathTrackingDataStore.retrieveTrackingIds( startTime, endTime );
     }
+
+    @Override
+    public Collection<PathTrackingEntry> retrieve( String trackingId, int number )
+    {
+        return this.delegatedPathTrackingDataStore.retrieve( trackingId, number );
+    }
+
+    @Override
+    public Collection<PathTrackingEntry> retrieve( String trackingId, String start, String end )
+    {
+        return this.delegatedPathTrackingDataStore.retrieve( trackingId, start, end );
+    }
 }

Modified: incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/tracking/InMemoryPathTrackingDataStore.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/tracking/InMemoryPathTrackingDataStore.java?rev=1606080&r1=1606079&r2=1606080&view=diff
==============================================================================
--- incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/tracking/InMemoryPathTrackingDataStore.java (original)
+++ incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/tracking/InMemoryPathTrackingDataStore.java Fri Jun 27 13:02:59 2014
@@ -41,6 +41,7 @@ import java.util.concurrent.CopyOnWriteA
  * <b>MUST NOT be used in production</b>
  */
 public class InMemoryPathTrackingDataStore
+    extends AbstractPathTrackingDataStore
     implements PathTrackingDataStore, CollectorPathTrackingDataStore
 {
 

Modified: incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/tracking/PathTrackingDataStore.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/tracking/PathTrackingDataStore.java?rev=1606080&r1=1606079&r2=1606080&view=diff
==============================================================================
--- incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/tracking/PathTrackingDataStore.java (original)
+++ incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/tracking/PathTrackingDataStore.java Fri Jun 27 13:02:59 2014
@@ -42,6 +42,10 @@ public interface PathTrackingDataStore
      */
     Collection<PathTrackingEntry> retrieve( String trackingId );
 
+    Collection<PathTrackingEntry> retrieve( String trackingId, int number );
+
+    Collection<PathTrackingEntry> retrieve( String trackingId, String start, String end );
+
     /**
      * @param startTime
      * @param endTime

Modified: incubator/sirona/trunk/server/reporting/src/main/java/org/apache/sirona/reporting/web/plugin/pathtracking/PathTrackingEndpoints.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/server/reporting/src/main/java/org/apache/sirona/reporting/web/plugin/pathtracking/PathTrackingEndpoints.java?rev=1606080&r1=1606079&r2=1606080&view=diff
==============================================================================
--- incubator/sirona/trunk/server/reporting/src/main/java/org/apache/sirona/reporting/web/plugin/pathtracking/PathTrackingEndpoints.java (original)
+++ incubator/sirona/trunk/server/reporting/src/main/java/org/apache/sirona/reporting/web/plugin/pathtracking/PathTrackingEndpoints.java Fri Jun 27 13:02:59 2014
@@ -85,11 +85,19 @@ public class PathTrackingEndpoints
 
     }
 
-    @Regex( "/pathtrackingdetail/(.*)" )
-    public Template displayPathTrackingDetail( String pathTrackingId )
+    /**
+     * retrieve a slice of pathtracking entries
+     *
+     * @param pathTrackingId
+     * @param number
+     * @return
+     */
+    @Regex( "/pathtrackingdetail/(.*)/(.*)" )
+    public Template displayPathTrackingDetail( String pathTrackingId, String number )
     {
 
-        Collection<PathTrackingEntry> entries = PATH_TRACKING_DATA_STORE.retrieve( pathTrackingId );
+        Collection<PathTrackingEntry> entries =
+            PATH_TRACKING_DATA_STORE.retrieve( pathTrackingId, Integer.parseInt( number ) );
 
         return new Template( "pathtracking/pathtrackingdetail.vm", //
                              new MapBuilder<String, Object>() //

Modified: incubator/sirona/trunk/server/reporting/src/main/resources/templates/pathtracking/home.vm
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/server/reporting/src/main/resources/templates/pathtracking/home.vm?rev=1606080&r1=1606079&r2=1606080&view=diff
==============================================================================
--- incubator/sirona/trunk/server/reporting/src/main/resources/templates/pathtracking/home.vm (original)
+++ incubator/sirona/trunk/server/reporting/src/main/resources/templates/pathtracking/home.vm Fri Jun 27 13:02:59 2014
@@ -19,7 +19,7 @@
         <div class="col-lg-9">
             <ul>
             #foreach( $pathCallInformation in $pathCallInformations )
-                <li><a href="$mapping/pathtracking/pathtrackingdetail/$pathCallInformation.trackingId">$pathCallInformation.trackingId:  $dateTool.format("yyyy-MM-dd'T'HH:mm:ssz", $pathCallInformation.startTime)</a></li>
+                <li><a href="$mapping/pathtracking/pathtrackingdetail/$pathCallInformation.trackingId/100">$pathCallInformation.trackingId:  $dateTool.format("yyyy-MM-dd'T'HH:mm:ssz", $pathCallInformation.startTime)</a></li>
             #end
             </ul>
         </div>

Modified: incubator/sirona/trunk/server/store/cassandra/src/main/java/org/apache/sirona/cassandra/collector/pathtracking/CassandraPathTrackingDataStore.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/server/store/cassandra/src/main/java/org/apache/sirona/cassandra/collector/pathtracking/CassandraPathTrackingDataStore.java?rev=1606080&r1=1606079&r2=1606080&view=diff
==============================================================================
--- incubator/sirona/trunk/server/store/cassandra/src/main/java/org/apache/sirona/cassandra/collector/pathtracking/CassandraPathTrackingDataStore.java (original)
+++ incubator/sirona/trunk/server/store/cassandra/src/main/java/org/apache/sirona/cassandra/collector/pathtracking/CassandraPathTrackingDataStore.java Fri Jun 27 13:02:59 2014
@@ -17,6 +17,8 @@
 
 package org.apache.sirona.cassandra.collector.pathtracking;
 
+import me.prettyprint.cassandra.model.CqlQuery;
+import me.prettyprint.cassandra.model.CqlRows;
 import me.prettyprint.cassandra.serializers.LongSerializer;
 import me.prettyprint.cassandra.serializers.StringSerializer;
 import me.prettyprint.hector.api.Keyspace;
@@ -233,6 +235,72 @@ public class CassandraPathTrackingDataSt
         return entries;
     }
 
+    public Collection<PathTrackingEntry> retrieve( String trackingId, int number )
+    {
+        /*
+        QueryResult<OrderedRows<String, String, String>> cResult = //
+            HFactory.createRangeSlicesQuery( keyspace, //
+                                             StringSerializer.get(), //
+                                             StringSerializer.get(), //
+                                             StringSerializer.get() ) //
+                .setColumnNames( "trackingId", "nodeId", "className", "methodName", "startTime", "executionTime",
+                                 "level" ) //
+                .addEqualsExpression( "trackingId", trackingId ) //
+                .addEqualsExpression( "level", "0" )//
+                .setColumnFamily( family ) //
+                .setRowCount( number ) //
+                .execute();
+        */
+
+        CqlQuery<String,String, String> cqlQuery = new CqlQuery<String, String, String>( keyspace, StringSerializer.get(), StringSerializer.get(), StringSerializer.get() );
+
+        String query = "select * from " + family + " where trackingId='" + trackingId + "' AND level=" + 1 + ";";
+
+        cqlQuery.setQuery( query );
+
+        QueryResult<CqlRows<String,String,String>> cqlRowsQueryResult = cqlQuery.execute();
+
+
+
+        QueryResult<OrderedRows<String, String, String>>cResult = //
+            HFactory.createRangeSlicesQuery( keyspace, //
+                                             StringSerializer.get(), //
+                                             StringSerializer.get(), //
+                                             StringSerializer.get() ) //
+                .setColumnNames( "trackingId", "nodeId", "className", "methodName", "startTime", "executionTime",
+                                 "level" ) //
+                .addEqualsExpression( "trackingId", trackingId ) //
+                .setColumnFamily( family ) //
+                .setRowCount( number ) //
+                .execute();
+
+        Set<PathTrackingEntry> entries = new TreeSet<PathTrackingEntry>( LEVEL_COMPARATOR );
+
+        OrderedRows<String, String, String> rows = cResult.get();
+
+        if ( rows == null )
+        {
+            return entries;
+        }
+
+        for ( Row<String, String, String> row : rows.getList() )
+        {
+            ColumnSlice<String, String> columnSlice = row.getColumnSlice();
+
+            PathTrackingEntry pathTrackingEntry = map( columnSlice );
+
+            entries.add( pathTrackingEntry );
+        }
+
+        return entries;
+    }
+
+    @Override
+    public Collection<PathTrackingEntry> retrieve( String trackingId, String start, String end )
+    {
+        return super.retrieve( trackingId, start, end );
+    }
+
     @Override
     public Collection<PathCallInformation> retrieveTrackingIds( Date startTime, Date endTime )
     {
@@ -245,7 +313,9 @@ public class CassandraPathTrackingDataSt
                 .setColumnNames( "trackingId", "nodeId", "className", "methodName", "startTime", "executionTime",
                                  "level" ) //
                 .addEqualsExpression( "level", Long.valueOf( 1 ) ) //
-                .addGteExpression( "startTime", startTime.getTime() ).setColumnFamily( family ).execute();
+                .addGteExpression( "startTime", startTime.getTime() ) //
+                .setColumnFamily( family ) //
+                .execute();
 
         int size = cResult.get().getList().size();