You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sirona.apache.org by rm...@apache.org on 2013/11/08 16:43:39 UTC

svn commit: r1540085 - in /incubator/sirona/trunk: agent/store/ agent/store/cassandra/ agent/store/cube/ agent/store/graphite/ server/ server/store/ server/store/cassandra/ server/store/cassandra/src/main/java/org/apache/sirona/cassandra/ server/store/...

Author: rmannibucau
Date: Fri Nov  8 15:43:38 2013
New Revision: 1540085

URL: http://svn.apache.org/r1540085
Log:
moving cassandra store to server/store/cassandra + adding cassandra store doc + finishing implementing cassandra store

Added:
    incubator/sirona/trunk/server/store/   (with props)
    incubator/sirona/trunk/server/store/cassandra/   (props changed)
      - copied from r1539707, incubator/sirona/trunk/agent/store/cassandra/
    incubator/sirona/trunk/server/store/cassandra/src/main/java/org/apache/sirona/cassandra/CassandraBuilder.java
      - copied, changed from r1540036, incubator/sirona/trunk/agent/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
      - copied, changed from r1540036, incubator/sirona/trunk/agent/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
      - copied, changed from r1540036, incubator/sirona/trunk/agent/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/collector/counter/CassandraLeafCounter.java
      - copied unchanged from r1539961, incubator/sirona/trunk/agent/store/cassandra/src/main/java/org/apache/sirona/cassandra/collector/counter/CassandraLeafCounter.java
    incubator/sirona/trunk/server/store/cassandra/src/main/java/org/apache/sirona/cassandra/collector/gauge/CassandraCollectorGaugeDataStore.java
      - copied unchanged from r1540036, incubator/sirona/trunk/agent/store/cassandra/src/main/java/org/apache/sirona/cassandra/collector/gauge/CassandraCollectorGaugeDataStore.java
    incubator/sirona/trunk/server/store/cassandra/src/test/java/org/apache/sirona/cassandra/collector/
      - copied from r1539961, incubator/sirona/trunk/agent/store/cassandra/src/test/java/org/apache/sirona/cassandra/collector/
    incubator/sirona/trunk/server/store/cassandra/src/test/java/org/apache/sirona/cassandra/collector/gauge/
      - copied from r1540036, incubator/sirona/trunk/agent/store/cassandra/src/test/java/org/apache/sirona/cassandra/collector/gauge/
    incubator/sirona/trunk/server/store/cassandra/src/test/java/org/apache/sirona/cassandra/collector/status/
    incubator/sirona/trunk/server/store/cassandra/src/test/java/org/apache/sirona/cassandra/collector/status/AgentStatusTest.java
    incubator/sirona/trunk/server/store/cassandra/src/test/java/org/apache/sirona/cassandra/framework/CassandraRunner.java
      - copied unchanged from r1540036, incubator/sirona/trunk/agent/store/cassandra/src/test/java/org/apache/sirona/cassandra/framework/CassandraRunner.java
    incubator/sirona/trunk/server/store/pom.xml
    incubator/sirona/trunk/src/site/markdown/cassandra.md
Removed:
    incubator/sirona/trunk/agent/store/cassandra/
    incubator/sirona/trunk/server/store/cassandra/src/main/java/org/apache/sirona/cassandra/collector/counter/CounterDao.java
    incubator/sirona/trunk/server/store/cassandra/src/main/resources/
    incubator/sirona/trunk/server/store/cassandra/src/test/java/org/apache/sirona/cassandra/AgentCounterTest.java
Modified:
    incubator/sirona/trunk/agent/store/cube/pom.xml
    incubator/sirona/trunk/agent/store/graphite/pom.xml
    incubator/sirona/trunk/agent/store/pom.xml
    incubator/sirona/trunk/server/pom.xml
    incubator/sirona/trunk/server/store/cassandra/pom.xml
    incubator/sirona/trunk/server/store/cassandra/src/main/java/org/apache/sirona/cassandra/collector/status/CassandraCollectorNodeStatusDataStore.java
    incubator/sirona/trunk/server/store/cassandra/src/test/java/org/apache/sirona/cassandra/collector/gauge/AgentGaugeTest.java
    incubator/sirona/trunk/src/site/markdown/collector.md
    incubator/sirona/trunk/src/site/markdown/configuration.md

Modified: incubator/sirona/trunk/agent/store/cube/pom.xml
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/agent/store/cube/pom.xml?rev=1540085&r1=1540084&r2=1540085&view=diff
==============================================================================
--- incubator/sirona/trunk/agent/store/cube/pom.xml (original)
+++ incubator/sirona/trunk/agent/store/cube/pom.xml Fri Nov  8 15:43:38 2013
@@ -19,7 +19,7 @@
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <parent>
-    <artifactId>sirona-store</artifactId>
+    <artifactId>sirona-agent-store</artifactId>
     <groupId>org.apache.sirona</groupId>
     <version>0.1-incubating-SNAPSHOT</version>
   </parent>

Modified: incubator/sirona/trunk/agent/store/graphite/pom.xml
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/agent/store/graphite/pom.xml?rev=1540085&r1=1540084&r2=1540085&view=diff
==============================================================================
--- incubator/sirona/trunk/agent/store/graphite/pom.xml (original)
+++ incubator/sirona/trunk/agent/store/graphite/pom.xml Fri Nov  8 15:43:38 2013
@@ -19,7 +19,7 @@
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <parent>
-    <artifactId>sirona-store</artifactId>
+    <artifactId>sirona-agent-store</artifactId>
     <groupId>org.apache.sirona</groupId>
     <version>0.1-incubating-SNAPSHOT</version>
   </parent>

Modified: incubator/sirona/trunk/agent/store/pom.xml
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/agent/store/pom.xml?rev=1540085&r1=1540084&r2=1540085&view=diff
==============================================================================
--- incubator/sirona/trunk/agent/store/pom.xml (original)
+++ incubator/sirona/trunk/agent/store/pom.xml Fri Nov  8 15:43:38 2013
@@ -26,13 +26,12 @@
 
   <modelVersion>4.0.0</modelVersion>
 
-  <artifactId>sirona-store</artifactId>
+  <artifactId>sirona-agent-store</artifactId>
   <name>Apache Sirona Incubator :: Agent :: Store</name>
   <packaging>pom</packaging>
 
   <modules>
     <module>graphite</module>
     <module>cube</module>
-    <module>cassandra</module>
   </modules>
 </project>

Modified: incubator/sirona/trunk/server/pom.xml
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/server/pom.xml?rev=1540085&r1=1540084&r2=1540085&view=diff
==============================================================================
--- incubator/sirona/trunk/server/pom.xml (original)
+++ incubator/sirona/trunk/server/pom.xml Fri Nov  8 15:43:38 2013
@@ -34,5 +34,6 @@
     <module>collector</module>
     <module>reporting</module>
     <module>plugins</module>
+    <module>store</module>
   </modules>
 </project>

Propchange: incubator/sirona/trunk/server/store/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Fri Nov  8 15:43:38 2013
@@ -0,0 +1 @@
+target

Propchange: incubator/sirona/trunk/server/store/cassandra/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Fri Nov  8 15:43:38 2013
@@ -0,0 +1 @@
+target

Modified: incubator/sirona/trunk/server/store/cassandra/pom.xml
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/server/store/cassandra/pom.xml?rev=1540085&r1=1539707&r2=1540085&view=diff
==============================================================================
--- incubator/sirona/trunk/server/store/cassandra/pom.xml (original)
+++ incubator/sirona/trunk/server/store/cassandra/pom.xml Fri Nov  8 15:43:38 2013
@@ -19,7 +19,7 @@
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <parent>
-    <artifactId>sirona-store</artifactId>
+    <artifactId>sirona-collector-store</artifactId>
     <groupId>org.apache.sirona</groupId>
     <version>0.1-incubating-SNAPSHOT</version>
   </parent>
@@ -27,7 +27,7 @@
   <modelVersion>4.0.0</modelVersion>
 
   <artifactId>sirona-cassandra</artifactId>
-  <name>Apache Sirona Incubator :: Agent :: Store :: Cassandra</name>
+  <name>Apache Sirona Incubator :: Server :: Store :: Cassandra</name>
 
   <dependencies>
     <dependency>

Copied: incubator/sirona/trunk/server/store/cassandra/src/main/java/org/apache/sirona/cassandra/CassandraBuilder.java (from r1540036, incubator/sirona/trunk/agent/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?p2=incubator/sirona/trunk/server/store/cassandra/src/main/java/org/apache/sirona/cassandra/CassandraBuilder.java&p1=incubator/sirona/trunk/agent/store/cassandra/src/main/java/org/apache/sirona/cassandra/CassandraBuilder.java&r1=1540036&r2=1540085&rev=1540085&view=diff
==============================================================================
--- incubator/sirona/trunk/agent/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 Fri Nov  8 15:43:38 2013
@@ -24,8 +24,7 @@ public class CassandraBuilder {
     private String cluster = "sirona-cluster";
     private String keyspace = "sirona";
     private String counterColumnFamily = "counters";
-    private String gaugeMetricsColumnFamily = "gauges_values";
-    private String gaugeRolesColumnFamily = "gauges_roles";
+    private String gaugeValuesColumnFamily = "gauges_values";
     private String statusColumnFamily = "statuses";
     private String markerCountersColumFamily = "markers_counters";
     private String markerGaugesColumFamily = "markers_gauges";
@@ -48,7 +47,7 @@ public class CassandraBuilder {
     }
 
     public String getGaugeValuesColumnFamily() {
-        return gaugeMetricsColumnFamily;
+        return gaugeValuesColumnFamily;
     }
 
     public String getStatusColumnFamily() {

Copied: incubator/sirona/trunk/server/store/cassandra/src/main/java/org/apache/sirona/cassandra/collector/CassandraSirona.java (from r1540036, incubator/sirona/trunk/agent/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?p2=incubator/sirona/trunk/server/store/cassandra/src/main/java/org/apache/sirona/cassandra/collector/CassandraSirona.java&p1=incubator/sirona/trunk/agent/store/cassandra/src/main/java/org/apache/sirona/cassandra/collector/CassandraSirona.java&r1=1540036&r2=1540085&rev=1540085&view=diff
==============================================================================
--- incubator/sirona/trunk/agent/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 Fri Nov  8 15:43:38 2013
@@ -26,6 +26,7 @@ import me.prettyprint.hector.api.Keyspac
 import me.prettyprint.hector.api.Serializer;
 import me.prettyprint.hector.api.beans.HColumn;
 import me.prettyprint.hector.api.ddl.ColumnFamilyDefinition;
+import me.prettyprint.hector.api.ddl.ColumnType;
 import me.prettyprint.hector.api.ddl.ComparatorType;
 import me.prettyprint.hector.api.factory.HFactory;
 import org.apache.sirona.cassandra.CassandraBuilder;
@@ -57,10 +58,12 @@ public class CassandraSirona {
         keyspace = HFactory.createKeyspace(keyspaceName, cluster);
 
         final ColumnFamilyDefinition counters = HFactory.createColumnFamilyDefinition(keyspaceName, builder.getCounterColumnFamily(), ComparatorType.UTF8TYPE);
+        final ColumnFamilyDefinition markersCounters = HFactory.createColumnFamilyDefinition(keyspaceName, builder.getMarkerCountersColumFamily(), ComparatorType.UTF8TYPE);
         final ColumnFamilyDefinition gauges = HFactory.createColumnFamilyDefinition(keyspaceName, builder.getGaugeValuesColumnFamily(), ComparatorType.UTF8TYPE);
         final ColumnFamilyDefinition markersGauges = HFactory.createColumnFamilyDefinition(keyspaceName, builder.getMarkerGaugesColumFamily(), ComparatorType.UTF8TYPE);
         final ColumnFamilyDefinition statuses = HFactory.createColumnFamilyDefinition(keyspaceName, builder.getStatusColumnFamily(), ComparatorType.UTF8TYPE);
-        final ColumnFamilyDefinition markersCounters = HFactory.createColumnFamilyDefinition(keyspaceName, builder.getMarkerCountersColumFamily(), ComparatorType.UTF8TYPE);
+        statuses.setColumnType(ColumnType.SUPER);
+        statuses.setSubComparatorType(ComparatorType.UTF8TYPE);
 
         { // ensure keyspace exists, here if the keyspace doesn't exist we suppose nothing exist
             if (cluster.describeKeyspace(keyspaceName) == null) {
@@ -114,6 +117,10 @@ public class CassandraSirona {
         return builder.getGaugeValuesColumnFamily();
     }
 
+    public String getStatusColumnFamily() {
+        return builder.getStatusColumnFamily();
+    }
+
     public String keySeparator() {
         return SEPARATOR;
     }
@@ -126,9 +133,9 @@ public class CassandraSirona {
         return HFactory.createColumn(name, value, (Serializer<A>) SerializerTypeInferer.getSerializer(name), (Serializer<B>) SerializerTypeInferer.getSerializer(value));
     }
 
-    public static Collection<String> keys(final Keyspace keyspace, final String markerFamily) {
+    public static Collection<String> keys(final Keyspace keyspace, final String family) {
         final Collection<String> set = new HashSet<String>();
-        for (final String item : new KeyIterator.Builder<String>(keyspace, markerFamily, StringSerializer.get()).build()) {
+        for (final String item : new KeyIterator.Builder<String>(keyspace, family, StringSerializer.get()).build()) {
             set.add(item);
         }
         return set;

Copied: incubator/sirona/trunk/server/store/cassandra/src/main/java/org/apache/sirona/cassandra/collector/counter/CassandraCollectorCounterDataStore.java (from r1540036, incubator/sirona/trunk/agent/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?p2=incubator/sirona/trunk/server/store/cassandra/src/main/java/org/apache/sirona/cassandra/collector/counter/CassandraCollectorCounterDataStore.java&p1=incubator/sirona/trunk/agent/store/cassandra/src/main/java/org/apache/sirona/cassandra/collector/counter/CassandraCollectorCounterDataStore.java&r1=1540036&r2=1540085&rev=1540085&view=diff
==============================================================================
--- incubator/sirona/trunk/agent/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 Fri Nov  8 15:43:38 2013
@@ -20,7 +20,6 @@ import me.prettyprint.cassandra.serializ
 import me.prettyprint.cassandra.serializers.IntegerSerializer;
 import me.prettyprint.cassandra.serializers.LongSerializer;
 import me.prettyprint.cassandra.serializers.StringSerializer;
-import me.prettyprint.cassandra.service.KeyIterator;
 import me.prettyprint.hector.api.Keyspace;
 import me.prettyprint.hector.api.Serializer;
 import me.prettyprint.hector.api.beans.ColumnSlice;
@@ -41,7 +40,6 @@ import org.apache.sirona.math.M2AwareSta
 
 import java.util.Collection;
 import java.util.HashMap;
-import java.util.HashSet;
 import java.util.LinkedList;
 import java.util.Map;
 
@@ -186,14 +184,14 @@ public class CassandraCollectorCounterDa
                                          final String marker) {
         return new CassandraLeafCounter(ckey, this, marker)
             .sync(new M2AwareStatisticalSummary(
-                getOrZero(serializer, map.getColumnByName("mean"), DoubleSerializer.get()).doubleValue(),
-                getOrZero(serializer, map.getColumnByName("variance"), DoubleSerializer.get()).doubleValue(),
-                getOrZero(serializer, map.getColumnByName("n"), LongSerializer.get()).longValue(),
-                getOrZero(serializer, map.getColumnByName("max"), DoubleSerializer.get()).doubleValue(),
-                getOrZero(serializer, map.getColumnByName("min"), DoubleSerializer.get()).doubleValue(),
-                getOrZero(serializer, map.getColumnByName("sum"), DoubleSerializer.get()).doubleValue(),
-                getOrZero(serializer, map.getColumnByName("m2"), DoubleSerializer.get()).doubleValue()),
-                getOrZero(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) {
@@ -226,9 +224,12 @@ public class CassandraCollectorCounterDa
         return cassandra.generateKey(key.getRole().getName(), key.getRole().getUnit().getName(), key.getName(), marker);
     }
 
-    protected static Number getOrZero(final DynamicDelegatedSerializer<Number> delegatedSerializer, final HColumn<String, Number> col, final Serializer<? extends Number> serializer) {
+    protected static Number getOrDefault(final DynamicDelegatedSerializer<Number> delegatedSerializer, final HColumn<String, Number> col, final Serializer<? extends Number> serializer) {
         delegatedSerializer.setDelegate(serializer);
         if (col == null || col.getValue() == null) {
+            if (DoubleSerializer.get() == serializer) {
+                return Double.NaN;
+            }
             return 0;
         }
         return col.getValue();

Modified: incubator/sirona/trunk/server/store/cassandra/src/main/java/org/apache/sirona/cassandra/collector/status/CassandraCollectorNodeStatusDataStore.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/server/store/cassandra/src/main/java/org/apache/sirona/cassandra/collector/status/CassandraCollectorNodeStatusDataStore.java?rev=1540085&r1=1539707&r2=1540085&view=diff
==============================================================================
--- incubator/sirona/trunk/server/store/cassandra/src/main/java/org/apache/sirona/cassandra/collector/status/CassandraCollectorNodeStatusDataStore.java (original)
+++ incubator/sirona/trunk/server/store/cassandra/src/main/java/org/apache/sirona/cassandra/collector/status/CassandraCollectorNodeStatusDataStore.java Fri Nov  8 15:43:38 2013
@@ -16,24 +16,86 @@
  */
 package org.apache.sirona.cassandra.collector.status;
 
+import me.prettyprint.cassandra.serializers.StringSerializer;
+import me.prettyprint.hector.api.Keyspace;
+import me.prettyprint.hector.api.beans.HColumn;
+import me.prettyprint.hector.api.beans.HSuperColumn;
+import me.prettyprint.hector.api.beans.OrderedSuperRows;
+import me.prettyprint.hector.api.beans.SuperRow;
+import me.prettyprint.hector.api.beans.SuperSlice;
+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.collector.CassandraSirona;
+import org.apache.sirona.configuration.Configuration;
 import org.apache.sirona.status.NodeStatus;
+import org.apache.sirona.status.Status;
+import org.apache.sirona.status.ValidationResult;
 import org.apache.sirona.store.status.CollectorNodeStatusDataStore;
 
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.LinkedList;
 import java.util.Map;
 
+import static org.apache.sirona.cassandra.collector.CassandraSirona.column;
+
 public class CassandraCollectorNodeStatusDataStore implements CollectorNodeStatusDataStore {
+    private final CassandraSirona cassandra;
+    private final Keyspace keyspace;
+    private final String family;
+
+    public CassandraCollectorNodeStatusDataStore() {
+        this.cassandra = Configuration.findOrCreateInstance(CassandraSirona.class);
+        this.keyspace = cassandra.getKeyspace();
+        this.family = cassandra.getStatusColumnFamily();
+    }
+
     @Override
     public Map<String, NodeStatus> statuses() {
-        throw new UnsupportedOperationException();
+        final QueryResult<OrderedSuperRows<String, String, String, String>> mainResult =
+            HFactory.createRangeSuperSlicesQuery(keyspace, StringSerializer.get(), StringSerializer.get(), StringSerializer.get(), StringSerializer.get())
+                .setColumnFamily(family)
+                .setRange(null, null, false, Integer.MAX_VALUE)
+                .setKeys("", "")
+                .execute();
+
+        if (mainResult == null) {
+            return Collections.emptyMap();
+        }
+
+        final Map<String, NodeStatus> statuses = new HashMap<String, NodeStatus>();
+        for (final SuperRow<String, String, String, String> status : mainResult.get()) {
+            final SuperSlice<String,String,String> superSlice = status.getSuperSlice();
+
+            final Collection<ValidationResult> validations = new LinkedList<ValidationResult>();
+            for (final HSuperColumn<String, String, String> column : superSlice.getSuperColumns()) {
+                validations.add(new ValidationResult(column.getName(), Status.valueOf(column.getSubColumnByName("status").getValue()), column.getSubColumnByName("description").getValue()));
+            }
+            statuses.put(status.getKey(), new NodeStatus(validations.toArray(new ValidationResult[validations.size()])));
+        }
+        return statuses;
     }
 
-    @Override
+    @Override // TODO: like clearCounters() see if it should do something or not
     public void reset() {
-        throw new UnsupportedOperationException();
+        // no-op
     }
 
     @Override
     public void store(final String node, final NodeStatus status) {
-        throw new UnsupportedOperationException();
+        final Mutator<String> mutator = HFactory.createMutator(keyspace, StringSerializer.get());
+        for (final ValidationResult validationResult : status.getResults()) {
+            mutator.addInsertion(node, family,
+                HFactory.createSuperColumn(validationResult.getName(),
+                    Arrays.<HColumn<String, String>>asList(
+                        column("description", validationResult.getMessage()),
+                        column("status", validationResult.getStatus().name())
+                    ),
+                    StringSerializer.get(), StringSerializer.get(), StringSerializer.get()));
+        }
+        mutator.execute();
     }
 }

Modified: incubator/sirona/trunk/server/store/cassandra/src/test/java/org/apache/sirona/cassandra/collector/gauge/AgentGaugeTest.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/server/store/cassandra/src/test/java/org/apache/sirona/cassandra/collector/gauge/AgentGaugeTest.java?rev=1540085&r1=1540036&r2=1540085&view=diff
==============================================================================
--- incubator/sirona/trunk/server/store/cassandra/src/test/java/org/apache/sirona/cassandra/collector/gauge/AgentGaugeTest.java (original)
+++ incubator/sirona/trunk/server/store/cassandra/src/test/java/org/apache/sirona/cassandra/collector/gauge/AgentGaugeTest.java Fri Nov  8 15:43:38 2013
@@ -41,7 +41,7 @@ public class AgentGaugeTest {
         final Collection<String> markers = new CassandraCollectorGaugeDataStore().markers();
         assertNotNull(markers);
         assertEquals(1, markers.size());
-        assertEquals("node1", markers.iterator().next());
+        assertEquals(MARKER, markers.iterator().next());
     }
 
     @Test

Added: incubator/sirona/trunk/server/store/cassandra/src/test/java/org/apache/sirona/cassandra/collector/status/AgentStatusTest.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/server/store/cassandra/src/test/java/org/apache/sirona/cassandra/collector/status/AgentStatusTest.java?rev=1540085&view=auto
==============================================================================
--- incubator/sirona/trunk/server/store/cassandra/src/test/java/org/apache/sirona/cassandra/collector/status/AgentStatusTest.java (added)
+++ incubator/sirona/trunk/server/store/cassandra/src/test/java/org/apache/sirona/cassandra/collector/status/AgentStatusTest.java Fri Nov  8 15:43:38 2013
@@ -0,0 +1,68 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.sirona.cassandra.collector.status;
+
+import org.apache.sirona.cassandra.framework.CassandraRunner;
+import org.apache.sirona.status.NodeStatus;
+import org.apache.sirona.status.Status;
+import org.apache.sirona.status.ValidationResult;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import java.util.Map;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+
+@RunWith(CassandraRunner.class)
+public class AgentStatusTest {
+    @Test
+    public void checkPersistence() {
+        new CassandraCollectorNodeStatusDataStore().store("node1", new NodeStatus(new ValidationResult[] {
+            new ValidationResult("v1", Status.OK, "m1"), new ValidationResult("v2", Status.KO, "m2") }));
+        new CassandraCollectorNodeStatusDataStore().store("node2", new NodeStatus(new ValidationResult[] {
+            new ValidationResult("v3", Status.OK, "m3"), new ValidationResult("v4", Status.KO, "m4") }));
+
+        final Map<String, NodeStatus> statuses = new CassandraCollectorNodeStatusDataStore().statuses();
+
+        assertEquals(2, statuses.size());
+
+        final NodeStatus n1 = statuses.get("node1");
+        assertNotNull(n1);
+
+        final ValidationResult[] result1 = n1.getResults();
+        assertEquals(2, result1.length);
+        assertEquals("v1", result1[0].getName());
+        assertEquals("m1", result1[0].getMessage());
+        assertEquals(Status.OK, result1[0].getStatus());
+        assertEquals("v2", result1[1].getName());
+        assertEquals("m2", result1[1].getMessage());
+        assertEquals(Status.KO, result1[1].getStatus());
+
+        final NodeStatus n2 = statuses.get("node2");
+        assertNotNull(n2);
+
+        final ValidationResult[] result2 = n2.getResults();
+        assertEquals(2, result2.length);
+        assertEquals("v3", result2[0].getName());
+        assertEquals("m3", result2[0].getMessage());
+        assertEquals(Status.OK, result2[0].getStatus());
+        assertEquals("v4", result2[1].getName());
+        assertEquals("m4", result2[1].getMessage());
+        assertEquals(Status.KO, result2[1].getStatus());
+    }
+}

Added: incubator/sirona/trunk/server/store/pom.xml
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/server/store/pom.xml?rev=1540085&view=auto
==============================================================================
--- incubator/sirona/trunk/server/store/pom.xml (added)
+++ incubator/sirona/trunk/server/store/pom.xml Fri Nov  8 15:43:38 2013
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <artifactId>sirona-server</artifactId>
+    <groupId>org.apache.sirona</groupId>
+    <version>0.1-incubating-SNAPSHOT</version>
+  </parent>
+
+  <artifactId>sirona-collector-store</artifactId>
+  <name>Apache Sirona Incubator :: Server :: Store</name>
+  <packaging>pom</packaging>
+
+  <modules>
+    <module>cassandra</module>
+  </modules>
+</project>

Added: incubator/sirona/trunk/src/site/markdown/cassandra.md
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/src/site/markdown/cassandra.md?rev=1540085&view=auto
==============================================================================
--- incubator/sirona/trunk/src/site/markdown/cassandra.md (added)
+++ incubator/sirona/trunk/src/site/markdown/cassandra.md Fri Nov  8 15:43:38 2013
@@ -0,0 +1,51 @@
+<!---
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+#Goal
+
+Cassandra modules aims to provide an Apache Cassandra persistence for collector.
+
+The benefit are:
+
+* your data are persisted whatever happen to the instances
+* your can split collector in two parts: the collector (instance getting data) and reporting instance (the gui)
+
+
+# Usage
+
+To use it simply set the `org.apache.sirona.cassandra.CassandraCollectorDataStoreFactory`:
+
+<pre class="prettyprint linenums"><![CDATA[
+org.apache.sirona.store.DataStoreFactory = org.apache.sirona.cassandra.CassandraCollectorDataStoreFactory
+]]></pre>
+
+# Configuration
+
+Configuration is done through `org.apache.sirona.cassandra.CassandraBuilder`. here is the default configuration:
+
+<pre class="prettyprint linenums"><![CDATA[
+org.apache.sirona.cassandra.CassandraBuilder.hosts = localhost:9171
+org.apache.sirona.cassandra.CassandraBuilder.cluster = sirona-cluster
+org.apache.sirona.cassandra.CassandraBuilder.keyspace = sirona
+org.apache.sirona.cassandra.CassandraBuilder.counterColumnFamily = counters
+org.apache.sirona.cassandra.CassandraBuilder.gaugeValuesColumnFamily = gauges_values
+org.apache.sirona.cassandra.CassandraBuilder.statusColumnFamily = statuses
+org.apache.sirona.cassandra.CassandraBuilder.markerCountersColumFamily = markers_counters
+org.apache.sirona.cassandra.CassandraBuilder.markerGaugesColumFamily = markers_gauges
+org.apache.sirona.cassandra.CassandraBuilder.replicationFactor = 1
+]]></pre>

Modified: incubator/sirona/trunk/src/site/markdown/collector.md
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/src/site/markdown/collector.md?rev=1540085&r1=1540084&r2=1540085&view=diff
==============================================================================
--- incubator/sirona/trunk/src/site/markdown/collector.md (original)
+++ incubator/sirona/trunk/src/site/markdown/collector.md Fri Nov  8 15:43:38 2013
@@ -37,7 +37,7 @@ Just use the collector `DataStoreFactory
 For instance your `commons-monitoring.properties` can look like:
 
 <pre class="prettyprint linenums"><![CDATA[
-org.apache.sirona.store.DataStore = org.apache.sirona.collector.server.store.CollectorDataStoreFactory
+org.apache.sirona.store.DataStoreFactory = org.apache.sirona.collector.server.store.CollectorDataStoreFactory
 ]]></pre>
 
 The `GaugeDataStore` can be configured through `org.apache.sirona.collector.gauge.store-class` property.

Modified: incubator/sirona/trunk/src/site/markdown/configuration.md
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/src/site/markdown/configuration.md?rev=1540085&r1=1540084&r2=1540085&view=diff
==============================================================================
--- incubator/sirona/trunk/src/site/markdown/configuration.md (original)
+++ incubator/sirona/trunk/src/site/markdown/configuration.md Fri Nov  8 15:43:38 2013
@@ -94,4 +94,16 @@ or to call manually `Configuration.shutd
 * `org.apache.sirona.collector.collection.period`: the timer period (in ms) when used in pull mode
 * `org.apache.sirona.collector.collection.agent-urls`: comma separated value of agent urls when auto registering is not used by agents
 * `org.apache.sirona.collector.server.api.SecurityProvider`: the basic information provider requests on agents
-* `org.apache.sirona.collector.server.api.SSLSocketFactoryProvider`: the ssl socket factory provider when contacting agents over ssl
\ No newline at end of file
+* `org.apache.sirona.collector.server.api.SSLSocketFactoryProvider`: the ssl socket factory provider when contacting agents over ssl
+
+# cassandra
+
+* `org.apache.sirona.cassandra.CassandraBuilder.hosts`: comma separated list of hosts (IP:port)
+* `org.apache.sirona.cassandra.CassandraBuilder.cluster`: sirona cluster name
+* `org.apache.sirona.cassandra.CassandraBuilder.keyspace`: sirona keyspace name
+* `org.apache.sirona.cassandra.CassandraBuilder.counterColumnFamily`: sirona counter column family name
+* `org.apache.sirona.cassandra.CassandraBuilder.gaugeValuesColumnFamily`: sirona gauge column family name to store data
+* `org.apache.sirona.cassandra.CassandraBuilder.statusColumnFamily`: sirona statuses column family name
+* `org.apache.sirona.cassandra.CassandraBuilder.markerCountersColumFamily`: sirona counter by marker (= instance) column family name
+* `org.apache.sirona.cassandra.CassandraBuilder.markerGaugesColumFamily`: sirona gauge by marker (= instance) column family name
+* `org.apache.sirona.cassandra.CassandraBuilder.replicationFactor`: replication factory for cassandra client instance