You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@sirona.apache.org by Romain Manni-Bucau <rm...@gmail.com> on 2014/02/18 07:38:35 UTC

Re: svn commit: r1569204 - in /incubator/sirona/trunk: core/src/main/java/org/apache/sirona/tracking/ server/store/cassandra/src/main/java/org/apache/sirona/cassandra/ server/store/cassandra/src/main/java/org/apache/sirona/cassandra/collector/ server/store...

I'd remove retrieveAll, using all dates should be enough no?
Romain Manni-Bucau
Twitter: @rmannibucau
Blog: http://rmannibucau.wordpress.com/
LinkedIn: http://fr.linkedin.com/in/rmannibucau
Github: https://github.com/rmannibucau



2014-02-18 7:00 GMT+01:00  <ol...@apache.org>:
> Author: olamy
> Date: Tue Feb 18 06:00:22 2014
> New Revision: 1569204
>
> URL: http://svn.apache.org/r1569204
> Log:
> start working on PathTracking cassandra storage
>
> Added:
>     incubator/sirona/trunk/server/store/cassandra/src/test/java/org/apache/sirona/cassandra/local/PathTrackingDataStoreTest.java
>       - copied, changed from r1569203, incubator/sirona/trunk/server/store/cassandra/src/main/java/org/apache/sirona/cassandra/pathtracking/CassandraPathTrackingDataStore.java
> Modified:
>     incubator/sirona/trunk/core/src/main/java/org/apache/sirona/tracking/PathTracker.java
>     incubator/sirona/trunk/server/store/cassandra/src/main/java/org/apache/sirona/cassandra/CassandraBuilder.java
>     incubator/sirona/trunk/server/store/cassandra/src/main/java/org/apache/sirona/cassandra/collector/CassandraSirona.java
>     incubator/sirona/trunk/server/store/cassandra/src/main/java/org/apache/sirona/cassandra/collector/counter/CassandraCollectorCounterDataStore.java
>     incubator/sirona/trunk/server/store/cassandra/src/main/java/org/apache/sirona/cassandra/pathtracking/CassandraPathTrackingDataStore.java
>
> Modified: incubator/sirona/trunk/core/src/main/java/org/apache/sirona/tracking/PathTracker.java
> URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/core/src/main/java/org/apache/sirona/tracking/PathTracker.java?rev=1569204&r1=1569203&r2=1569204&view=diff
> ==============================================================================
> --- incubator/sirona/trunk/core/src/main/java/org/apache/sirona/tracking/PathTracker.java (original)
> +++ incubator/sirona/trunk/core/src/main/java/org/apache/sirona/tracking/PathTracker.java Tue Feb 18 06:00:22 2014
> @@ -133,6 +133,9 @@ public class PathTracker
>          THREAD_LOCAL_TX.set( uuid );
>      }
>
> +
> +    // An other solution could be using Thread.currentThread().getStackTrace()
> +
>      /**
>       * FIXME not sure we really need the uuid but just in case for future usage :-)
>       */
>
> Modified: incubator/sirona/trunk/server/store/cassandra/src/main/java/org/apache/sirona/cassandra/CassandraBuilder.java
> URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/server/store/cassandra/src/main/java/org/apache/sirona/cassandra/CassandraBuilder.java?rev=1569204&r1=1569203&r2=1569204&view=diff
> ==============================================================================
> --- incubator/sirona/trunk/server/store/cassandra/src/main/java/org/apache/sirona/cassandra/CassandraBuilder.java (original)
> +++ incubator/sirona/trunk/server/store/cassandra/src/main/java/org/apache/sirona/cassandra/CassandraBuilder.java Tue Feb 18 06:00:22 2014
> @@ -28,9 +28,11 @@ public class CassandraBuilder {
>      private String counterColumnFamily = "counters_values";
>      private String gaugeValuesColumnFamily = "gauges_values";
>      private String statusColumnFamily = "statuses_values";
> +    private String pathTrackingColumFamily = "path_tracking";
>      private String markerCountersColumnFamily = "markers_counters";
>      private String markerStatusesColumnFamily = "markers_statuses";
>      private String markerGaugesColumFamily = "markers_gauges";
> +    private String markerPathTrackingColumFamily = "markers_path_tracking";
>      private String writeConsistencyLevel = HConsistencyLevel.QUORUM.name();
>      private String readConsistencyLevel = HConsistencyLevel.QUORUM.name();
>      private int replicationFactor = 1;
> @@ -76,6 +78,14 @@ public class CassandraBuilder {
>          return markerStatusesColumnFamily;
>      }
>
> +    public String getPathTrackingColumFamily() {
> +        return pathTrackingColumFamily;
> +    }
> +
> +    public String getMarkerPathTrackingColumFamily() {
> +        return markerPathTrackingColumFamily;
> +    }
> +
>      public HConsistencyLevel getWriteConsistencyLevel() {
>          return HConsistencyLevel.valueOf(writeConsistencyLevel);
>      }
>
> Modified: incubator/sirona/trunk/server/store/cassandra/src/main/java/org/apache/sirona/cassandra/collector/CassandraSirona.java
> URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/server/store/cassandra/src/main/java/org/apache/sirona/cassandra/collector/CassandraSirona.java?rev=1569204&r1=1569203&r2=1569204&view=diff
> ==============================================================================
> --- incubator/sirona/trunk/server/store/cassandra/src/main/java/org/apache/sirona/cassandra/collector/CassandraSirona.java (original)
> +++ incubator/sirona/trunk/server/store/cassandra/src/main/java/org/apache/sirona/cassandra/collector/CassandraSirona.java Tue Feb 18 06:00:22 2014
> @@ -17,6 +17,7 @@
>  package org.apache.sirona.cassandra.collector;
>
>  import me.prettyprint.cassandra.model.ConfigurableConsistencyLevel;
> +import me.prettyprint.cassandra.serializers.DoubleSerializer;
>  import me.prettyprint.cassandra.serializers.SerializerTypeInferer;
>  import me.prettyprint.cassandra.service.CassandraHostConfigurator;
>  import me.prettyprint.cassandra.service.StringKeyIterator;
> @@ -29,6 +30,7 @@ import me.prettyprint.hector.api.ddl.Col
>  import me.prettyprint.hector.api.ddl.ComparatorType;
>  import me.prettyprint.hector.api.factory.HFactory;
>  import org.apache.sirona.cassandra.CassandraBuilder;
> +import org.apache.sirona.cassandra.DynamicDelegatedSerializer;
>  import org.apache.sirona.configuration.ioc.Destroying;
>  import org.apache.sirona.configuration.ioc.IoCs;
>
> @@ -60,19 +62,36 @@ public class CassandraSirona {
>          consistencyLevelPolicy.setDefaultWriteConsistencyLevel(builder.getWriteConsistencyLevel());
>          keyspace = HFactory.createKeyspace(keyspaceName, cluster, consistencyLevelPolicy);
>
> -        final ColumnFamilyDefinition gauges = HFactory.createColumnFamilyDefinition(keyspaceName, builder.getGaugeValuesColumnFamily(), ComparatorType.LONGTYPE);
> -        final ColumnFamilyDefinition markersGauges = HFactory.createColumnFamilyDefinition(keyspaceName, builder.getMarkerGaugesColumFamily(), ComparatorType.UTF8TYPE);
> -        final ColumnFamilyDefinition counters = HFactory.createColumnFamilyDefinition(keyspaceName, builder.getCounterColumnFamily(), ComparatorType.UTF8TYPE);
> -        final ColumnFamilyDefinition markersCounters = HFactory.createColumnFamilyDefinition(keyspaceName, builder.getMarkerCountersColumnFamily(), ComparatorType.UTF8TYPE);
> -        final ColumnFamilyDefinition statuses = HFactory.createColumnFamilyDefinition(keyspaceName, builder.getStatusColumnFamily(), ComparatorType.UTF8TYPE);
> -        final ColumnFamilyDefinition markersStatuses = HFactory.createColumnFamilyDefinition(keyspaceName, builder.getMarkerStatusesColumnFamily(), ComparatorType.UTF8TYPE);
> +        final ColumnFamilyDefinition gauges =
> +            HFactory.createColumnFamilyDefinition(keyspaceName, builder.getGaugeValuesColumnFamily(), ComparatorType.LONGTYPE);
> +
> +        final ColumnFamilyDefinition markersGauges =
> +            HFactory.createColumnFamilyDefinition(keyspaceName, builder.getMarkerGaugesColumFamily(), ComparatorType.UTF8TYPE);
> +
> +        final ColumnFamilyDefinition counters =
> +            HFactory.createColumnFamilyDefinition(keyspaceName, builder.getCounterColumnFamily(), ComparatorType.UTF8TYPE);
> +
> +        final ColumnFamilyDefinition markersCounters =
> +            HFactory.createColumnFamilyDefinition(keyspaceName, builder.getMarkerCountersColumnFamily(), ComparatorType.UTF8TYPE);
> +
> +        final ColumnFamilyDefinition statuses =
> +            HFactory.createColumnFamilyDefinition(keyspaceName, builder.getStatusColumnFamily(), ComparatorType.UTF8TYPE);
> +
> +        final ColumnFamilyDefinition markersStatuses =
> +            HFactory.createColumnFamilyDefinition(keyspaceName, builder.getMarkerStatusesColumnFamily(), ComparatorType.UTF8TYPE);
> +
> +        final ColumnFamilyDefinition pathTracking =
> +            HFactory.createColumnFamilyDefinition( keyspaceName, builder.getPathTrackingColumFamily(), ComparatorType.UTF8TYPE);
> +
> +        final ColumnFamilyDefinition markerPathTracking =
> +            HFactory.createColumnFamilyDefinition( keyspaceName, builder.getMarkerPathTrackingColumFamily(), ComparatorType.UTF8TYPE);
>
>          { // ensure keyspace exists, here if the keyspace doesn't exist we suppose nothing exist
>              if (cluster.describeKeyspace(keyspaceName) == null) {
>                  LOGGER.info("Creating Sirona Cassandra '" + keyspaceName + "' keyspace.");
>                  cluster.addKeyspace(
>                      HFactory.createKeyspaceDefinition(keyspaceName, ThriftKsDef.DEF_STRATEGY_CLASS, builder.getReplicationFactor(),
> -                        asList(counters, markersCounters, gauges, markersGauges, statuses, markersStatuses)));
> +                        asList(counters, markersCounters, gauges, markersGauges, statuses, markersStatuses,pathTracking,markerPathTracking)));
>              }
>          }
>      }
> @@ -119,6 +138,14 @@ public class CassandraSirona {
>          return builder.getMarkerGaugesColumFamily();
>      }
>
> +    public String getPathTrackingColumFamily() {
> +        return builder.getPathTrackingColumFamily();
> +    }
> +
> +    public String getMarkerPathTrackingColumFamily() {
> +        return builder.getMarkerPathTrackingColumFamily();
> +    }
> +
>      public String getMarkerCountersColumnFamily() {
>          return builder.getMarkerCountersColumnFamily();
>      }
> @@ -131,6 +158,10 @@ public class CassandraSirona {
>          return SEPARATOR;
>      }
>
> +    //---------------------------------------------------------
> +    // utils static methods
> +    //---------------------------------------------------------
> +
>      public static HColumn<String, ?> emptyColumn(final String name) {
>          return column(name, EMPTY_VALUE);
>      }
> @@ -146,4 +177,19 @@ public class CassandraSirona {
>          }
>          return set;
>      }
> +
> +    public static Number getOrDefault(final DynamicDelegatedSerializer delegatedSerializer, final HColumn<?, ?> col, final Serializer<?> serializer) {
> +        delegatedSerializer.setDelegate(serializer);
> +        if (col == null || col.getValue() == null) {
> +            if ( DoubleSerializer.get() == serializer) {
> +                return Double.NaN;
> +            }
> +            return 0;
> +        }
> +        final Object value = col.getValue();
> +        if (Number.class.isInstance(value)) {
> +            return Number.class.cast(value);
> +        }
> +        throw new IllegalArgumentException("not a number " + value);
> +    }
>  }
>
> Modified: incubator/sirona/trunk/server/store/cassandra/src/main/java/org/apache/sirona/cassandra/collector/counter/CassandraCollectorCounterDataStore.java
> URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/server/store/cassandra/src/main/java/org/apache/sirona/cassandra/collector/counter/CassandraCollectorCounterDataStore.java?rev=1569204&r1=1569203&r2=1569204&view=diff
> ==============================================================================
> --- incubator/sirona/trunk/server/store/cassandra/src/main/java/org/apache/sirona/cassandra/collector/counter/CassandraCollectorCounterDataStore.java (original)
> +++ incubator/sirona/trunk/server/store/cassandra/src/main/java/org/apache/sirona/cassandra/collector/counter/CassandraCollectorCounterDataStore.java Tue Feb 18 06:00:22 2014
> @@ -21,10 +21,8 @@ import me.prettyprint.cassandra.serializ
>  import me.prettyprint.cassandra.serializers.LongSerializer;
>  import me.prettyprint.cassandra.serializers.StringSerializer;
>  import me.prettyprint.hector.api.Keyspace;
> -import me.prettyprint.hector.api.Serializer;
>  import me.prettyprint.hector.api.beans.ColumnSlice;
>  import me.prettyprint.hector.api.beans.HColumn;
> -import me.prettyprint.hector.api.beans.HSuperColumn;
>  import me.prettyprint.hector.api.factory.HFactory;
>  import me.prettyprint.hector.api.query.QueryResult;
>  import org.apache.sirona.Role;
> @@ -43,9 +41,7 @@ import java.util.HashMap;
>  import java.util.LinkedList;
>  import java.util.Map;
>
> -import static org.apache.sirona.cassandra.collector.CassandraSirona.column;
> -import static org.apache.sirona.cassandra.collector.CassandraSirona.emptyColumn;
> -import static org.apache.sirona.cassandra.collector.CassandraSirona.keys;
> +import static org.apache.sirona.cassandra.collector.CassandraSirona.*;
>
>  public class CassandraCollectorCounterDataStore extends InMemoryCollectorCounterStore {
>      private final Keyspace keyspace;
> @@ -161,14 +157,15 @@ public class CassandraCollectorCounterDa
>                                             final String marker) {
>          return new CassandraLeafCounter(ckey, this, marker)
>              .sync(new M2AwareStatisticalSummary(
> -                getOrDefault(serializer, map.getColumnByName("mean"), DoubleSerializer.get()).doubleValue(),
> -                getOrDefault(serializer, map.getColumnByName("variance"), DoubleSerializer.get()).doubleValue(),
> -                getOrDefault(serializer, map.getColumnByName("n"), LongSerializer.get()).longValue(),
> -                getOrDefault(serializer, map.getColumnByName("max"), DoubleSerializer.get()).doubleValue(),
> -                getOrDefault(serializer, map.getColumnByName("min"), DoubleSerializer.get()).doubleValue(),
> -                getOrDefault(serializer, map.getColumnByName("sum"), DoubleSerializer.get()).doubleValue(),
> -                getOrDefault(serializer, map.getColumnByName("m2"), DoubleSerializer.get()).doubleValue()),
> -                getOrDefault(serializer, map.getColumnByName("maxConcurrency"), IntegerSerializer.get()).intValue());
> +                getOrDefault( serializer, map.getColumnByName( "mean" ), DoubleSerializer.get() ).doubleValue(),
> +                getOrDefault( serializer, map.getColumnByName( "variance" ), DoubleSerializer.get() ).doubleValue(),
> +                getOrDefault( serializer, map.getColumnByName( "n" ), LongSerializer.get() ).longValue(),
> +                getOrDefault( serializer, map.getColumnByName( "max" ), DoubleSerializer.get() ).doubleValue(),
> +                getOrDefault( serializer, map.getColumnByName( "min" ), DoubleSerializer.get() ).doubleValue(),
> +                getOrDefault( serializer, map.getColumnByName( "sum" ), DoubleSerializer.get() ).doubleValue(),
> +                getOrDefault( serializer, map.getColumnByName( "m2" ), DoubleSerializer.get() ).doubleValue()),
> +                getOrDefault( serializer, map.getColumnByName( "maxConcurrency" ),
> +                                              IntegerSerializer.get() ).intValue());
>      }
>
>      protected CassandraLeafCounter save(final CassandraLeafCounter counter, final String marker) {
> @@ -203,19 +200,5 @@ public class CassandraCollectorCounterDa
>          return cassandra;
>      }
>
> -    protected static Number getOrDefault(final DynamicDelegatedSerializer delegatedSerializer, final HColumn<?, ?> col, final Serializer<?> serializer) {
> -        delegatedSerializer.setDelegate(serializer);
> -        if (col == null || col.getValue() == null) {
> -            if (DoubleSerializer.get() == serializer) {
> -                return Double.NaN;
> -            }
> -            return 0;
> -        }
>
> -        final Object value = col.getValue();
> -        if (Number.class.isInstance(value)) {
> -            return Number.class.cast(value);
> -        }
> -        throw new IllegalArgumentException("not a number " + value);
> -    }
>  }
>
> Modified: incubator/sirona/trunk/server/store/cassandra/src/main/java/org/apache/sirona/cassandra/pathtracking/CassandraPathTrackingDataStore.java
> URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/server/store/cassandra/src/main/java/org/apache/sirona/cassandra/pathtracking/CassandraPathTrackingDataStore.java?rev=1569204&r1=1569203&r2=1569204&view=diff
> ==============================================================================
> --- incubator/sirona/trunk/server/store/cassandra/src/main/java/org/apache/sirona/cassandra/pathtracking/CassandraPathTrackingDataStore.java (original)
> +++ incubator/sirona/trunk/server/store/cassandra/src/main/java/org/apache/sirona/cassandra/pathtracking/CassandraPathTrackingDataStore.java Tue Feb 18 06:00:22 2014
> @@ -17,12 +17,30 @@
>
>  package org.apache.sirona.cassandra.pathtracking;
>
> +import me.prettyprint.cassandra.serializers.LongSerializer;
> +import me.prettyprint.cassandra.serializers.StringSerializer;
> +import me.prettyprint.hector.api.Keyspace;
> +import me.prettyprint.hector.api.Serializer;
> +import me.prettyprint.hector.api.beans.ColumnSlice;
> +import me.prettyprint.hector.api.beans.OrderedRows;
> +import me.prettyprint.hector.api.beans.Row;
> +import me.prettyprint.hector.api.factory.HFactory;
> +import me.prettyprint.hector.api.mutation.Mutator;
> +import me.prettyprint.hector.api.query.QueryResult;
> +import org.apache.sirona.cassandra.DynamicDelegatedSerializer;
> +import org.apache.sirona.cassandra.collector.CassandraSirona;
> +import org.apache.sirona.configuration.ioc.IoCs;
>  import org.apache.sirona.store.tracking.PathTrackingDataStore;
>  import org.apache.sirona.tracking.PathTrackingEntry;
>
>  import java.util.Collection;
>  import java.util.Date;
> -import java.util.List;
> +import java.util.Map;
> +import java.util.Set;
> +import java.util.TreeMap;
> +import java.util.TreeSet;
> +
> +import static org.apache.sirona.cassandra.collector.CassandraSirona.*;
>
>  /**
>   * @author Olivier Lamy
> @@ -31,10 +49,50 @@ public class CassandraPathTrackingDataSt
>      implements PathTrackingDataStore
>  {
>
> +    private final CassandraSirona cassandra;
> +
> +    private final Keyspace keyspace;
> +
> +    private final String family;
> +
> +    private final String markerFamilly;
> +
> +
> +    public CassandraPathTrackingDataStore()
> +    {
> +        this.cassandra = IoCs.findOrCreateInstance( CassandraSirona.class );
> +        this.keyspace = cassandra.getKeyspace();
> +        this.family = cassandra.getPathTrackingColumFamily();
> +        this.markerFamilly = cassandra.getMarkerPathTrackingColumFamily();
> +    }
> +
>      @Override
>      public void store( PathTrackingEntry pathTrackingEntry )
>      {
> +        final Mutator<String> mutator = HFactory.createMutator( keyspace, StringSerializer.get() );
> +
> +        final String id = id( pathTrackingEntry );
>
> +        HFactory.createMutator( keyspace, StringSerializer.get() )
> +            //  values
> +            .addInsertion( id, family, column( "trackingId", pathTrackingEntry.getTrackingId() ) ) //
> +            .addInsertion( id, family, column( "nodeId", pathTrackingEntry.getNodeId() ) ) //
> +            .addInsertion( id, family, column( "className", pathTrackingEntry.getClassName() ) ) //
> +            .addInsertion( id, family, column( "methodName", pathTrackingEntry.getMethodName() ) ) //
> +            .addInsertion( id, family, column( "startTime", pathTrackingEntry.getStartTime() ) ) //
> +            .addInsertion( id, family, column( "executionTime", pathTrackingEntry.getExecutionTime() ) ) //
> +            .addInsertion( id, family, column( "level", pathTrackingEntry.getLevel() ) ) //
> +            .addInsertion( "PATH_TRACKING", markerFamilly, emptyColumn( id ) ) //
> +            .execute();
> +    }
> +
> +    protected String id( PathTrackingEntry pathTrackingEntry )
> +    {
> +        return cassandra.generateKey( pathTrackingEntry.getTrackingId(), //
> +                                      pathTrackingEntry.getClassName(),//
> +                                      pathTrackingEntry.getMethodName(), //
> +                                      Long.toString( pathTrackingEntry.getStartTime() ),//
> +                                      pathTrackingEntry.getNodeId() );
>      }
>
>      @Override
> @@ -48,4 +106,68 @@ public class CassandraPathTrackingDataSt
>      {
>          return null;
>      }
> +
> +    /**
> +     * <b>use with CAUTION as can return a lot of data</b>
> +     * <p>This method is use for testing purpose</p>
> +     *
> +     * @return {@link java.util.List} containing all {@link PathTrackingEntry}
> +     */
> +    public Map<String, Set<PathTrackingEntry>> retrieveAll()
> +    {
> +        final QueryResult<OrderedRows<String, String, String>> cResult = //
> +            HFactory.createRangeSlicesQuery( keyspace, //
> +                                             StringSerializer.get(), //
> +                                             StringSerializer.get(), //
> +                                             StringSerializer.get() ) //
> +                .setColumnFamily( family ) //
> +                .setRange( null, null, false, Integer.MAX_VALUE ) //
> +                .execute();
> +
> +        Map<String, Set<PathTrackingEntry>> entries = new TreeMap<String, Set<PathTrackingEntry>>();
> +
> +        final DynamicDelegatedSerializer<Object> serializer = new DynamicDelegatedSerializer<Object>();
> +
> +        for ( Row<String, String, String> row : cResult.get().getList() )
> +        {
> +            ColumnSlice<String, String> columnSlice = row.getColumnSlice();
> +            String trackingId = columnSlice.getColumnByName( "trackingId" ).getValue();
> +            String nodeId = columnSlice.getColumnByName( "nodeId" ).getValue();
> +            String className = columnSlice.getColumnByName( "className" ).getValue();
> +            String methodName = columnSlice.getColumnByName( "methodName" ).getValue();
> +
> +            Serializer<String> stringSerializer = columnSlice.getColumnByName( "startTime" ).getValueSerializer();
> +
> +            String foo = columnSlice.getColumnByName( "startTime" ).getValue();
> +            long startTime = getOrDefault( serializer, //
> +                                           columnSlice.getColumnByName( "startTime" ), //
> +                                           LongSerializer.get() ).longValue();
> +
> +            long executionTime = getOrDefault( serializer, //
> +                                               columnSlice.getColumnByName( "executionTime" ), //
> +                                               LongSerializer.get() ).longValue();
> +
> +            int level = getOrDefault( serializer, //
> +                                      columnSlice.getColumnByName( "level" ), //
> +                                      LongSerializer.get() ).intValue();
> +
> +            Set<PathTrackingEntry> pathTrackingEntries = entries.get( trackingId );
> +            if ( pathTrackingEntries == null )
> +            {
> +                pathTrackingEntries = new TreeSet<PathTrackingEntry>();
> +            }
> +            pathTrackingEntries.add( new PathTrackingEntry( trackingId, //
> +                                                            nodeId, //
> +                                                            className, //
> +                                                            methodName, //
> +                                                            startTime, //
> +                                                            executionTime, //
> +                                                            level ) );
> +
> +            entries.put( trackingId, pathTrackingEntries );
> +
> +        }
> +
> +        return entries;
> +    }
>  }
>
> Copied: incubator/sirona/trunk/server/store/cassandra/src/test/java/org/apache/sirona/cassandra/local/PathTrackingDataStoreTest.java (from r1569203, incubator/sirona/trunk/server/store/cassandra/src/main/java/org/apache/sirona/cassandra/pathtracking/CassandraPathTrackingDataStore.java)
> URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/server/store/cassandra/src/test/java/org/apache/sirona/cassandra/local/PathTrackingDataStoreTest.java?p2=incubator/sirona/trunk/server/store/cassandra/src/test/java/org/apache/sirona/cassandra/local/PathTrackingDataStoreTest.java&p1=incubator/sirona/trunk/server/store/cassandra/src/main/java/org/apache/sirona/cassandra/pathtracking/CassandraPathTrackingDataStore.java&r1=1569203&r2=1569204&rev=1569204&view=diff
> ==============================================================================
> --- incubator/sirona/trunk/server/store/cassandra/src/main/java/org/apache/sirona/cassandra/pathtracking/CassandraPathTrackingDataStore.java (original)
> +++ incubator/sirona/trunk/server/store/cassandra/src/test/java/org/apache/sirona/cassandra/local/PathTrackingDataStoreTest.java Tue Feb 18 06:00:22 2014
> @@ -14,38 +14,40 @@
>   * See the License for the specific language governing permissions and
>   * limitations under the License.
>   */
> +package org.apache.sirona.cassandra.local;
>
> -package org.apache.sirona.cassandra.pathtracking;
> -
> -import org.apache.sirona.store.tracking.PathTrackingDataStore;
> +import org.apache.sirona.cassandra.framework.CassandraRunner;
> +import org.apache.sirona.cassandra.pathtracking.CassandraPathTrackingDataStore;
> +import org.apache.sirona.configuration.ioc.IoCs;
> +import org.apache.sirona.tracking.PathTracker;
>  import org.apache.sirona.tracking.PathTrackingEntry;
> +import org.junit.Assert;
> +import org.junit.Test;
> +import org.junit.runner.RunWith;
>
> -import java.util.Collection;
>  import java.util.Date;
> -import java.util.List;
>
>  /**
>   * @author Olivier Lamy
>   */
> -public class CassandraPathTrackingDataStore
> -    implements PathTrackingDataStore
> +@RunWith( CassandraRunner.class )
> +public class PathTrackingDataStoreTest
>  {
>
> -    @Override
> -    public void store( PathTrackingEntry pathTrackingEntry )
> +    @Test
> +    public void test_save()
> +        throws Exception
>      {
>
> -    }
> +        CassandraPathTrackingDataStore store = IoCs.processInstance( new CassandraPathTrackingDataStore() );
>
> -    @Override
> -    public Collection<PathTrackingEntry> retrieve( String trackingId )
> -    {
> -        return null;
> -    }
> +        PathTrackingEntry entry =
> +            new PathTrackingEntry( PathTracker.get(), "nodeId", "org.au.beer.TheBest", "littlecreatures",
> +                                   new Date().getTime(), 12, 1 );
> +
> +        store.store( entry );
> +
> +        //Assert.assertFalse( store.retrieveAll().isEmpty() );
>
> -    @Override
> -    public Collection<String> retrieveTrackingIds( Date startTime, Date endTime )
> -    {
> -        return null;
>      }
>  }
>
>

Re: svn commit: r1569204 - in /incubator/sirona/trunk: core/src/main/java/org/apache/sirona/tracking/ server/store/cassandra/src/main/java/org/apache/sirona/cassandra/ server/store/cassandra/src/main/java/org/apache/sirona/cassandra/collector/ server/store...

Posted by Romain Manni-Bucau <rm...@gmail.com>.
My point was just i would try to not bother code with test purpose. AN
alternative can be to write a test store extending the normal one with
that method.
Romain Manni-Bucau
Twitter: @rmannibucau
Blog: http://rmannibucau.wordpress.com/
LinkedIn: http://fr.linkedin.com/in/rmannibucau
Github: https://github.com/rmannibucau



2014-02-18 13:19 GMT+01:00 Olivier Lamy <ol...@apache.org>:
> I added that for testing purpose only (as stated in the javadoc) and
> that's not in the API only in implementations.
> Anyway if you prefer to remove it go.
>
> On 18 February 2014 17:38, Romain Manni-Bucau <rm...@gmail.com> wrote:
>> I'd remove retrieveAll, using all dates should be enough no?
>> Romain Manni-Bucau
>> Twitter: @rmannibucau
>> Blog: http://rmannibucau.wordpress.com/
>> LinkedIn: http://fr.linkedin.com/in/rmannibucau
>> Github: https://github.com/rmannibucau
>>
>>
>>
>> 2014-02-18 7:00 GMT+01:00  <ol...@apache.org>:
>>> Author: olamy
>>> Date: Tue Feb 18 06:00:22 2014
>>> New Revision: 1569204
>>>
>>> URL: http://svn.apache.org/r1569204
>>> Log:
>>> start working on PathTracking cassandra storage
>>>
>>> Added:
>>>     incubator/sirona/trunk/server/store/cassandra/src/test/java/org/apache/sirona/cassandra/local/PathTrackingDataStoreTest.java
>>>       - copied, changed from r1569203, incubator/sirona/trunk/server/store/cassandra/src/main/java/org/apache/sirona/cassandra/pathtracking/CassandraPathTrackingDataStore.java
>>> Modified:
>>>     incubator/sirona/trunk/core/src/main/java/org/apache/sirona/tracking/PathTracker.java
>>>     incubator/sirona/trunk/server/store/cassandra/src/main/java/org/apache/sirona/cassandra/CassandraBuilder.java
>>>     incubator/sirona/trunk/server/store/cassandra/src/main/java/org/apache/sirona/cassandra/collector/CassandraSirona.java
>>>     incubator/sirona/trunk/server/store/cassandra/src/main/java/org/apache/sirona/cassandra/collector/counter/CassandraCollectorCounterDataStore.java
>>>     incubator/sirona/trunk/server/store/cassandra/src/main/java/org/apache/sirona/cassandra/pathtracking/CassandraPathTrackingDataStore.java
>>>
>>> Modified: incubator/sirona/trunk/core/src/main/java/org/apache/sirona/tracking/PathTracker.java
>>> URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/core/src/main/java/org/apache/sirona/tracking/PathTracker.java?rev=1569204&r1=1569203&r2=1569204&view=diff
>>> ==============================================================================
>>> --- incubator/sirona/trunk/core/src/main/java/org/apache/sirona/tracking/PathTracker.java (original)
>>> +++ incubator/sirona/trunk/core/src/main/java/org/apache/sirona/tracking/PathTracker.java Tue Feb 18 06:00:22 2014
>>> @@ -133,6 +133,9 @@ public class PathTracker
>>>          THREAD_LOCAL_TX.set( uuid );
>>>      }
>>>
>>> +
>>> +    // An other solution could be using Thread.currentThread().getStackTrace()
>>> +
>>>      /**
>>>       * FIXME not sure we really need the uuid but just in case for future usage :-)
>>>       */
>>>
>>> Modified: incubator/sirona/trunk/server/store/cassandra/src/main/java/org/apache/sirona/cassandra/CassandraBuilder.java
>>> URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/server/store/cassandra/src/main/java/org/apache/sirona/cassandra/CassandraBuilder.java?rev=1569204&r1=1569203&r2=1569204&view=diff
>>> ==============================================================================
>>> --- incubator/sirona/trunk/server/store/cassandra/src/main/java/org/apache/sirona/cassandra/CassandraBuilder.java (original)
>>> +++ incubator/sirona/trunk/server/store/cassandra/src/main/java/org/apache/sirona/cassandra/CassandraBuilder.java Tue Feb 18 06:00:22 2014
>>> @@ -28,9 +28,11 @@ public class CassandraBuilder {
>>>      private String counterColumnFamily = "counters_values";
>>>      private String gaugeValuesColumnFamily = "gauges_values";
>>>      private String statusColumnFamily = "statuses_values";
>>> +    private String pathTrackingColumFamily = "path_tracking";
>>>      private String markerCountersColumnFamily = "markers_counters";
>>>      private String markerStatusesColumnFamily = "markers_statuses";
>>>      private String markerGaugesColumFamily = "markers_gauges";
>>> +    private String markerPathTrackingColumFamily = "markers_path_tracking";
>>>      private String writeConsistencyLevel = HConsistencyLevel.QUORUM.name();
>>>      private String readConsistencyLevel = HConsistencyLevel.QUORUM.name();
>>>      private int replicationFactor = 1;
>>> @@ -76,6 +78,14 @@ public class CassandraBuilder {
>>>          return markerStatusesColumnFamily;
>>>      }
>>>
>>> +    public String getPathTrackingColumFamily() {
>>> +        return pathTrackingColumFamily;
>>> +    }
>>> +
>>> +    public String getMarkerPathTrackingColumFamily() {
>>> +        return markerPathTrackingColumFamily;
>>> +    }
>>> +
>>>      public HConsistencyLevel getWriteConsistencyLevel() {
>>>          return HConsistencyLevel.valueOf(writeConsistencyLevel);
>>>      }
>>>
>>> Modified: incubator/sirona/trunk/server/store/cassandra/src/main/java/org/apache/sirona/cassandra/collector/CassandraSirona.java
>>> URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/server/store/cassandra/src/main/java/org/apache/sirona/cassandra/collector/CassandraSirona.java?rev=1569204&r1=1569203&r2=1569204&view=diff
>>> ==============================================================================
>>> --- incubator/sirona/trunk/server/store/cassandra/src/main/java/org/apache/sirona/cassandra/collector/CassandraSirona.java (original)
>>> +++ incubator/sirona/trunk/server/store/cassandra/src/main/java/org/apache/sirona/cassandra/collector/CassandraSirona.java Tue Feb 18 06:00:22 2014
>>> @@ -17,6 +17,7 @@
>>>  package org.apache.sirona.cassandra.collector;
>>>
>>>  import me.prettyprint.cassandra.model.ConfigurableConsistencyLevel;
>>> +import me.prettyprint.cassandra.serializers.DoubleSerializer;
>>>  import me.prettyprint.cassandra.serializers.SerializerTypeInferer;
>>>  import me.prettyprint.cassandra.service.CassandraHostConfigurator;
>>>  import me.prettyprint.cassandra.service.StringKeyIterator;
>>> @@ -29,6 +30,7 @@ import me.prettyprint.hector.api.ddl.Col
>>>  import me.prettyprint.hector.api.ddl.ComparatorType;
>>>  import me.prettyprint.hector.api.factory.HFactory;
>>>  import org.apache.sirona.cassandra.CassandraBuilder;
>>> +import org.apache.sirona.cassandra.DynamicDelegatedSerializer;
>>>  import org.apache.sirona.configuration.ioc.Destroying;
>>>  import org.apache.sirona.configuration.ioc.IoCs;
>>>
>>> @@ -60,19 +62,36 @@ public class CassandraSirona {
>>>          consistencyLevelPolicy.setDefaultWriteConsistencyLevel(builder.getWriteConsistencyLevel());
>>>          keyspace = HFactory.createKeyspace(keyspaceName, cluster, consistencyLevelPolicy);
>>>
>>> -        final ColumnFamilyDefinition gauges = HFactory.createColumnFamilyDefinition(keyspaceName, builder.getGaugeValuesColumnFamily(), ComparatorType.LONGTYPE);
>>> -        final ColumnFamilyDefinition markersGauges = HFactory.createColumnFamilyDefinition(keyspaceName, builder.getMarkerGaugesColumFamily(), ComparatorType.UTF8TYPE);
>>> -        final ColumnFamilyDefinition counters = HFactory.createColumnFamilyDefinition(keyspaceName, builder.getCounterColumnFamily(), ComparatorType.UTF8TYPE);
>>> -        final ColumnFamilyDefinition markersCounters = HFactory.createColumnFamilyDefinition(keyspaceName, builder.getMarkerCountersColumnFamily(), ComparatorType.UTF8TYPE);
>>> -        final ColumnFamilyDefinition statuses = HFactory.createColumnFamilyDefinition(keyspaceName, builder.getStatusColumnFamily(), ComparatorType.UTF8TYPE);
>>> -        final ColumnFamilyDefinition markersStatuses = HFactory.createColumnFamilyDefinition(keyspaceName, builder.getMarkerStatusesColumnFamily(), ComparatorType.UTF8TYPE);
>>> +        final ColumnFamilyDefinition gauges =
>>> +            HFactory.createColumnFamilyDefinition(keyspaceName, builder.getGaugeValuesColumnFamily(), ComparatorType.LONGTYPE);
>>> +
>>> +        final ColumnFamilyDefinition markersGauges =
>>> +            HFactory.createColumnFamilyDefinition(keyspaceName, builder.getMarkerGaugesColumFamily(), ComparatorType.UTF8TYPE);
>>> +
>>> +        final ColumnFamilyDefinition counters =
>>> +            HFactory.createColumnFamilyDefinition(keyspaceName, builder.getCounterColumnFamily(), ComparatorType.UTF8TYPE);
>>> +
>>> +        final ColumnFamilyDefinition markersCounters =
>>> +            HFactory.createColumnFamilyDefinition(keyspaceName, builder.getMarkerCountersColumnFamily(), ComparatorType.UTF8TYPE);
>>> +
>>> +        final ColumnFamilyDefinition statuses =
>>> +            HFactory.createColumnFamilyDefinition(keyspaceName, builder.getStatusColumnFamily(), ComparatorType.UTF8TYPE);
>>> +
>>> +        final ColumnFamilyDefinition markersStatuses =
>>> +            HFactory.createColumnFamilyDefinition(keyspaceName, builder.getMarkerStatusesColumnFamily(), ComparatorType.UTF8TYPE);
>>> +
>>> +        final ColumnFamilyDefinition pathTracking =
>>> +            HFactory.createColumnFamilyDefinition( keyspaceName, builder.getPathTrackingColumFamily(), ComparatorType.UTF8TYPE);
>>> +
>>> +        final ColumnFamilyDefinition markerPathTracking =
>>> +            HFactory.createColumnFamilyDefinition( keyspaceName, builder.getMarkerPathTrackingColumFamily(), ComparatorType.UTF8TYPE);
>>>
>>>          { // ensure keyspace exists, here if the keyspace doesn't exist we suppose nothing exist
>>>              if (cluster.describeKeyspace(keyspaceName) == null) {
>>>                  LOGGER.info("Creating Sirona Cassandra '" + keyspaceName + "' keyspace.");
>>>                  cluster.addKeyspace(
>>>                      HFactory.createKeyspaceDefinition(keyspaceName, ThriftKsDef.DEF_STRATEGY_CLASS, builder.getReplicationFactor(),
>>> -                        asList(counters, markersCounters, gauges, markersGauges, statuses, markersStatuses)));
>>> +                        asList(counters, markersCounters, gauges, markersGauges, statuses, markersStatuses,pathTracking,markerPathTracking)));
>>>              }
>>>          }
>>>      }
>>> @@ -119,6 +138,14 @@ public class CassandraSirona {
>>>          return builder.getMarkerGaugesColumFamily();
>>>      }
>>>
>>> +    public String getPathTrackingColumFamily() {
>>> +        return builder.getPathTrackingColumFamily();
>>> +    }
>>> +
>>> +    public String getMarkerPathTrackingColumFamily() {
>>> +        return builder.getMarkerPathTrackingColumFamily();
>>> +    }
>>> +
>>>      public String getMarkerCountersColumnFamily() {
>>>          return builder.getMarkerCountersColumnFamily();
>>>      }
>>> @@ -131,6 +158,10 @@ public class CassandraSirona {
>>>          return SEPARATOR;
>>>      }
>>>
>>> +    //---------------------------------------------------------
>>> +    // utils static methods
>>> +    //---------------------------------------------------------
>>> +
>>>      public static HColumn<String, ?> emptyColumn(final String name) {
>>>          return column(name, EMPTY_VALUE);
>>>      }
>>> @@ -146,4 +177,19 @@ public class CassandraSirona {
>>>          }
>>>          return set;
>>>      }
>>> +
>>> +    public static Number getOrDefault(final DynamicDelegatedSerializer delegatedSerializer, final HColumn<?, ?> col, final Serializer<?> serializer) {
>>> +        delegatedSerializer.setDelegate(serializer);
>>> +        if (col == null || col.getValue() == null) {
>>> +            if ( DoubleSerializer.get() == serializer) {
>>> +                return Double.NaN;
>>> +            }
>>> +            return 0;
>>> +        }
>>> +        final Object value = col.getValue();
>>> +        if (Number.class.isInstance(value)) {
>>> +            return Number.class.cast(value);
>>> +        }
>>> +        throw new IllegalArgumentException("not a number " + value);
>>> +    }
>>>  }
>>>
>>> Modified: incubator/sirona/trunk/server/store/cassandra/src/main/java/org/apache/sirona/cassandra/collector/counter/CassandraCollectorCounterDataStore.java
>>> URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/server/store/cassandra/src/main/java/org/apache/sirona/cassandra/collector/counter/CassandraCollectorCounterDataStore.java?rev=1569204&r1=1569203&r2=1569204&view=diff
>>> ==============================================================================
>>> --- incubator/sirona/trunk/server/store/cassandra/src/main/java/org/apache/sirona/cassandra/collector/counter/CassandraCollectorCounterDataStore.java (original)
>>> +++ incubator/sirona/trunk/server/store/cassandra/src/main/java/org/apache/sirona/cassandra/collector/counter/CassandraCollectorCounterDataStore.java Tue Feb 18 06:00:22 2014
>>> @@ -21,10 +21,8 @@ import me.prettyprint.cassandra.serializ
>>>  import me.prettyprint.cassandra.serializers.LongSerializer;
>>>  import me.prettyprint.cassandra.serializers.StringSerializer;
>>>  import me.prettyprint.hector.api.Keyspace;
>>> -import me.prettyprint.hector.api.Serializer;
>>>  import me.prettyprint.hector.api.beans.ColumnSlice;
>>>  import me.prettyprint.hector.api.beans.HColumn;
>>> -import me.prettyprint.hector.api.beans.HSuperColumn;
>>>  import me.prettyprint.hector.api.factory.HFactory;
>>>  import me.prettyprint.hector.api.query.QueryResult;
>>>  import org.apache.sirona.Role;
>>> @@ -43,9 +41,7 @@ import java.util.HashMap;
>>>  import java.util.LinkedList;
>>>  import java.util.Map;
>>>
>>> -import static org.apache.sirona.cassandra.collector.CassandraSirona.column;
>>> -import static org.apache.sirona.cassandra.collector.CassandraSirona.emptyColumn;
>>> -import static org.apache.sirona.cassandra.collector.CassandraSirona.keys;
>>> +import static org.apache.sirona.cassandra.collector.CassandraSirona.*;
>>>
>>>  public class CassandraCollectorCounterDataStore extends InMemoryCollectorCounterStore {
>>>      private final Keyspace keyspace;
>>> @@ -161,14 +157,15 @@ public class CassandraCollectorCounterDa
>>>                                             final String marker) {
>>>          return new CassandraLeafCounter(ckey, this, marker)
>>>              .sync(new M2AwareStatisticalSummary(
>>> -                getOrDefault(serializer, map.getColumnByName("mean"), DoubleSerializer.get()).doubleValue(),
>>> -                getOrDefault(serializer, map.getColumnByName("variance"), DoubleSerializer.get()).doubleValue(),
>>> -                getOrDefault(serializer, map.getColumnByName("n"), LongSerializer.get()).longValue(),
>>> -                getOrDefault(serializer, map.getColumnByName("max"), DoubleSerializer.get()).doubleValue(),
>>> -                getOrDefault(serializer, map.getColumnByName("min"), DoubleSerializer.get()).doubleValue(),
>>> -                getOrDefault(serializer, map.getColumnByName("sum"), DoubleSerializer.get()).doubleValue(),
>>> -                getOrDefault(serializer, map.getColumnByName("m2"), DoubleSerializer.get()).doubleValue()),
>>> -                getOrDefault(serializer, map.getColumnByName("maxConcurrency"), IntegerSerializer.get()).intValue());
>>> +                getOrDefault( serializer, map.getColumnByName( "mean" ), DoubleSerializer.get() ).doubleValue(),
>>> +                getOrDefault( serializer, map.getColumnByName( "variance" ), DoubleSerializer.get() ).doubleValue(),
>>> +                getOrDefault( serializer, map.getColumnByName( "n" ), LongSerializer.get() ).longValue(),
>>> +                getOrDefault( serializer, map.getColumnByName( "max" ), DoubleSerializer.get() ).doubleValue(),
>>> +                getOrDefault( serializer, map.getColumnByName( "min" ), DoubleSerializer.get() ).doubleValue(),
>>> +                getOrDefault( serializer, map.getColumnByName( "sum" ), DoubleSerializer.get() ).doubleValue(),
>>> +                getOrDefault( serializer, map.getColumnByName( "m2" ), DoubleSerializer.get() ).doubleValue()),
>>> +                getOrDefault( serializer, map.getColumnByName( "maxConcurrency" ),
>>> +                                              IntegerSerializer.get() ).intValue());
>>>      }
>>>
>>>      protected CassandraLeafCounter save(final CassandraLeafCounter counter, final String marker) {
>>> @@ -203,19 +200,5 @@ public class CassandraCollectorCounterDa
>>>          return cassandra;
>>>      }
>>>
>>> -    protected static Number getOrDefault(final DynamicDelegatedSerializer delegatedSerializer, final HColumn<?, ?> col, final Serializer<?> serializer) {
>>> -        delegatedSerializer.setDelegate(serializer);
>>> -        if (col == null || col.getValue() == null) {
>>> -            if (DoubleSerializer.get() == serializer) {
>>> -                return Double.NaN;
>>> -            }
>>> -            return 0;
>>> -        }
>>>
>>> -        final Object value = col.getValue();
>>> -        if (Number.class.isInstance(value)) {
>>> -            return Number.class.cast(value);
>>> -        }
>>> -        throw new IllegalArgumentException("not a number " + value);
>>> -    }
>>>  }
>>>
>>> Modified: incubator/sirona/trunk/server/store/cassandra/src/main/java/org/apache/sirona/cassandra/pathtracking/CassandraPathTrackingDataStore.java
>>> URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/server/store/cassandra/src/main/java/org/apache/sirona/cassandra/pathtracking/CassandraPathTrackingDataStore.java?rev=1569204&r1=1569203&r2=1569204&view=diff
>>> ==============================================================================
>>> --- incubator/sirona/trunk/server/store/cassandra/src/main/java/org/apache/sirona/cassandra/pathtracking/CassandraPathTrackingDataStore.java (original)
>>> +++ incubator/sirona/trunk/server/store/cassandra/src/main/java/org/apache/sirona/cassandra/pathtracking/CassandraPathTrackingDataStore.java Tue Feb 18 06:00:22 2014
>>> @@ -17,12 +17,30 @@
>>>
>>>  package org.apache.sirona.cassandra.pathtracking;
>>>
>>> +import me.prettyprint.cassandra.serializers.LongSerializer;
>>> +import me.prettyprint.cassandra.serializers.StringSerializer;
>>> +import me.prettyprint.hector.api.Keyspace;
>>> +import me.prettyprint.hector.api.Serializer;
>>> +import me.prettyprint.hector.api.beans.ColumnSlice;
>>> +import me.prettyprint.hector.api.beans.OrderedRows;
>>> +import me.prettyprint.hector.api.beans.Row;
>>> +import me.prettyprint.hector.api.factory.HFactory;
>>> +import me.prettyprint.hector.api.mutation.Mutator;
>>> +import me.prettyprint.hector.api.query.QueryResult;
>>> +import org.apache.sirona.cassandra.DynamicDelegatedSerializer;
>>> +import org.apache.sirona.cassandra.collector.CassandraSirona;
>>> +import org.apache.sirona.configuration.ioc.IoCs;
>>>  import org.apache.sirona.store.tracking.PathTrackingDataStore;
>>>  import org.apache.sirona.tracking.PathTrackingEntry;
>>>
>>>  import java.util.Collection;
>>>  import java.util.Date;
>>> -import java.util.List;
>>> +import java.util.Map;
>>> +import java.util.Set;
>>> +import java.util.TreeMap;
>>> +import java.util.TreeSet;
>>> +
>>> +import static org.apache.sirona.cassandra.collector.CassandraSirona.*;
>>>
>>>  /**
>>>   * @author Olivier Lamy
>>> @@ -31,10 +49,50 @@ public class CassandraPathTrackingDataSt
>>>      implements PathTrackingDataStore
>>>  {
>>>
>>> +    private final CassandraSirona cassandra;
>>> +
>>> +    private final Keyspace keyspace;
>>> +
>>> +    private final String family;
>>> +
>>> +    private final String markerFamilly;
>>> +
>>> +
>>> +    public CassandraPathTrackingDataStore()
>>> +    {
>>> +        this.cassandra = IoCs.findOrCreateInstance( CassandraSirona.class );
>>> +        this.keyspace = cassandra.getKeyspace();
>>> +        this.family = cassandra.getPathTrackingColumFamily();
>>> +        this.markerFamilly = cassandra.getMarkerPathTrackingColumFamily();
>>> +    }
>>> +
>>>      @Override
>>>      public void store( PathTrackingEntry pathTrackingEntry )
>>>      {
>>> +        final Mutator<String> mutator = HFactory.createMutator( keyspace, StringSerializer.get() );
>>> +
>>> +        final String id = id( pathTrackingEntry );
>>>
>>> +        HFactory.createMutator( keyspace, StringSerializer.get() )
>>> +            //  values
>>> +            .addInsertion( id, family, column( "trackingId", pathTrackingEntry.getTrackingId() ) ) //
>>> +            .addInsertion( id, family, column( "nodeId", pathTrackingEntry.getNodeId() ) ) //
>>> +            .addInsertion( id, family, column( "className", pathTrackingEntry.getClassName() ) ) //
>>> +            .addInsertion( id, family, column( "methodName", pathTrackingEntry.getMethodName() ) ) //
>>> +            .addInsertion( id, family, column( "startTime", pathTrackingEntry.getStartTime() ) ) //
>>> +            .addInsertion( id, family, column( "executionTime", pathTrackingEntry.getExecutionTime() ) ) //
>>> +            .addInsertion( id, family, column( "level", pathTrackingEntry.getLevel() ) ) //
>>> +            .addInsertion( "PATH_TRACKING", markerFamilly, emptyColumn( id ) ) //
>>> +            .execute();
>>> +    }
>>> +
>>> +    protected String id( PathTrackingEntry pathTrackingEntry )
>>> +    {
>>> +        return cassandra.generateKey( pathTrackingEntry.getTrackingId(), //
>>> +                                      pathTrackingEntry.getClassName(),//
>>> +                                      pathTrackingEntry.getMethodName(), //
>>> +                                      Long.toString( pathTrackingEntry.getStartTime() ),//
>>> +                                      pathTrackingEntry.getNodeId() );
>>>      }
>>>
>>>      @Override
>>> @@ -48,4 +106,68 @@ public class CassandraPathTrackingDataSt
>>>      {
>>>          return null;
>>>      }
>>> +
>>> +    /**
>>> +     * <b>use with CAUTION as can return a lot of data</b>
>>> +     * <p>This method is use for testing purpose</p>
>>> +     *
>>> +     * @return {@link java.util.List} containing all {@link PathTrackingEntry}
>>> +     */
>>> +    public Map<String, Set<PathTrackingEntry>> retrieveAll()
>>> +    {
>>> +        final QueryResult<OrderedRows<String, String, String>> cResult = //
>>> +            HFactory.createRangeSlicesQuery( keyspace, //
>>> +                                             StringSerializer.get(), //
>>> +                                             StringSerializer.get(), //
>>> +                                             StringSerializer.get() ) //
>>> +                .setColumnFamily( family ) //
>>> +                .setRange( null, null, false, Integer.MAX_VALUE ) //
>>> +                .execute();
>>> +
>>> +        Map<String, Set<PathTrackingEntry>> entries = new TreeMap<String, Set<PathTrackingEntry>>();
>>> +
>>> +        final DynamicDelegatedSerializer<Object> serializer = new DynamicDelegatedSerializer<Object>();
>>> +
>>> +        for ( Row<String, String, String> row : cResult.get().getList() )
>>> +        {
>>> +            ColumnSlice<String, String> columnSlice = row.getColumnSlice();
>>> +            String trackingId = columnSlice.getColumnByName( "trackingId" ).getValue();
>>> +            String nodeId = columnSlice.getColumnByName( "nodeId" ).getValue();
>>> +            String className = columnSlice.getColumnByName( "className" ).getValue();
>>> +            String methodName = columnSlice.getColumnByName( "methodName" ).getValue();
>>> +
>>> +            Serializer<String> stringSerializer = columnSlice.getColumnByName( "startTime" ).getValueSerializer();
>>> +
>>> +            String foo = columnSlice.getColumnByName( "startTime" ).getValue();
>>> +            long startTime = getOrDefault( serializer, //
>>> +                                           columnSlice.getColumnByName( "startTime" ), //
>>> +                                           LongSerializer.get() ).longValue();
>>> +
>>> +            long executionTime = getOrDefault( serializer, //
>>> +                                               columnSlice.getColumnByName( "executionTime" ), //
>>> +                                               LongSerializer.get() ).longValue();
>>> +
>>> +            int level = getOrDefault( serializer, //
>>> +                                      columnSlice.getColumnByName( "level" ), //
>>> +                                      LongSerializer.get() ).intValue();
>>> +
>>> +            Set<PathTrackingEntry> pathTrackingEntries = entries.get( trackingId );
>>> +            if ( pathTrackingEntries == null )
>>> +            {
>>> +                pathTrackingEntries = new TreeSet<PathTrackingEntry>();
>>> +            }
>>> +            pathTrackingEntries.add( new PathTrackingEntry( trackingId, //
>>> +                                                            nodeId, //
>>> +                                                            className, //
>>> +                                                            methodName, //
>>> +                                                            startTime, //
>>> +                                                            executionTime, //
>>> +                                                            level ) );
>>> +
>>> +            entries.put( trackingId, pathTrackingEntries );
>>> +
>>> +        }
>>> +
>>> +        return entries;
>>> +    }
>>>  }
>>>
>>> Copied: incubator/sirona/trunk/server/store/cassandra/src/test/java/org/apache/sirona/cassandra/local/PathTrackingDataStoreTest.java (from r1569203, incubator/sirona/trunk/server/store/cassandra/src/main/java/org/apache/sirona/cassandra/pathtracking/CassandraPathTrackingDataStore.java)
>>> URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/server/store/cassandra/src/test/java/org/apache/sirona/cassandra/local/PathTrackingDataStoreTest.java?p2=incubator/sirona/trunk/server/store/cassandra/src/test/java/org/apache/sirona/cassandra/local/PathTrackingDataStoreTest.java&p1=incubator/sirona/trunk/server/store/cassandra/src/main/java/org/apache/sirona/cassandra/pathtracking/CassandraPathTrackingDataStore.java&r1=1569203&r2=1569204&rev=1569204&view=diff
>>> ==============================================================================
>>> --- incubator/sirona/trunk/server/store/cassandra/src/main/java/org/apache/sirona/cassandra/pathtracking/CassandraPathTrackingDataStore.java (original)
>>> +++ incubator/sirona/trunk/server/store/cassandra/src/test/java/org/apache/sirona/cassandra/local/PathTrackingDataStoreTest.java Tue Feb 18 06:00:22 2014
>>> @@ -14,38 +14,40 @@
>>>   * See the License for the specific language governing permissions and
>>>   * limitations under the License.
>>>   */
>>> +package org.apache.sirona.cassandra.local;
>>>
>>> -package org.apache.sirona.cassandra.pathtracking;
>>> -
>>> -import org.apache.sirona.store.tracking.PathTrackingDataStore;
>>> +import org.apache.sirona.cassandra.framework.CassandraRunner;
>>> +import org.apache.sirona.cassandra.pathtracking.CassandraPathTrackingDataStore;
>>> +import org.apache.sirona.configuration.ioc.IoCs;
>>> +import org.apache.sirona.tracking.PathTracker;
>>>  import org.apache.sirona.tracking.PathTrackingEntry;
>>> +import org.junit.Assert;
>>> +import org.junit.Test;
>>> +import org.junit.runner.RunWith;
>>>
>>> -import java.util.Collection;
>>>  import java.util.Date;
>>> -import java.util.List;
>>>
>>>  /**
>>>   * @author Olivier Lamy
>>>   */
>>> -public class CassandraPathTrackingDataStore
>>> -    implements PathTrackingDataStore
>>> +@RunWith( CassandraRunner.class )
>>> +public class PathTrackingDataStoreTest
>>>  {
>>>
>>> -    @Override
>>> -    public void store( PathTrackingEntry pathTrackingEntry )
>>> +    @Test
>>> +    public void test_save()
>>> +        throws Exception
>>>      {
>>>
>>> -    }
>>> +        CassandraPathTrackingDataStore store = IoCs.processInstance( new CassandraPathTrackingDataStore() );
>>>
>>> -    @Override
>>> -    public Collection<PathTrackingEntry> retrieve( String trackingId )
>>> -    {
>>> -        return null;
>>> -    }
>>> +        PathTrackingEntry entry =
>>> +            new PathTrackingEntry( PathTracker.get(), "nodeId", "org.au.beer.TheBest", "littlecreatures",
>>> +                                   new Date().getTime(), 12, 1 );
>>> +
>>> +        store.store( entry );
>>> +
>>> +        //Assert.assertFalse( store.retrieveAll().isEmpty() );
>>>
>>> -    @Override
>>> -    public Collection<String> retrieveTrackingIds( Date startTime, Date endTime )
>>> -    {
>>> -        return null;
>>>      }
>>>  }
>>>
>>>
>
>
>
> --
> Olivier Lamy
> Ecetera: http://ecetera.com.au
> http://twitter.com/olamy | http://linkedin.com/in/olamy

Re: svn commit: r1569204 - in /incubator/sirona/trunk: core/src/main/java/org/apache/sirona/tracking/ server/store/cassandra/src/main/java/org/apache/sirona/cassandra/ server/store/cassandra/src/main/java/org/apache/sirona/cassandra/collector/ server/store...

Posted by Olivier Lamy <ol...@apache.org>.
I added that for testing purpose only (as stated in the javadoc) and
that's not in the API only in implementations.
Anyway if you prefer to remove it go.

On 18 February 2014 17:38, Romain Manni-Bucau <rm...@gmail.com> wrote:
> I'd remove retrieveAll, using all dates should be enough no?
> Romain Manni-Bucau
> Twitter: @rmannibucau
> Blog: http://rmannibucau.wordpress.com/
> LinkedIn: http://fr.linkedin.com/in/rmannibucau
> Github: https://github.com/rmannibucau
>
>
>
> 2014-02-18 7:00 GMT+01:00  <ol...@apache.org>:
>> Author: olamy
>> Date: Tue Feb 18 06:00:22 2014
>> New Revision: 1569204
>>
>> URL: http://svn.apache.org/r1569204
>> Log:
>> start working on PathTracking cassandra storage
>>
>> Added:
>>     incubator/sirona/trunk/server/store/cassandra/src/test/java/org/apache/sirona/cassandra/local/PathTrackingDataStoreTest.java
>>       - copied, changed from r1569203, incubator/sirona/trunk/server/store/cassandra/src/main/java/org/apache/sirona/cassandra/pathtracking/CassandraPathTrackingDataStore.java
>> Modified:
>>     incubator/sirona/trunk/core/src/main/java/org/apache/sirona/tracking/PathTracker.java
>>     incubator/sirona/trunk/server/store/cassandra/src/main/java/org/apache/sirona/cassandra/CassandraBuilder.java
>>     incubator/sirona/trunk/server/store/cassandra/src/main/java/org/apache/sirona/cassandra/collector/CassandraSirona.java
>>     incubator/sirona/trunk/server/store/cassandra/src/main/java/org/apache/sirona/cassandra/collector/counter/CassandraCollectorCounterDataStore.java
>>     incubator/sirona/trunk/server/store/cassandra/src/main/java/org/apache/sirona/cassandra/pathtracking/CassandraPathTrackingDataStore.java
>>
>> Modified: incubator/sirona/trunk/core/src/main/java/org/apache/sirona/tracking/PathTracker.java
>> URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/core/src/main/java/org/apache/sirona/tracking/PathTracker.java?rev=1569204&r1=1569203&r2=1569204&view=diff
>> ==============================================================================
>> --- incubator/sirona/trunk/core/src/main/java/org/apache/sirona/tracking/PathTracker.java (original)
>> +++ incubator/sirona/trunk/core/src/main/java/org/apache/sirona/tracking/PathTracker.java Tue Feb 18 06:00:22 2014
>> @@ -133,6 +133,9 @@ public class PathTracker
>>          THREAD_LOCAL_TX.set( uuid );
>>      }
>>
>> +
>> +    // An other solution could be using Thread.currentThread().getStackTrace()
>> +
>>      /**
>>       * FIXME not sure we really need the uuid but just in case for future usage :-)
>>       */
>>
>> Modified: incubator/sirona/trunk/server/store/cassandra/src/main/java/org/apache/sirona/cassandra/CassandraBuilder.java
>> URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/server/store/cassandra/src/main/java/org/apache/sirona/cassandra/CassandraBuilder.java?rev=1569204&r1=1569203&r2=1569204&view=diff
>> ==============================================================================
>> --- incubator/sirona/trunk/server/store/cassandra/src/main/java/org/apache/sirona/cassandra/CassandraBuilder.java (original)
>> +++ incubator/sirona/trunk/server/store/cassandra/src/main/java/org/apache/sirona/cassandra/CassandraBuilder.java Tue Feb 18 06:00:22 2014
>> @@ -28,9 +28,11 @@ public class CassandraBuilder {
>>      private String counterColumnFamily = "counters_values";
>>      private String gaugeValuesColumnFamily = "gauges_values";
>>      private String statusColumnFamily = "statuses_values";
>> +    private String pathTrackingColumFamily = "path_tracking";
>>      private String markerCountersColumnFamily = "markers_counters";
>>      private String markerStatusesColumnFamily = "markers_statuses";
>>      private String markerGaugesColumFamily = "markers_gauges";
>> +    private String markerPathTrackingColumFamily = "markers_path_tracking";
>>      private String writeConsistencyLevel = HConsistencyLevel.QUORUM.name();
>>      private String readConsistencyLevel = HConsistencyLevel.QUORUM.name();
>>      private int replicationFactor = 1;
>> @@ -76,6 +78,14 @@ public class CassandraBuilder {
>>          return markerStatusesColumnFamily;
>>      }
>>
>> +    public String getPathTrackingColumFamily() {
>> +        return pathTrackingColumFamily;
>> +    }
>> +
>> +    public String getMarkerPathTrackingColumFamily() {
>> +        return markerPathTrackingColumFamily;
>> +    }
>> +
>>      public HConsistencyLevel getWriteConsistencyLevel() {
>>          return HConsistencyLevel.valueOf(writeConsistencyLevel);
>>      }
>>
>> Modified: incubator/sirona/trunk/server/store/cassandra/src/main/java/org/apache/sirona/cassandra/collector/CassandraSirona.java
>> URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/server/store/cassandra/src/main/java/org/apache/sirona/cassandra/collector/CassandraSirona.java?rev=1569204&r1=1569203&r2=1569204&view=diff
>> ==============================================================================
>> --- incubator/sirona/trunk/server/store/cassandra/src/main/java/org/apache/sirona/cassandra/collector/CassandraSirona.java (original)
>> +++ incubator/sirona/trunk/server/store/cassandra/src/main/java/org/apache/sirona/cassandra/collector/CassandraSirona.java Tue Feb 18 06:00:22 2014
>> @@ -17,6 +17,7 @@
>>  package org.apache.sirona.cassandra.collector;
>>
>>  import me.prettyprint.cassandra.model.ConfigurableConsistencyLevel;
>> +import me.prettyprint.cassandra.serializers.DoubleSerializer;
>>  import me.prettyprint.cassandra.serializers.SerializerTypeInferer;
>>  import me.prettyprint.cassandra.service.CassandraHostConfigurator;
>>  import me.prettyprint.cassandra.service.StringKeyIterator;
>> @@ -29,6 +30,7 @@ import me.prettyprint.hector.api.ddl.Col
>>  import me.prettyprint.hector.api.ddl.ComparatorType;
>>  import me.prettyprint.hector.api.factory.HFactory;
>>  import org.apache.sirona.cassandra.CassandraBuilder;
>> +import org.apache.sirona.cassandra.DynamicDelegatedSerializer;
>>  import org.apache.sirona.configuration.ioc.Destroying;
>>  import org.apache.sirona.configuration.ioc.IoCs;
>>
>> @@ -60,19 +62,36 @@ public class CassandraSirona {
>>          consistencyLevelPolicy.setDefaultWriteConsistencyLevel(builder.getWriteConsistencyLevel());
>>          keyspace = HFactory.createKeyspace(keyspaceName, cluster, consistencyLevelPolicy);
>>
>> -        final ColumnFamilyDefinition gauges = HFactory.createColumnFamilyDefinition(keyspaceName, builder.getGaugeValuesColumnFamily(), ComparatorType.LONGTYPE);
>> -        final ColumnFamilyDefinition markersGauges = HFactory.createColumnFamilyDefinition(keyspaceName, builder.getMarkerGaugesColumFamily(), ComparatorType.UTF8TYPE);
>> -        final ColumnFamilyDefinition counters = HFactory.createColumnFamilyDefinition(keyspaceName, builder.getCounterColumnFamily(), ComparatorType.UTF8TYPE);
>> -        final ColumnFamilyDefinition markersCounters = HFactory.createColumnFamilyDefinition(keyspaceName, builder.getMarkerCountersColumnFamily(), ComparatorType.UTF8TYPE);
>> -        final ColumnFamilyDefinition statuses = HFactory.createColumnFamilyDefinition(keyspaceName, builder.getStatusColumnFamily(), ComparatorType.UTF8TYPE);
>> -        final ColumnFamilyDefinition markersStatuses = HFactory.createColumnFamilyDefinition(keyspaceName, builder.getMarkerStatusesColumnFamily(), ComparatorType.UTF8TYPE);
>> +        final ColumnFamilyDefinition gauges =
>> +            HFactory.createColumnFamilyDefinition(keyspaceName, builder.getGaugeValuesColumnFamily(), ComparatorType.LONGTYPE);
>> +
>> +        final ColumnFamilyDefinition markersGauges =
>> +            HFactory.createColumnFamilyDefinition(keyspaceName, builder.getMarkerGaugesColumFamily(), ComparatorType.UTF8TYPE);
>> +
>> +        final ColumnFamilyDefinition counters =
>> +            HFactory.createColumnFamilyDefinition(keyspaceName, builder.getCounterColumnFamily(), ComparatorType.UTF8TYPE);
>> +
>> +        final ColumnFamilyDefinition markersCounters =
>> +            HFactory.createColumnFamilyDefinition(keyspaceName, builder.getMarkerCountersColumnFamily(), ComparatorType.UTF8TYPE);
>> +
>> +        final ColumnFamilyDefinition statuses =
>> +            HFactory.createColumnFamilyDefinition(keyspaceName, builder.getStatusColumnFamily(), ComparatorType.UTF8TYPE);
>> +
>> +        final ColumnFamilyDefinition markersStatuses =
>> +            HFactory.createColumnFamilyDefinition(keyspaceName, builder.getMarkerStatusesColumnFamily(), ComparatorType.UTF8TYPE);
>> +
>> +        final ColumnFamilyDefinition pathTracking =
>> +            HFactory.createColumnFamilyDefinition( keyspaceName, builder.getPathTrackingColumFamily(), ComparatorType.UTF8TYPE);
>> +
>> +        final ColumnFamilyDefinition markerPathTracking =
>> +            HFactory.createColumnFamilyDefinition( keyspaceName, builder.getMarkerPathTrackingColumFamily(), ComparatorType.UTF8TYPE);
>>
>>          { // ensure keyspace exists, here if the keyspace doesn't exist we suppose nothing exist
>>              if (cluster.describeKeyspace(keyspaceName) == null) {
>>                  LOGGER.info("Creating Sirona Cassandra '" + keyspaceName + "' keyspace.");
>>                  cluster.addKeyspace(
>>                      HFactory.createKeyspaceDefinition(keyspaceName, ThriftKsDef.DEF_STRATEGY_CLASS, builder.getReplicationFactor(),
>> -                        asList(counters, markersCounters, gauges, markersGauges, statuses, markersStatuses)));
>> +                        asList(counters, markersCounters, gauges, markersGauges, statuses, markersStatuses,pathTracking,markerPathTracking)));
>>              }
>>          }
>>      }
>> @@ -119,6 +138,14 @@ public class CassandraSirona {
>>          return builder.getMarkerGaugesColumFamily();
>>      }
>>
>> +    public String getPathTrackingColumFamily() {
>> +        return builder.getPathTrackingColumFamily();
>> +    }
>> +
>> +    public String getMarkerPathTrackingColumFamily() {
>> +        return builder.getMarkerPathTrackingColumFamily();
>> +    }
>> +
>>      public String getMarkerCountersColumnFamily() {
>>          return builder.getMarkerCountersColumnFamily();
>>      }
>> @@ -131,6 +158,10 @@ public class CassandraSirona {
>>          return SEPARATOR;
>>      }
>>
>> +    //---------------------------------------------------------
>> +    // utils static methods
>> +    //---------------------------------------------------------
>> +
>>      public static HColumn<String, ?> emptyColumn(final String name) {
>>          return column(name, EMPTY_VALUE);
>>      }
>> @@ -146,4 +177,19 @@ public class CassandraSirona {
>>          }
>>          return set;
>>      }
>> +
>> +    public static Number getOrDefault(final DynamicDelegatedSerializer delegatedSerializer, final HColumn<?, ?> col, final Serializer<?> serializer) {
>> +        delegatedSerializer.setDelegate(serializer);
>> +        if (col == null || col.getValue() == null) {
>> +            if ( DoubleSerializer.get() == serializer) {
>> +                return Double.NaN;
>> +            }
>> +            return 0;
>> +        }
>> +        final Object value = col.getValue();
>> +        if (Number.class.isInstance(value)) {
>> +            return Number.class.cast(value);
>> +        }
>> +        throw new IllegalArgumentException("not a number " + value);
>> +    }
>>  }
>>
>> Modified: incubator/sirona/trunk/server/store/cassandra/src/main/java/org/apache/sirona/cassandra/collector/counter/CassandraCollectorCounterDataStore.java
>> URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/server/store/cassandra/src/main/java/org/apache/sirona/cassandra/collector/counter/CassandraCollectorCounterDataStore.java?rev=1569204&r1=1569203&r2=1569204&view=diff
>> ==============================================================================
>> --- incubator/sirona/trunk/server/store/cassandra/src/main/java/org/apache/sirona/cassandra/collector/counter/CassandraCollectorCounterDataStore.java (original)
>> +++ incubator/sirona/trunk/server/store/cassandra/src/main/java/org/apache/sirona/cassandra/collector/counter/CassandraCollectorCounterDataStore.java Tue Feb 18 06:00:22 2014
>> @@ -21,10 +21,8 @@ import me.prettyprint.cassandra.serializ
>>  import me.prettyprint.cassandra.serializers.LongSerializer;
>>  import me.prettyprint.cassandra.serializers.StringSerializer;
>>  import me.prettyprint.hector.api.Keyspace;
>> -import me.prettyprint.hector.api.Serializer;
>>  import me.prettyprint.hector.api.beans.ColumnSlice;
>>  import me.prettyprint.hector.api.beans.HColumn;
>> -import me.prettyprint.hector.api.beans.HSuperColumn;
>>  import me.prettyprint.hector.api.factory.HFactory;
>>  import me.prettyprint.hector.api.query.QueryResult;
>>  import org.apache.sirona.Role;
>> @@ -43,9 +41,7 @@ import java.util.HashMap;
>>  import java.util.LinkedList;
>>  import java.util.Map;
>>
>> -import static org.apache.sirona.cassandra.collector.CassandraSirona.column;
>> -import static org.apache.sirona.cassandra.collector.CassandraSirona.emptyColumn;
>> -import static org.apache.sirona.cassandra.collector.CassandraSirona.keys;
>> +import static org.apache.sirona.cassandra.collector.CassandraSirona.*;
>>
>>  public class CassandraCollectorCounterDataStore extends InMemoryCollectorCounterStore {
>>      private final Keyspace keyspace;
>> @@ -161,14 +157,15 @@ public class CassandraCollectorCounterDa
>>                                             final String marker) {
>>          return new CassandraLeafCounter(ckey, this, marker)
>>              .sync(new M2AwareStatisticalSummary(
>> -                getOrDefault(serializer, map.getColumnByName("mean"), DoubleSerializer.get()).doubleValue(),
>> -                getOrDefault(serializer, map.getColumnByName("variance"), DoubleSerializer.get()).doubleValue(),
>> -                getOrDefault(serializer, map.getColumnByName("n"), LongSerializer.get()).longValue(),
>> -                getOrDefault(serializer, map.getColumnByName("max"), DoubleSerializer.get()).doubleValue(),
>> -                getOrDefault(serializer, map.getColumnByName("min"), DoubleSerializer.get()).doubleValue(),
>> -                getOrDefault(serializer, map.getColumnByName("sum"), DoubleSerializer.get()).doubleValue(),
>> -                getOrDefault(serializer, map.getColumnByName("m2"), DoubleSerializer.get()).doubleValue()),
>> -                getOrDefault(serializer, map.getColumnByName("maxConcurrency"), IntegerSerializer.get()).intValue());
>> +                getOrDefault( serializer, map.getColumnByName( "mean" ), DoubleSerializer.get() ).doubleValue(),
>> +                getOrDefault( serializer, map.getColumnByName( "variance" ), DoubleSerializer.get() ).doubleValue(),
>> +                getOrDefault( serializer, map.getColumnByName( "n" ), LongSerializer.get() ).longValue(),
>> +                getOrDefault( serializer, map.getColumnByName( "max" ), DoubleSerializer.get() ).doubleValue(),
>> +                getOrDefault( serializer, map.getColumnByName( "min" ), DoubleSerializer.get() ).doubleValue(),
>> +                getOrDefault( serializer, map.getColumnByName( "sum" ), DoubleSerializer.get() ).doubleValue(),
>> +                getOrDefault( serializer, map.getColumnByName( "m2" ), DoubleSerializer.get() ).doubleValue()),
>> +                getOrDefault( serializer, map.getColumnByName( "maxConcurrency" ),
>> +                                              IntegerSerializer.get() ).intValue());
>>      }
>>
>>      protected CassandraLeafCounter save(final CassandraLeafCounter counter, final String marker) {
>> @@ -203,19 +200,5 @@ public class CassandraCollectorCounterDa
>>          return cassandra;
>>      }
>>
>> -    protected static Number getOrDefault(final DynamicDelegatedSerializer delegatedSerializer, final HColumn<?, ?> col, final Serializer<?> serializer) {
>> -        delegatedSerializer.setDelegate(serializer);
>> -        if (col == null || col.getValue() == null) {
>> -            if (DoubleSerializer.get() == serializer) {
>> -                return Double.NaN;
>> -            }
>> -            return 0;
>> -        }
>>
>> -        final Object value = col.getValue();
>> -        if (Number.class.isInstance(value)) {
>> -            return Number.class.cast(value);
>> -        }
>> -        throw new IllegalArgumentException("not a number " + value);
>> -    }
>>  }
>>
>> Modified: incubator/sirona/trunk/server/store/cassandra/src/main/java/org/apache/sirona/cassandra/pathtracking/CassandraPathTrackingDataStore.java
>> URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/server/store/cassandra/src/main/java/org/apache/sirona/cassandra/pathtracking/CassandraPathTrackingDataStore.java?rev=1569204&r1=1569203&r2=1569204&view=diff
>> ==============================================================================
>> --- incubator/sirona/trunk/server/store/cassandra/src/main/java/org/apache/sirona/cassandra/pathtracking/CassandraPathTrackingDataStore.java (original)
>> +++ incubator/sirona/trunk/server/store/cassandra/src/main/java/org/apache/sirona/cassandra/pathtracking/CassandraPathTrackingDataStore.java Tue Feb 18 06:00:22 2014
>> @@ -17,12 +17,30 @@
>>
>>  package org.apache.sirona.cassandra.pathtracking;
>>
>> +import me.prettyprint.cassandra.serializers.LongSerializer;
>> +import me.prettyprint.cassandra.serializers.StringSerializer;
>> +import me.prettyprint.hector.api.Keyspace;
>> +import me.prettyprint.hector.api.Serializer;
>> +import me.prettyprint.hector.api.beans.ColumnSlice;
>> +import me.prettyprint.hector.api.beans.OrderedRows;
>> +import me.prettyprint.hector.api.beans.Row;
>> +import me.prettyprint.hector.api.factory.HFactory;
>> +import me.prettyprint.hector.api.mutation.Mutator;
>> +import me.prettyprint.hector.api.query.QueryResult;
>> +import org.apache.sirona.cassandra.DynamicDelegatedSerializer;
>> +import org.apache.sirona.cassandra.collector.CassandraSirona;
>> +import org.apache.sirona.configuration.ioc.IoCs;
>>  import org.apache.sirona.store.tracking.PathTrackingDataStore;
>>  import org.apache.sirona.tracking.PathTrackingEntry;
>>
>>  import java.util.Collection;
>>  import java.util.Date;
>> -import java.util.List;
>> +import java.util.Map;
>> +import java.util.Set;
>> +import java.util.TreeMap;
>> +import java.util.TreeSet;
>> +
>> +import static org.apache.sirona.cassandra.collector.CassandraSirona.*;
>>
>>  /**
>>   * @author Olivier Lamy
>> @@ -31,10 +49,50 @@ public class CassandraPathTrackingDataSt
>>      implements PathTrackingDataStore
>>  {
>>
>> +    private final CassandraSirona cassandra;
>> +
>> +    private final Keyspace keyspace;
>> +
>> +    private final String family;
>> +
>> +    private final String markerFamilly;
>> +
>> +
>> +    public CassandraPathTrackingDataStore()
>> +    {
>> +        this.cassandra = IoCs.findOrCreateInstance( CassandraSirona.class );
>> +        this.keyspace = cassandra.getKeyspace();
>> +        this.family = cassandra.getPathTrackingColumFamily();
>> +        this.markerFamilly = cassandra.getMarkerPathTrackingColumFamily();
>> +    }
>> +
>>      @Override
>>      public void store( PathTrackingEntry pathTrackingEntry )
>>      {
>> +        final Mutator<String> mutator = HFactory.createMutator( keyspace, StringSerializer.get() );
>> +
>> +        final String id = id( pathTrackingEntry );
>>
>> +        HFactory.createMutator( keyspace, StringSerializer.get() )
>> +            //  values
>> +            .addInsertion( id, family, column( "trackingId", pathTrackingEntry.getTrackingId() ) ) //
>> +            .addInsertion( id, family, column( "nodeId", pathTrackingEntry.getNodeId() ) ) //
>> +            .addInsertion( id, family, column( "className", pathTrackingEntry.getClassName() ) ) //
>> +            .addInsertion( id, family, column( "methodName", pathTrackingEntry.getMethodName() ) ) //
>> +            .addInsertion( id, family, column( "startTime", pathTrackingEntry.getStartTime() ) ) //
>> +            .addInsertion( id, family, column( "executionTime", pathTrackingEntry.getExecutionTime() ) ) //
>> +            .addInsertion( id, family, column( "level", pathTrackingEntry.getLevel() ) ) //
>> +            .addInsertion( "PATH_TRACKING", markerFamilly, emptyColumn( id ) ) //
>> +            .execute();
>> +    }
>> +
>> +    protected String id( PathTrackingEntry pathTrackingEntry )
>> +    {
>> +        return cassandra.generateKey( pathTrackingEntry.getTrackingId(), //
>> +                                      pathTrackingEntry.getClassName(),//
>> +                                      pathTrackingEntry.getMethodName(), //
>> +                                      Long.toString( pathTrackingEntry.getStartTime() ),//
>> +                                      pathTrackingEntry.getNodeId() );
>>      }
>>
>>      @Override
>> @@ -48,4 +106,68 @@ public class CassandraPathTrackingDataSt
>>      {
>>          return null;
>>      }
>> +
>> +    /**
>> +     * <b>use with CAUTION as can return a lot of data</b>
>> +     * <p>This method is use for testing purpose</p>
>> +     *
>> +     * @return {@link java.util.List} containing all {@link PathTrackingEntry}
>> +     */
>> +    public Map<String, Set<PathTrackingEntry>> retrieveAll()
>> +    {
>> +        final QueryResult<OrderedRows<String, String, String>> cResult = //
>> +            HFactory.createRangeSlicesQuery( keyspace, //
>> +                                             StringSerializer.get(), //
>> +                                             StringSerializer.get(), //
>> +                                             StringSerializer.get() ) //
>> +                .setColumnFamily( family ) //
>> +                .setRange( null, null, false, Integer.MAX_VALUE ) //
>> +                .execute();
>> +
>> +        Map<String, Set<PathTrackingEntry>> entries = new TreeMap<String, Set<PathTrackingEntry>>();
>> +
>> +        final DynamicDelegatedSerializer<Object> serializer = new DynamicDelegatedSerializer<Object>();
>> +
>> +        for ( Row<String, String, String> row : cResult.get().getList() )
>> +        {
>> +            ColumnSlice<String, String> columnSlice = row.getColumnSlice();
>> +            String trackingId = columnSlice.getColumnByName( "trackingId" ).getValue();
>> +            String nodeId = columnSlice.getColumnByName( "nodeId" ).getValue();
>> +            String className = columnSlice.getColumnByName( "className" ).getValue();
>> +            String methodName = columnSlice.getColumnByName( "methodName" ).getValue();
>> +
>> +            Serializer<String> stringSerializer = columnSlice.getColumnByName( "startTime" ).getValueSerializer();
>> +
>> +            String foo = columnSlice.getColumnByName( "startTime" ).getValue();
>> +            long startTime = getOrDefault( serializer, //
>> +                                           columnSlice.getColumnByName( "startTime" ), //
>> +                                           LongSerializer.get() ).longValue();
>> +
>> +            long executionTime = getOrDefault( serializer, //
>> +                                               columnSlice.getColumnByName( "executionTime" ), //
>> +                                               LongSerializer.get() ).longValue();
>> +
>> +            int level = getOrDefault( serializer, //
>> +                                      columnSlice.getColumnByName( "level" ), //
>> +                                      LongSerializer.get() ).intValue();
>> +
>> +            Set<PathTrackingEntry> pathTrackingEntries = entries.get( trackingId );
>> +            if ( pathTrackingEntries == null )
>> +            {
>> +                pathTrackingEntries = new TreeSet<PathTrackingEntry>();
>> +            }
>> +            pathTrackingEntries.add( new PathTrackingEntry( trackingId, //
>> +                                                            nodeId, //
>> +                                                            className, //
>> +                                                            methodName, //
>> +                                                            startTime, //
>> +                                                            executionTime, //
>> +                                                            level ) );
>> +
>> +            entries.put( trackingId, pathTrackingEntries );
>> +
>> +        }
>> +
>> +        return entries;
>> +    }
>>  }
>>
>> Copied: incubator/sirona/trunk/server/store/cassandra/src/test/java/org/apache/sirona/cassandra/local/PathTrackingDataStoreTest.java (from r1569203, incubator/sirona/trunk/server/store/cassandra/src/main/java/org/apache/sirona/cassandra/pathtracking/CassandraPathTrackingDataStore.java)
>> URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/server/store/cassandra/src/test/java/org/apache/sirona/cassandra/local/PathTrackingDataStoreTest.java?p2=incubator/sirona/trunk/server/store/cassandra/src/test/java/org/apache/sirona/cassandra/local/PathTrackingDataStoreTest.java&p1=incubator/sirona/trunk/server/store/cassandra/src/main/java/org/apache/sirona/cassandra/pathtracking/CassandraPathTrackingDataStore.java&r1=1569203&r2=1569204&rev=1569204&view=diff
>> ==============================================================================
>> --- incubator/sirona/trunk/server/store/cassandra/src/main/java/org/apache/sirona/cassandra/pathtracking/CassandraPathTrackingDataStore.java (original)
>> +++ incubator/sirona/trunk/server/store/cassandra/src/test/java/org/apache/sirona/cassandra/local/PathTrackingDataStoreTest.java Tue Feb 18 06:00:22 2014
>> @@ -14,38 +14,40 @@
>>   * See the License for the specific language governing permissions and
>>   * limitations under the License.
>>   */
>> +package org.apache.sirona.cassandra.local;
>>
>> -package org.apache.sirona.cassandra.pathtracking;
>> -
>> -import org.apache.sirona.store.tracking.PathTrackingDataStore;
>> +import org.apache.sirona.cassandra.framework.CassandraRunner;
>> +import org.apache.sirona.cassandra.pathtracking.CassandraPathTrackingDataStore;
>> +import org.apache.sirona.configuration.ioc.IoCs;
>> +import org.apache.sirona.tracking.PathTracker;
>>  import org.apache.sirona.tracking.PathTrackingEntry;
>> +import org.junit.Assert;
>> +import org.junit.Test;
>> +import org.junit.runner.RunWith;
>>
>> -import java.util.Collection;
>>  import java.util.Date;
>> -import java.util.List;
>>
>>  /**
>>   * @author Olivier Lamy
>>   */
>> -public class CassandraPathTrackingDataStore
>> -    implements PathTrackingDataStore
>> +@RunWith( CassandraRunner.class )
>> +public class PathTrackingDataStoreTest
>>  {
>>
>> -    @Override
>> -    public void store( PathTrackingEntry pathTrackingEntry )
>> +    @Test
>> +    public void test_save()
>> +        throws Exception
>>      {
>>
>> -    }
>> +        CassandraPathTrackingDataStore store = IoCs.processInstance( new CassandraPathTrackingDataStore() );
>>
>> -    @Override
>> -    public Collection<PathTrackingEntry> retrieve( String trackingId )
>> -    {
>> -        return null;
>> -    }
>> +        PathTrackingEntry entry =
>> +            new PathTrackingEntry( PathTracker.get(), "nodeId", "org.au.beer.TheBest", "littlecreatures",
>> +                                   new Date().getTime(), 12, 1 );
>> +
>> +        store.store( entry );
>> +
>> +        //Assert.assertFalse( store.retrieveAll().isEmpty() );
>>
>> -    @Override
>> -    public Collection<String> retrieveTrackingIds( Date startTime, Date endTime )
>> -    {
>> -        return null;
>>      }
>>  }
>>
>>



-- 
Olivier Lamy
Ecetera: http://ecetera.com.au
http://twitter.com/olamy | http://linkedin.com/in/olamy