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/04 17:12:50 UTC
svn commit: r1538662 [1/2] - in /incubator/sirona/trunk:
collector/src/main/java/org/apache/sirona/collector/server/
collector/src/main/java/org/apache/sirona/collector/server/store/
collector/src/main/java/org/apache/sirona/collector/server/store/coun...
Author: rmannibucau
Date: Mon Nov 4 16:12:48 2013
New Revision: 1538662
URL: http://svn.apache.org/r1538662
Log:
adding node status reporter
Added:
incubator/sirona/trunk/collector/src/main/java/org/apache/sirona/collector/server/store/status/
incubator/sirona/trunk/collector/src/main/java/org/apache/sirona/collector/server/store/status/CollectorNodeStatusDataStore.java
incubator/sirona/trunk/core/src/main/java/org/apache/sirona/status/
incubator/sirona/trunk/core/src/main/java/org/apache/sirona/status/NodeStatus.java
incubator/sirona/trunk/core/src/main/java/org/apache/sirona/status/NodeStatusReporter.java
incubator/sirona/trunk/core/src/main/java/org/apache/sirona/status/Status.java
incubator/sirona/trunk/core/src/main/java/org/apache/sirona/status/Validation.java
incubator/sirona/trunk/core/src/main/java/org/apache/sirona/status/ValidationFactory.java
incubator/sirona/trunk/core/src/main/java/org/apache/sirona/status/ValidationResult.java
incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/counter/
incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/counter/BatchCounterDataStore.java
- copied, changed from r1538543, incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/BatchCounterDataStore.java
incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/counter/CollectorCounterStore.java
- copied, changed from r1538552, incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/CollectorCounterStore.java
incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/counter/CounterDataStore.java
- copied, changed from r1538515, incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/CounterDataStore.java
incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/counter/InMemoryCounterDataStore.java
- copied, changed from r1538515, incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/InMemoryCounterDataStore.java
incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/gauge/
incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/gauge/AggregatedGaugeDataStore.java
- copied, changed from r1538552, incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/AggregatedGaugeDataStore.java
incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/gauge/CollectorGaugeDataStore.java
- copied, changed from r1538609, incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/CollectorGaugeDataStore.java
incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/gauge/CommonGaugeDataStore.java
- copied, changed from r1538609, incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/CommonGaugeDataStore.java
incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/gauge/GaugeDataStore.java
- copied, changed from r1538609, incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/GaugeDataStore.java
incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/gauge/GaugeValuesRequest.java
- copied, changed from r1538515, incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/GaugeValuesRequest.java
incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/gauge/InMemoryGaugeDataStore.java
- copied, changed from r1538609, incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/InMemoryGaugeDataStore.java
incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/gauge/Value.java
- copied, changed from r1538515, incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/Value.java
incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/status/
incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/status/EmptyStatuses.java
incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/status/NodeStatusDataStore.java
incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/status/PeriodicNodeStatusDataStore.java
incubator/sirona/trunk/core/src/test/java/org/apache/sirona/spi/
incubator/sirona/trunk/core/src/test/java/org/apache/sirona/spi/SpiTestImpl.java
incubator/sirona/trunk/core/src/test/java/org/apache/sirona/status/
incubator/sirona/trunk/core/src/test/java/org/apache/sirona/status/ValidationTest.java
incubator/sirona/trunk/core/src/test/resources/
incubator/sirona/trunk/core/src/test/resources/sirona.properties
incubator/sirona/trunk/cube/src/main/java/org/apache/sirona/cube/CubeNodeStatusDataStore.java
incubator/sirona/trunk/reporting/src/main/java/org/apache/sirona/reporting/web/plugin/status/
incubator/sirona/trunk/reporting/src/main/java/org/apache/sirona/reporting/web/plugin/status/StatusEndpoints.java
incubator/sirona/trunk/reporting/src/main/java/org/apache/sirona/reporting/web/plugin/status/StatusPlugin.java
incubator/sirona/trunk/reporting/src/main/resources/templates/status/
incubator/sirona/trunk/reporting/src/main/resources/templates/status/detail.vm
incubator/sirona/trunk/reporting/src/main/resources/templates/status/home.vm
- copied, changed from r1538543, incubator/sirona/trunk/reporting/src/main/resources/templates/gauge/home.vm
incubator/sirona/trunk/reporting/src/test/java/org/apache/sirona/reporting/template/StatusTest.java
- copied, changed from r1538515, incubator/sirona/trunk/reporting/src/test/java/org/apache/sirona/reporting/template/ThreadsTest.java
incubator/sirona/trunk/reporting/src/test/resources/sirona.properties
Removed:
incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/AggregatedGaugeDataStore.java
incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/BatchCounterDataStore.java
incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/CollectorCounterStore.java
incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/CollectorGaugeDataStore.java
incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/CommonGaugeDataStore.java
incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/CounterDataStore.java
incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/GaugeDataStore.java
incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/GaugeValuesRequest.java
incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/InMemoryCounterDataStore.java
incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/InMemoryGaugeDataStore.java
incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/Value.java
Modified:
incubator/sirona/trunk/collector/src/main/java/org/apache/sirona/collector/server/Collector.java
incubator/sirona/trunk/collector/src/main/java/org/apache/sirona/collector/server/store/CollectorDataStoreFactory.java
incubator/sirona/trunk/collector/src/main/java/org/apache/sirona/collector/server/store/counter/InMemoryCollectorCounterStore.java
incubator/sirona/trunk/collector/src/main/java/org/apache/sirona/collector/server/store/gauge/DelegatedCollectorGaugeDataStore.java
incubator/sirona/trunk/collector/src/test/java/org/apache/sirona/collector/server/CubeDataStoreCompatibilityTest.java
incubator/sirona/trunk/collector/src/test/java/org/apache/sirona/collector/server/HttpCollectorTest.java
incubator/sirona/trunk/collector/src/test/java/org/apache/sirona/collector/server/store/counter/AggregatorTest.java
incubator/sirona/trunk/collector/src/test/java/org/apache/sirona/collector/server/store/gauge/CollectorGaugeTest.java
incubator/sirona/trunk/core/src/main/java/org/apache/sirona/counters/DefaultCounter.java
incubator/sirona/trunk/core/src/main/java/org/apache/sirona/gauges/DefaultGaugeManager.java
incubator/sirona/trunk/core/src/main/java/org/apache/sirona/gauges/RemoteGaugeDataStore.java
incubator/sirona/trunk/core/src/main/java/org/apache/sirona/repositories/DefaultRepository.java
incubator/sirona/trunk/core/src/main/java/org/apache/sirona/repositories/Repository.java
incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/BatchFuture.java
incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/DataStoreFactory.java
incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/DefaultDataStoreFactory.java
incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/DelegateDataStoreFactory.java
incubator/sirona/trunk/core/src/main/java/org/apache/sirona/util/Environment.java
incubator/sirona/trunk/core/src/test/java/org/apache/sirona/counters/CounterBench.java
incubator/sirona/trunk/cube/src/main/java/org/apache/sirona/cube/CubeBuilder.java
incubator/sirona/trunk/cube/src/main/java/org/apache/sirona/cube/CubeCounterDataStore.java
incubator/sirona/trunk/cube/src/main/java/org/apache/sirona/cube/CubeDataStoreFactory.java
incubator/sirona/trunk/graphite/src/main/java/org/apache/sirona/graphite/GraphiteBuilder.java
incubator/sirona/trunk/graphite/src/main/java/org/apache/sirona/graphite/GraphiteCounterDataStore.java
incubator/sirona/trunk/graphite/src/main/java/org/apache/sirona/graphite/GraphiteDataStoreFactory.java
incubator/sirona/trunk/graphite/src/main/java/org/apache/sirona/graphite/GraphiteGaugeDataStore.java
incubator/sirona/trunk/reporting/src/main/java/org/apache/sirona/reporting/web/graph/Line.java
incubator/sirona/trunk/reporting/src/main/resources/META-INF/services/org.apache.sirona.reporting.web.plugin.Plugin
incubator/sirona/trunk/src/site/markdown/collector.md
Modified: incubator/sirona/trunk/collector/src/main/java/org/apache/sirona/collector/server/Collector.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/collector/src/main/java/org/apache/sirona/collector/server/Collector.java?rev=1538662&r1=1538661&r2=1538662&view=diff
==============================================================================
--- incubator/sirona/trunk/collector/src/main/java/org/apache/sirona/collector/server/Collector.java (original)
+++ incubator/sirona/trunk/collector/src/main/java/org/apache/sirona/collector/server/Collector.java Mon Nov 4 16:12:48 2013
@@ -20,13 +20,18 @@ import com.fasterxml.jackson.core.JsonPa
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.sirona.Role;
+import org.apache.sirona.collector.server.store.status.CollectorNodeStatusDataStore;
import org.apache.sirona.configuration.Configuration;
import org.apache.sirona.counters.Counter;
import org.apache.sirona.counters.Unit;
import org.apache.sirona.math.M2AwareStatisticalSummary;
import org.apache.sirona.repositories.Repository;
-import org.apache.sirona.store.CollectorCounterStore;
-import org.apache.sirona.store.CollectorGaugeDataStore;
+import org.apache.sirona.status.NodeStatus;
+import org.apache.sirona.status.Status;
+import org.apache.sirona.status.ValidationResult;
+import org.apache.sirona.store.counter.CollectorCounterStore;
+import org.apache.sirona.store.gauge.CollectorGaugeDataStore;
+import org.apache.sirona.store.status.NodeStatusDataStore;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
@@ -34,6 +39,8 @@ import javax.servlet.http.HttpServletReq
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.net.HttpURLConnection;
+import java.util.ArrayList;
+import java.util.Collection;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.logging.Logger;
@@ -46,11 +53,13 @@ public class Collector extends HttpServl
private static final String OK = "{}";
private static final String GAUGE = "gauge";
private static final String COUNTER = "counter";
+ private static final String VALIDATION = "validation";
private final Map<String, Role> roles = new ConcurrentHashMap<String, Role>();
private CollectorCounterStore counterDataStore = null;
private CollectorGaugeDataStore gaugeDataStore = null;
+ private CollectorNodeStatusDataStore statusDataStore;
private ObjectMapper mapper;
@Override
@@ -58,17 +67,29 @@ public class Collector extends HttpServl
// force init to ensure we have stores
Configuration.findOrCreateInstance(Repository.class);
- final CollectorGaugeDataStore gds = Configuration.findOrCreateInstance(CollectorGaugeDataStore.class);
- if (gds == null) {
- throw new IllegalStateException("Collector only works with " + CollectorGaugeDataStore.class.getName());
+ {
+ final CollectorGaugeDataStore gds = Configuration.findOrCreateInstance(CollectorGaugeDataStore.class);
+ if (gds == null) {
+ throw new IllegalStateException("Collector only works with " + CollectorGaugeDataStore.class.getName());
+ }
+ this.gaugeDataStore = CollectorGaugeDataStore.class.cast(gds);
}
- this.gaugeDataStore = CollectorGaugeDataStore.class.cast(gds);
- final CollectorCounterStore cds = Configuration.findOrCreateInstance(CollectorCounterStore.class);
- if (cds == null) {
- throw new IllegalStateException("Collector only works with " + CollectorCounterStore.class.getName());
+ {
+ final CollectorCounterStore cds = Configuration.findOrCreateInstance(CollectorCounterStore.class);
+ if (cds == null) {
+ throw new IllegalStateException("Collector only works with " + CollectorCounterStore.class.getName());
+ }
+ this.counterDataStore = CollectorCounterStore.class.cast(cds);
+ }
+
+ {
+ final NodeStatusDataStore nds = Configuration.findOrCreateInstance(NodeStatusDataStore.class);
+ if (!CollectorNodeStatusDataStore.class.isInstance(nds)) {
+ throw new IllegalStateException("Collector only works with " + CollectorNodeStatusDataStore.class.getName());
+ }
+ this.statusDataStore = CollectorNodeStatusDataStore.class.cast(nds);
}
- this.counterDataStore = CollectorCounterStore.class.cast(cds);
this.mapper = new ObjectMapper().configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false).configure(JsonParser.Feature.ALLOW_NON_NUMERIC_NUMBERS, true);
}
@@ -78,15 +99,28 @@ public class Collector extends HttpServl
final Event[] events = mapper.readValue(req.getInputStream(), Event[].class);
if (events != null && events.length > 0) {
try {
- for (final Event event : events) {
- final String type = event.getType();
-
- if (COUNTER.equals(type)) {
- updateCounter(event);
- } else if (GAUGE.equals(type)) {
- updateGauge(event);
- } else {
- LOGGER.info("Unexpected type '" + type + "', skipping");
+ if (VALIDATION.equals(events[0].getType())) {
+ final Collection<ValidationResult> results = new ArrayList<ValidationResult>(events.length);
+ for (final Event event : events) {
+ final Map<String, Object> data = event.getData();
+ results.add(new ValidationResult(
+ (String) data.get("name"),
+ Status.valueOf((String) data.get("status")),
+ (String) data.get("message")));
+ }
+ final NodeStatus status = new NodeStatus(results.toArray(new ValidationResult[results.size()]));
+ statusDataStore.store((String) events[0].getData().get("marker"), status);
+ } else {
+ for (final Event event : events) {
+ final String type = event.getType();
+
+ if (COUNTER.equals(type)) {
+ updateCounter(event);
+ } else if (GAUGE.equals(type)) {
+ updateGauge(event);
+ } else {
+ LOGGER.info("Unexpected type '" + type + "', skipping");
+ }
}
}
} catch (final Exception e) {
Modified: incubator/sirona/trunk/collector/src/main/java/org/apache/sirona/collector/server/store/CollectorDataStoreFactory.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/collector/src/main/java/org/apache/sirona/collector/server/store/CollectorDataStoreFactory.java?rev=1538662&r1=1538661&r2=1538662&view=diff
==============================================================================
--- incubator/sirona/trunk/collector/src/main/java/org/apache/sirona/collector/server/store/CollectorDataStoreFactory.java (original)
+++ incubator/sirona/trunk/collector/src/main/java/org/apache/sirona/collector/server/store/CollectorDataStoreFactory.java Mon Nov 4 16:12:48 2013
@@ -18,10 +18,11 @@ package org.apache.sirona.collector.serv
import org.apache.sirona.collector.server.store.counter.InMemoryCollectorCounterStore;
import org.apache.sirona.collector.server.store.gauge.DelegatedCollectorGaugeDataStore;
+import org.apache.sirona.collector.server.store.status.CollectorNodeStatusDataStore;
import org.apache.sirona.store.DelegateDataStoreFactory;
public class CollectorDataStoreFactory extends DelegateDataStoreFactory {
public CollectorDataStoreFactory() {
- super(new InMemoryCollectorCounterStore(), new DelegatedCollectorGaugeDataStore());
+ super(new InMemoryCollectorCounterStore(), new DelegatedCollectorGaugeDataStore(), new CollectorNodeStatusDataStore());
}
}
Modified: incubator/sirona/trunk/collector/src/main/java/org/apache/sirona/collector/server/store/counter/InMemoryCollectorCounterStore.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/collector/src/main/java/org/apache/sirona/collector/server/store/counter/InMemoryCollectorCounterStore.java?rev=1538662&r1=1538661&r2=1538662&view=diff
==============================================================================
--- incubator/sirona/trunk/collector/src/main/java/org/apache/sirona/collector/server/store/counter/InMemoryCollectorCounterStore.java (original)
+++ incubator/sirona/trunk/collector/src/main/java/org/apache/sirona/collector/server/store/counter/InMemoryCollectorCounterStore.java Mon Nov 4 16:12:48 2013
@@ -16,10 +16,10 @@
*/
package org.apache.sirona.collector.server.store.counter;
-import org.apache.sirona.store.CollectorCounterStore;
+import org.apache.sirona.store.counter.CollectorCounterStore;
import org.apache.sirona.math.M2AwareStatisticalSummary;
import org.apache.sirona.counters.Counter;
-import org.apache.sirona.store.InMemoryCounterDataStore;
+import org.apache.sirona.store.counter.InMemoryCounterDataStore;
import java.util.Collection;
import java.util.Map;
Modified: incubator/sirona/trunk/collector/src/main/java/org/apache/sirona/collector/server/store/gauge/DelegatedCollectorGaugeDataStore.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/collector/src/main/java/org/apache/sirona/collector/server/store/gauge/DelegatedCollectorGaugeDataStore.java?rev=1538662&r1=1538661&r2=1538662&view=diff
==============================================================================
--- incubator/sirona/trunk/collector/src/main/java/org/apache/sirona/collector/server/store/gauge/DelegatedCollectorGaugeDataStore.java (original)
+++ incubator/sirona/trunk/collector/src/main/java/org/apache/sirona/collector/server/store/gauge/DelegatedCollectorGaugeDataStore.java Mon Nov 4 16:12:48 2013
@@ -19,10 +19,10 @@ package org.apache.sirona.collector.serv
import org.apache.sirona.MonitoringException;
import org.apache.sirona.Role;
import org.apache.sirona.configuration.Configuration;
-import org.apache.sirona.store.CollectorGaugeDataStore;
-import org.apache.sirona.store.GaugeDataStore;
-import org.apache.sirona.store.GaugeValuesRequest;
-import org.apache.sirona.store.InMemoryGaugeDataStore;
+import org.apache.sirona.store.gauge.CollectorGaugeDataStore;
+import org.apache.sirona.store.gauge.GaugeDataStore;
+import org.apache.sirona.store.gauge.GaugeValuesRequest;
+import org.apache.sirona.store.gauge.InMemoryGaugeDataStore;
import java.lang.reflect.Constructor;
import java.util.Collection;
Added: incubator/sirona/trunk/collector/src/main/java/org/apache/sirona/collector/server/store/status/CollectorNodeStatusDataStore.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/collector/src/main/java/org/apache/sirona/collector/server/store/status/CollectorNodeStatusDataStore.java?rev=1538662&view=auto
==============================================================================
--- incubator/sirona/trunk/collector/src/main/java/org/apache/sirona/collector/server/store/status/CollectorNodeStatusDataStore.java (added)
+++ incubator/sirona/trunk/collector/src/main/java/org/apache/sirona/collector/server/store/status/CollectorNodeStatusDataStore.java Mon Nov 4 16:12:48 2013
@@ -0,0 +1,37 @@
+/*
+ * 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.collector.server.store.status;
+
+import org.apache.sirona.status.NodeStatus;
+import org.apache.sirona.store.status.NodeStatusDataStore;
+
+import java.util.Map;
+import java.util.TreeMap;
+import java.util.concurrent.ConcurrentHashMap;
+
+public class CollectorNodeStatusDataStore implements NodeStatusDataStore {
+ private final Map<String, NodeStatus> statuses = new ConcurrentHashMap<String, NodeStatus>();
+
+ @Override
+ public Map<String, NodeStatus> statuses() {
+ return new TreeMap<String, NodeStatus>(statuses);
+ }
+
+ public void store(final String node, final NodeStatus status) {
+ statuses.put(node, status);
+ }
+}
Modified: incubator/sirona/trunk/collector/src/test/java/org/apache/sirona/collector/server/CubeDataStoreCompatibilityTest.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/collector/src/test/java/org/apache/sirona/collector/server/CubeDataStoreCompatibilityTest.java?rev=1538662&r1=1538661&r2=1538662&view=diff
==============================================================================
--- incubator/sirona/trunk/collector/src/test/java/org/apache/sirona/collector/server/CubeDataStoreCompatibilityTest.java (original)
+++ incubator/sirona/trunk/collector/src/test/java/org/apache/sirona/collector/server/CubeDataStoreCompatibilityTest.java Mon Nov 4 16:12:48 2013
@@ -23,7 +23,7 @@ import org.apache.sirona.counters.Defaul
import org.apache.sirona.counters.Unit;
import org.apache.sirona.cube.CubeCounterDataStore;
import org.apache.sirona.repositories.Repository;
-import org.apache.sirona.store.CollectorCounterStore;
+import org.apache.sirona.store.counter.CollectorCounterStore;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
Modified: incubator/sirona/trunk/collector/src/test/java/org/apache/sirona/collector/server/HttpCollectorTest.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/collector/src/test/java/org/apache/sirona/collector/server/HttpCollectorTest.java?rev=1538662&r1=1538661&r2=1538662&view=diff
==============================================================================
--- incubator/sirona/trunk/collector/src/test/java/org/apache/sirona/collector/server/HttpCollectorTest.java (original)
+++ incubator/sirona/trunk/collector/src/test/java/org/apache/sirona/collector/server/HttpCollectorTest.java Mon Nov 4 16:12:48 2013
@@ -18,14 +18,18 @@ package org.apache.sirona.collector.serv
import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.sirona.Role;
+import org.apache.sirona.collector.server.store.status.CollectorNodeStatusDataStore;
import org.apache.sirona.configuration.Configuration;
import org.apache.sirona.counters.Counter;
import org.apache.sirona.counters.Unit;
import org.apache.sirona.reporting.web.template.MapBuilder;
import org.apache.sirona.repositories.Repository;
-import org.apache.sirona.store.CollectorCounterStore;
-import org.apache.sirona.store.CollectorGaugeDataStore;
-import org.apache.sirona.store.GaugeValuesRequest;
+import org.apache.sirona.status.NodeStatus;
+import org.apache.sirona.status.Status;
+import org.apache.sirona.store.counter.CollectorCounterStore;
+import org.apache.sirona.store.gauge.CollectorGaugeDataStore;
+import org.apache.sirona.store.gauge.GaugeValuesRequest;
+import org.apache.sirona.store.status.NodeStatusDataStore;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
@@ -157,6 +161,50 @@ public class HttpCollectorTest {
assertTrue(node2.containsValue(15.));
}
+ @Test
+ public void collectStatus() throws Exception {
+ final Date pushDate = new Date(); // we aggregated only if push was done on the exactly same date so ensuring it
+ {
+ final Event[] events1 = new Event[1];
+ {
+ events1[0] = new Event();
+ events1[0].setTime(pushDate);
+ events1[0].setType("validation");
+ events1[0].setData(new MapBuilder<String, Object>()
+ .set("message", "good")
+ .set("status", Status.OK)
+ .set("name", "validation1")
+ .set("marker", "node1")
+ .build());
+ }
+ doPost(events1);
+ }
+
+ {
+ final Event[] events2 = new Event[1];
+ {
+ events2[0] = new Event();
+ events2[0].setTime(pushDate);
+ events2[0].setType("validation");
+ events2[0].setData(new MapBuilder<String, Object>()
+ .set("message", "bad")
+ .set("status", Status.KO)
+ .set("name", "validation3")
+ .set("marker", "node2")
+ .build());
+ }
+ doPost(events2);
+ }
+
+ final NodeStatusDataStore store = Configuration.getInstance(NodeStatusDataStore.class);
+ final Map<String,NodeStatus> statuses = store.statuses();
+ assertEquals(2, statuses.size());
+ assertEquals(Status.OK, statuses.get("node1").getStatus());
+ assertEquals(1, statuses.get("node1").getResults().length);
+ assertEquals(Status.KO, statuses.get("node2").getStatus());
+ assertEquals(1, statuses.get("node2").getResults().length);
+ }
+
private void doPost(final Event[] events) throws Exception {
final URL url = new URL("http://localhost:" + server.getPort());
Modified: incubator/sirona/trunk/collector/src/test/java/org/apache/sirona/collector/server/store/counter/AggregatorTest.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/collector/src/test/java/org/apache/sirona/collector/server/store/counter/AggregatorTest.java?rev=1538662&r1=1538661&r2=1538662&view=diff
==============================================================================
--- incubator/sirona/trunk/collector/src/test/java/org/apache/sirona/collector/server/store/counter/AggregatorTest.java (original)
+++ incubator/sirona/trunk/collector/src/test/java/org/apache/sirona/collector/server/store/counter/AggregatorTest.java Mon Nov 4 16:12:48 2013
@@ -17,7 +17,7 @@
package org.apache.sirona.collector.server.store.counter;
import org.apache.sirona.Role;
-import org.apache.sirona.store.CollectorCounterStore;
+import org.apache.sirona.store.counter.CollectorCounterStore;
import org.apache.sirona.math.M2AwareStatisticalSummary;
import org.apache.sirona.counters.Counter;
import org.apache.sirona.counters.Unit;
Modified: incubator/sirona/trunk/collector/src/test/java/org/apache/sirona/collector/server/store/gauge/CollectorGaugeTest.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/collector/src/test/java/org/apache/sirona/collector/server/store/gauge/CollectorGaugeTest.java?rev=1538662&r1=1538661&r2=1538662&view=diff
==============================================================================
--- incubator/sirona/trunk/collector/src/test/java/org/apache/sirona/collector/server/store/gauge/CollectorGaugeTest.java (original)
+++ incubator/sirona/trunk/collector/src/test/java/org/apache/sirona/collector/server/store/gauge/CollectorGaugeTest.java Mon Nov 4 16:12:48 2013
@@ -18,9 +18,9 @@ package org.apache.sirona.collector.serv
import org.apache.sirona.Role;
import org.apache.sirona.counters.Unit;
-import org.apache.sirona.store.CollectorGaugeDataStore;
+import org.apache.sirona.store.gauge.CollectorGaugeDataStore;
import org.apache.sirona.repositories.Repository;
-import org.apache.sirona.store.GaugeValuesRequest;
+import org.apache.sirona.store.gauge.GaugeValuesRequest;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
Modified: incubator/sirona/trunk/core/src/main/java/org/apache/sirona/counters/DefaultCounter.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/core/src/main/java/org/apache/sirona/counters/DefaultCounter.java?rev=1538662&r1=1538661&r2=1538662&view=diff
==============================================================================
--- incubator/sirona/trunk/core/src/main/java/org/apache/sirona/counters/DefaultCounter.java (original)
+++ incubator/sirona/trunk/core/src/main/java/org/apache/sirona/counters/DefaultCounter.java Mon Nov 4 16:12:48 2013
@@ -17,7 +17,7 @@
package org.apache.sirona.counters;
import org.apache.commons.math3.stat.descriptive.SummaryStatistics;
-import org.apache.sirona.store.CounterDataStore;
+import org.apache.sirona.store.counter.CounterDataStore;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.locks.Lock;
Modified: incubator/sirona/trunk/core/src/main/java/org/apache/sirona/gauges/DefaultGaugeManager.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/core/src/main/java/org/apache/sirona/gauges/DefaultGaugeManager.java?rev=1538662&r1=1538661&r2=1538662&view=diff
==============================================================================
--- incubator/sirona/trunk/core/src/main/java/org/apache/sirona/gauges/DefaultGaugeManager.java (original)
+++ incubator/sirona/trunk/core/src/main/java/org/apache/sirona/gauges/DefaultGaugeManager.java Mon Nov 4 16:12:48 2013
@@ -20,7 +20,7 @@ import org.apache.sirona.Role;
import org.apache.sirona.configuration.Configuration;
import org.apache.sirona.gauges.jvm.CPUGauge;
import org.apache.sirona.gauges.jvm.UsedMemoryGauge;
-import org.apache.sirona.store.GaugeDataStore;
+import org.apache.sirona.store.gauge.GaugeDataStore;
import java.util.Map;
import java.util.Timer;
Modified: incubator/sirona/trunk/core/src/main/java/org/apache/sirona/gauges/RemoteGaugeDataStore.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/core/src/main/java/org/apache/sirona/gauges/RemoteGaugeDataStore.java?rev=1538662&r1=1538661&r2=1538662&view=diff
==============================================================================
--- incubator/sirona/trunk/core/src/main/java/org/apache/sirona/gauges/RemoteGaugeDataStore.java (original)
+++ incubator/sirona/trunk/core/src/main/java/org/apache/sirona/gauges/RemoteGaugeDataStore.java Mon Nov 4 16:12:48 2013
@@ -17,8 +17,8 @@
package org.apache.sirona.gauges;
import org.apache.sirona.Role;
-import org.apache.sirona.store.GaugeDataStore;
-import org.apache.sirona.store.GaugeValuesRequest;
+import org.apache.sirona.store.gauge.GaugeDataStore;
+import org.apache.sirona.store.gauge.GaugeValuesRequest;
import java.util.Collection;
import java.util.Collections;
Modified: incubator/sirona/trunk/core/src/main/java/org/apache/sirona/repositories/DefaultRepository.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/core/src/main/java/org/apache/sirona/repositories/DefaultRepository.java?rev=1538662&r1=1538661&r2=1538662&view=diff
==============================================================================
--- incubator/sirona/trunk/core/src/main/java/org/apache/sirona/repositories/DefaultRepository.java (original)
+++ incubator/sirona/trunk/core/src/main/java/org/apache/sirona/repositories/DefaultRepository.java Mon Nov 4 16:12:48 2013
@@ -19,24 +19,27 @@ package org.apache.sirona.repositories;
import org.apache.sirona.MonitoringException;
import org.apache.sirona.Role;
import org.apache.sirona.configuration.Configuration;
-import org.apache.sirona.store.CollectorCounterStore;
import org.apache.sirona.counters.Counter;
-import org.apache.sirona.store.CollectorGaugeDataStore;
import org.apache.sirona.gauges.DefaultGaugeManager;
import org.apache.sirona.gauges.Gauge;
+import org.apache.sirona.status.NodeStatus;
import org.apache.sirona.stopwatches.CounterStopWatch;
import org.apache.sirona.stopwatches.StopWatch;
-import org.apache.sirona.store.CommonGaugeDataStore;
-import org.apache.sirona.store.CounterDataStore;
+import org.apache.sirona.store.counter.CollectorCounterStore;
+import org.apache.sirona.store.gauge.CollectorGaugeDataStore;
+import org.apache.sirona.store.gauge.CommonGaugeDataStore;
+import org.apache.sirona.store.counter.CounterDataStore;
import org.apache.sirona.store.DataStoreFactory;
-import org.apache.sirona.store.GaugeDataStore;
-import org.apache.sirona.store.GaugeValuesRequest;
+import org.apache.sirona.store.gauge.GaugeDataStore;
+import org.apache.sirona.store.gauge.GaugeValuesRequest;
+import org.apache.sirona.store.status.NodeStatusDataStore;
import java.util.Collection;
import java.util.Map;
public class DefaultRepository implements Repository {
private final CounterDataStore counterDataStore;
+ private final NodeStatusDataStore nodeStatusDataStore;
private final CommonGaugeDataStore gaugeDataStore;
private final DefaultGaugeManager gaugeManager;
@@ -69,6 +72,13 @@ public class DefaultRepository implement
}
}
+ NodeStatusDataStore status = null;
+ try {
+ status = Configuration.findOrCreateInstance(NodeStatusDataStore.class);
+ } catch (final MonitoringException e) {
+ // no-op
+ }
+
if (counter == null) {
counter = Configuration.findOrCreateInstance(DataStoreFactory.class).getCounterDataStore();
if (CollectorCounterStore.class.isInstance(counter)) {
@@ -87,8 +97,14 @@ public class DefaultRepository implement
}
}
+ if (status == null) {
+ status = Configuration.findOrCreateInstance(DataStoreFactory.class).getNodeStatusDataStore();
+ Configuration.setSingletonInstance(NodeStatusDataStore.class, status);
+ }
+
this.counterDataStore = counter;
this.gaugeDataStore = gauge;
+ this.nodeStatusDataStore = status;
if (GaugeDataStore.class.isInstance(this.gaugeDataStore)) {
this.gaugeManager = new DefaultGaugeManager(GaugeDataStore.class.cast(this.gaugeDataStore));
@@ -152,4 +168,9 @@ public class DefaultRepository implement
gaugeManager.stopGauge(role);
}
}
+
+ @Override
+ public Map<String, NodeStatus> statuses() {
+ return nodeStatusDataStore.statuses();
+ }
}
Modified: incubator/sirona/trunk/core/src/main/java/org/apache/sirona/repositories/Repository.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/core/src/main/java/org/apache/sirona/repositories/Repository.java?rev=1538662&r1=1538661&r2=1538662&view=diff
==============================================================================
--- incubator/sirona/trunk/core/src/main/java/org/apache/sirona/repositories/Repository.java (original)
+++ incubator/sirona/trunk/core/src/main/java/org/apache/sirona/repositories/Repository.java Mon Nov 4 16:12:48 2013
@@ -21,6 +21,7 @@ import org.apache.sirona.Role;
import org.apache.sirona.configuration.Configuration;
import org.apache.sirona.counters.Counter;
import org.apache.sirona.gauges.Gauge;
+import org.apache.sirona.status.NodeStatus;
import org.apache.sirona.stopwatches.StopWatch;
import java.util.Collection;
@@ -46,4 +47,6 @@ public interface Repository {
Collection<Role> gauges();
Role findGaugeRole(String name);
+
+ Map<String, NodeStatus> statuses();
}
Added: incubator/sirona/trunk/core/src/main/java/org/apache/sirona/status/NodeStatus.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/core/src/main/java/org/apache/sirona/status/NodeStatus.java?rev=1538662&view=auto
==============================================================================
--- incubator/sirona/trunk/core/src/main/java/org/apache/sirona/status/NodeStatus.java (added)
+++ incubator/sirona/trunk/core/src/main/java/org/apache/sirona/status/NodeStatus.java Mon Nov 4 16:12:48 2013
@@ -0,0 +1,41 @@
+/*
+ * 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.status;
+
+public class NodeStatus {
+ private final ValidationResult[] results;
+
+ public NodeStatus(final ValidationResult[] results) {
+ this.results = results;
+ }
+
+ public ValidationResult[] getResults() {
+ return results;
+ }
+
+ public Status getStatus() {
+ Status lowest = Status.OK;
+ for (final ValidationResult result : results) {
+ if (Status.KO.equals(result.getStatus())) {
+ return Status.KO;
+ } else if (Status.DEGRADED.equals(result.getStatus())) {
+ lowest = Status.DEGRADED;
+ }
+ }
+ return lowest;
+ }
+}
Added: incubator/sirona/trunk/core/src/main/java/org/apache/sirona/status/NodeStatusReporter.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/core/src/main/java/org/apache/sirona/status/NodeStatusReporter.java?rev=1538662&view=auto
==============================================================================
--- incubator/sirona/trunk/core/src/main/java/org/apache/sirona/status/NodeStatusReporter.java (added)
+++ incubator/sirona/trunk/core/src/main/java/org/apache/sirona/status/NodeStatusReporter.java Mon Nov 4 16:12:48 2013
@@ -0,0 +1,54 @@
+/*
+ * 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.status;
+
+import org.apache.sirona.spi.SPI;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.LinkedList;
+
+public class NodeStatusReporter {
+ private final Validation[] validations;
+
+ public NodeStatusReporter() {
+ final ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
+
+ final Collection<Validation> val = new LinkedList<Validation>();
+ for (final Validation v : SPI.INSTANCE.find(Validation.class, classLoader)) {
+ val.add(v);
+ }
+ for (final ValidationFactory f : SPI.INSTANCE.find(ValidationFactory.class, classLoader)) {
+ val.addAll(Arrays.asList(f.validations()));
+ }
+
+ validations = val.toArray(new Validation[val.size()]);
+ }
+
+ public NodeStatus computeStatus() {
+ final Collection<ValidationResult> results = new ArrayList<ValidationResult>(validations.length);
+ for (final Validation v : validations) {
+ results.add(v.validate());
+ }
+ return new NodeStatus(results.toArray(new ValidationResult[results.size()]));
+ }
+
+ public boolean hasValidations() {
+ return validations.length > 0;
+ }
+}
Added: incubator/sirona/trunk/core/src/main/java/org/apache/sirona/status/Status.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/core/src/main/java/org/apache/sirona/status/Status.java?rev=1538662&view=auto
==============================================================================
--- incubator/sirona/trunk/core/src/main/java/org/apache/sirona/status/Status.java (added)
+++ incubator/sirona/trunk/core/src/main/java/org/apache/sirona/status/Status.java Mon Nov 4 16:12:48 2013
@@ -0,0 +1,21 @@
+/*
+ * 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.status;
+
+public enum Status {
+ OK, DEGRADED, KO
+}
Added: incubator/sirona/trunk/core/src/main/java/org/apache/sirona/status/Validation.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/core/src/main/java/org/apache/sirona/status/Validation.java?rev=1538662&view=auto
==============================================================================
--- incubator/sirona/trunk/core/src/main/java/org/apache/sirona/status/Validation.java (added)
+++ incubator/sirona/trunk/core/src/main/java/org/apache/sirona/status/Validation.java Mon Nov 4 16:12:48 2013
@@ -0,0 +1,21 @@
+/*
+ * 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.status;
+
+public interface Validation {
+ ValidationResult validate();
+}
Added: incubator/sirona/trunk/core/src/main/java/org/apache/sirona/status/ValidationFactory.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/core/src/main/java/org/apache/sirona/status/ValidationFactory.java?rev=1538662&view=auto
==============================================================================
--- incubator/sirona/trunk/core/src/main/java/org/apache/sirona/status/ValidationFactory.java (added)
+++ incubator/sirona/trunk/core/src/main/java/org/apache/sirona/status/ValidationFactory.java Mon Nov 4 16:12:48 2013
@@ -0,0 +1,21 @@
+/*
+ * 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.status;
+
+public interface ValidationFactory {
+ Validation[] validations();
+}
Added: incubator/sirona/trunk/core/src/main/java/org/apache/sirona/status/ValidationResult.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/core/src/main/java/org/apache/sirona/status/ValidationResult.java?rev=1538662&view=auto
==============================================================================
--- incubator/sirona/trunk/core/src/main/java/org/apache/sirona/status/ValidationResult.java (added)
+++ incubator/sirona/trunk/core/src/main/java/org/apache/sirona/status/ValidationResult.java Mon Nov 4 16:12:48 2013
@@ -0,0 +1,41 @@
+/*
+ * 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.status;
+
+public class ValidationResult {
+ private Status status;
+ private String message;
+ private String name;
+
+ public ValidationResult(final String name, final Status status, final String message) {
+ this.name = name;
+ this.status = status;
+ this.message = message;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public Status getStatus() {
+ return status;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+}
Modified: incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/BatchFuture.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/BatchFuture.java?rev=1538662&r1=1538661&r2=1538662&view=diff
==============================================================================
--- incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/BatchFuture.java (original)
+++ incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/BatchFuture.java Mon Nov 4 16:12:48 2013
@@ -20,7 +20,7 @@ import java.util.concurrent.ScheduledExe
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
-class BatchFuture {
+public class BatchFuture {
private final ScheduledExecutorService executor;
private final ScheduledFuture<?> task;
Modified: incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/DataStoreFactory.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/DataStoreFactory.java?rev=1538662&r1=1538661&r2=1538662&view=diff
==============================================================================
--- incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/DataStoreFactory.java (original)
+++ incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/DataStoreFactory.java Mon Nov 4 16:12:48 2013
@@ -16,8 +16,14 @@
*/
package org.apache.sirona.store;
+import org.apache.sirona.store.counter.CounterDataStore;
+import org.apache.sirona.store.gauge.CommonGaugeDataStore;
+import org.apache.sirona.store.status.NodeStatusDataStore;
+
public interface DataStoreFactory {
CounterDataStore getCounterDataStore();
CommonGaugeDataStore getGaugeDataStore();
+
+ NodeStatusDataStore getNodeStatusDataStore();
}
Modified: incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/DefaultDataStoreFactory.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/DefaultDataStoreFactory.java?rev=1538662&r1=1538661&r2=1538662&view=diff
==============================================================================
--- incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/DefaultDataStoreFactory.java (original)
+++ incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/DefaultDataStoreFactory.java Mon Nov 4 16:12:48 2013
@@ -16,10 +16,12 @@
*/
package org.apache.sirona.store;
-public class DefaultDataStoreFactory extends DelegateDataStoreFactory {
+import org.apache.sirona.store.counter.InMemoryCounterDataStore;
+import org.apache.sirona.store.gauge.InMemoryGaugeDataStore;
+import org.apache.sirona.store.status.PeriodicNodeStatusDataStore;
+public class DefaultDataStoreFactory extends DelegateDataStoreFactory {
public DefaultDataStoreFactory() {
- super(new InMemoryCounterDataStore(), new InMemoryGaugeDataStore());
+ super(new InMemoryCounterDataStore(), new InMemoryGaugeDataStore(), new PeriodicNodeStatusDataStore());
}
-
}
Modified: incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/DelegateDataStoreFactory.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/DelegateDataStoreFactory.java?rev=1538662&r1=1538661&r2=1538662&view=diff
==============================================================================
--- incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/DelegateDataStoreFactory.java (original)
+++ incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/DelegateDataStoreFactory.java Mon Nov 4 16:12:48 2013
@@ -16,14 +16,21 @@
*/
package org.apache.sirona.store;
-public class DelegateDataStoreFactory implements DataStoreFactory {
+import org.apache.sirona.store.counter.CounterDataStore;
+import org.apache.sirona.store.gauge.CommonGaugeDataStore;
+import org.apache.sirona.store.status.NodeStatusDataStore;
+public class DelegateDataStoreFactory implements DataStoreFactory {
private final CounterDataStore counterDataStore;
private final CommonGaugeDataStore gaugeDataStore;
+ private final NodeStatusDataStore nodeStatusDataStore;
- public DelegateDataStoreFactory(CounterDataStore counterDataStore, CommonGaugeDataStore gaugeDataStore) {
+ public DelegateDataStoreFactory(final CounterDataStore counterDataStore,
+ final CommonGaugeDataStore gaugeDataStore,
+ final NodeStatusDataStore nodeStatusDataStore) {
this.counterDataStore = counterDataStore;
this.gaugeDataStore = gaugeDataStore;
+ this.nodeStatusDataStore = nodeStatusDataStore;
}
@Override
@@ -35,4 +42,9 @@ public class DelegateDataStoreFactory im
public CommonGaugeDataStore getGaugeDataStore() {
return gaugeDataStore;
}
+
+ @Override
+ public NodeStatusDataStore getNodeStatusDataStore() {
+ return nodeStatusDataStore;
+ }
}
Copied: incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/counter/BatchCounterDataStore.java (from r1538543, incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/BatchCounterDataStore.java)
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/counter/BatchCounterDataStore.java?p2=incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/counter/BatchCounterDataStore.java&p1=incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/BatchCounterDataStore.java&r1=1538543&r2=1538662&rev=1538662&view=diff
==============================================================================
--- incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/BatchCounterDataStore.java (original)
+++ incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/counter/BatchCounterDataStore.java Mon Nov 4 16:12:48 2013
@@ -14,11 +14,12 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.sirona.store;
+package org.apache.sirona.store.counter;
import org.apache.sirona.configuration.Configuration;
import org.apache.sirona.counters.Counter;
import org.apache.sirona.repositories.Repository;
+import org.apache.sirona.store.BatchFuture;
import org.apache.sirona.util.DaemonThreadFactory;
import java.util.Collection;
Copied: incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/counter/CollectorCounterStore.java (from r1538552, incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/CollectorCounterStore.java)
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/counter/CollectorCounterStore.java?p2=incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/counter/CollectorCounterStore.java&p1=incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/CollectorCounterStore.java&r1=1538552&r2=1538662&rev=1538662&view=diff
==============================================================================
--- incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/CollectorCounterStore.java (original)
+++ incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/counter/CollectorCounterStore.java Mon Nov 4 16:12:48 2013
@@ -14,11 +14,10 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.sirona.store;
+package org.apache.sirona.store.counter;
import org.apache.sirona.counters.Counter;
import org.apache.sirona.math.M2AwareStatisticalSummary;
-import org.apache.sirona.store.CounterDataStore;
import java.util.Collection;
Copied: incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/counter/CounterDataStore.java (from r1538515, incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/CounterDataStore.java)
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/counter/CounterDataStore.java?p2=incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/counter/CounterDataStore.java&p1=incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/CounterDataStore.java&r1=1538515&r2=1538662&rev=1538662&view=diff
==============================================================================
--- incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/CounterDataStore.java (original)
+++ incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/counter/CounterDataStore.java Mon Nov 4 16:12:48 2013
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.sirona.store;
+package org.apache.sirona.store.counter;
import org.apache.sirona.counters.Counter;
Copied: incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/counter/InMemoryCounterDataStore.java (from r1538515, incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/InMemoryCounterDataStore.java)
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/counter/InMemoryCounterDataStore.java?p2=incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/counter/InMemoryCounterDataStore.java&p1=incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/InMemoryCounterDataStore.java&r1=1538515&r2=1538662&rev=1538662&view=diff
==============================================================================
--- incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/InMemoryCounterDataStore.java (original)
+++ incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/counter/InMemoryCounterDataStore.java Mon Nov 4 16:12:48 2013
@@ -14,10 +14,11 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.sirona.store;
+package org.apache.sirona.store.counter;
import org.apache.sirona.counters.Counter;
import org.apache.sirona.counters.DefaultCounter;
+import org.apache.sirona.store.counter.CounterDataStore;
import java.util.Collection;
import java.util.concurrent.ConcurrentHashMap;
Copied: incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/gauge/AggregatedGaugeDataStore.java (from r1538552, incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/AggregatedGaugeDataStore.java)
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/gauge/AggregatedGaugeDataStore.java?p2=incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/gauge/AggregatedGaugeDataStore.java&p1=incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/AggregatedGaugeDataStore.java&r1=1538552&r2=1538662&rev=1538662&view=diff
==============================================================================
--- incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/AggregatedGaugeDataStore.java (original)
+++ incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/gauge/AggregatedGaugeDataStore.java Mon Nov 4 16:12:48 2013
@@ -14,12 +14,13 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.sirona.store;
+package org.apache.sirona.store.gauge;
import org.apache.commons.math3.stat.descriptive.SummaryStatistics;
import org.apache.sirona.Role;
import org.apache.sirona.configuration.Configuration;
import org.apache.sirona.gauges.RemoteGaugeDataStore;
+import org.apache.sirona.store.BatchFuture;
import org.apache.sirona.util.DaemonThreadFactory;
import java.util.Locale;
Copied: incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/gauge/CollectorGaugeDataStore.java (from r1538609, incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/CollectorGaugeDataStore.java)
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/gauge/CollectorGaugeDataStore.java?p2=incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/gauge/CollectorGaugeDataStore.java&p1=incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/CollectorGaugeDataStore.java&r1=1538609&r2=1538662&rev=1538662&view=diff
==============================================================================
--- incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/CollectorGaugeDataStore.java (original)
+++ incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/gauge/CollectorGaugeDataStore.java Mon Nov 4 16:12:48 2013
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.sirona.store;
+package org.apache.sirona.store.gauge;
import org.apache.sirona.Role;
Copied: incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/gauge/CommonGaugeDataStore.java (from r1538609, incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/CommonGaugeDataStore.java)
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/gauge/CommonGaugeDataStore.java?p2=incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/gauge/CommonGaugeDataStore.java&p1=incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/CommonGaugeDataStore.java&r1=1538609&r2=1538662&rev=1538662&view=diff
==============================================================================
--- incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/CommonGaugeDataStore.java (original)
+++ incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/gauge/CommonGaugeDataStore.java Mon Nov 4 16:12:48 2013
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.sirona.store;
+package org.apache.sirona.store.gauge;
import org.apache.sirona.Role;
Copied: incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/gauge/GaugeDataStore.java (from r1538609, incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/GaugeDataStore.java)
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/gauge/GaugeDataStore.java?p2=incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/gauge/GaugeDataStore.java&p1=incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/GaugeDataStore.java&r1=1538609&r2=1538662&rev=1538662&view=diff
==============================================================================
--- incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/GaugeDataStore.java (original)
+++ incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/gauge/GaugeDataStore.java Mon Nov 4 16:12:48 2013
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.sirona.store;
+package org.apache.sirona.store.gauge;
import org.apache.sirona.Role;
Copied: incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/gauge/GaugeValuesRequest.java (from r1538515, incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/GaugeValuesRequest.java)
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/gauge/GaugeValuesRequest.java?p2=incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/gauge/GaugeValuesRequest.java&p1=incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/GaugeValuesRequest.java&r1=1538515&r2=1538662&rev=1538662&view=diff
==============================================================================
--- incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/GaugeValuesRequest.java (original)
+++ incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/gauge/GaugeValuesRequest.java Mon Nov 4 16:12:48 2013
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.sirona.store;
+package org.apache.sirona.store.gauge;
import org.apache.sirona.Role;
Copied: incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/gauge/InMemoryGaugeDataStore.java (from r1538609, incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/InMemoryGaugeDataStore.java)
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/gauge/InMemoryGaugeDataStore.java?p2=incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/gauge/InMemoryGaugeDataStore.java&p1=incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/InMemoryGaugeDataStore.java&r1=1538609&r2=1538662&rev=1538662&view=diff
==============================================================================
--- incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/InMemoryGaugeDataStore.java (original)
+++ incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/gauge/InMemoryGaugeDataStore.java Mon Nov 4 16:12:48 2013
@@ -14,11 +14,10 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.sirona.store;
+package org.apache.sirona.store.gauge;
import org.apache.sirona.Role;
import org.apache.sirona.configuration.Configuration;
-import org.apache.sirona.gauges.Gauge;
import java.util.Collection;
import java.util.Collections;
Copied: incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/gauge/Value.java (from r1538515, incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/Value.java)
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/gauge/Value.java?p2=incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/gauge/Value.java&p1=incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/Value.java&r1=1538515&r2=1538662&rev=1538662&view=diff
==============================================================================
--- incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/Value.java (original)
+++ incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/gauge/Value.java Mon Nov 4 16:12:48 2013
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.sirona.store;
+package org.apache.sirona.store.gauge;
public interface Value {
double getMean();
Added: incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/status/EmptyStatuses.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/status/EmptyStatuses.java?rev=1538662&view=auto
==============================================================================
--- incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/status/EmptyStatuses.java (added)
+++ incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/status/EmptyStatuses.java Mon Nov 4 16:12:48 2013
@@ -0,0 +1,32 @@
+/*
+ * 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.store.status;
+
+import org.apache.sirona.status.NodeStatus;
+
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+// this is empty but updatable
+public class EmptyStatuses implements NodeStatusDataStore {
+ private Map<String, NodeStatus> statuses = new ConcurrentHashMap<String, NodeStatus>();
+
+ @Override
+ public Map<String, NodeStatus> statuses() {
+ return statuses;
+ }
+}
Added: incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/status/NodeStatusDataStore.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/status/NodeStatusDataStore.java?rev=1538662&view=auto
==============================================================================
--- incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/status/NodeStatusDataStore.java (added)
+++ incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/status/NodeStatusDataStore.java Mon Nov 4 16:12:48 2013
@@ -0,0 +1,25 @@
+/*
+ * 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.store.status;
+
+import org.apache.sirona.status.NodeStatus;
+
+import java.util.Map;
+
+public interface NodeStatusDataStore {
+ Map<String, NodeStatus> statuses();
+}
Added: incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/status/PeriodicNodeStatusDataStore.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/status/PeriodicNodeStatusDataStore.java?rev=1538662&view=auto
==============================================================================
--- incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/status/PeriodicNodeStatusDataStore.java (added)
+++ incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/status/PeriodicNodeStatusDataStore.java Mon Nov 4 16:12:48 2013
@@ -0,0 +1,101 @@
+/*
+ * 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.store.status;
+
+import org.apache.sirona.configuration.Configuration;
+import org.apache.sirona.status.NodeStatus;
+import org.apache.sirona.status.NodeStatusReporter;
+import org.apache.sirona.store.BatchFuture;
+import org.apache.sirona.util.DaemonThreadFactory;
+
+import java.util.HashMap;
+import java.util.Locale;
+import java.util.Map;
+import java.util.concurrent.Executors;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.ScheduledFuture;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicReference;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+public class PeriodicNodeStatusDataStore implements NodeStatusDataStore {
+ private static final Logger LOGGER = Logger.getLogger(PeriodicNodeStatusDataStore.class.getName());
+
+ private final BatchFuture scheduledTask;
+ private final AtomicReference<NodeStatus> status = new AtomicReference<NodeStatus>();
+ private final HashMap<String, NodeStatus> statusAsMap = new HashMap<String, NodeStatus>();
+
+ public PeriodicNodeStatusDataStore() {
+ final NodeStatusReporter nodeStatusReporter = new NodeStatusReporter();
+ if (nodeStatusReporter.hasValidations()) {
+ final String name = getClass().getSimpleName().toLowerCase(Locale.ENGLISH).replace("nodestatusdatastore", "");
+ final long period = getPeriod(name);
+
+ final ScheduledExecutorService ses = Executors.newSingleThreadScheduledExecutor(new DaemonThreadFactory(name + "-status-schedule-"));
+ final ScheduledFuture<?> future = ses.scheduleAtFixedRate(new ReportStatusTask(nodeStatusReporter), period, period, TimeUnit.MILLISECONDS);
+ scheduledTask = new BatchFuture(ses, future);
+ } else {
+ scheduledTask = null;
+ }
+ }
+
+ @Configuration.Destroying
+ public void shutdown() {
+ if (scheduledTask != null) {
+ scheduledTask.done();
+ }
+ }
+
+ protected int getPeriod(final String name) {
+ return Configuration.getInteger(Configuration.CONFIG_PROPERTY_PREFIX + name + ".status.period",
+ Configuration.getInteger(Configuration.CONFIG_PROPERTY_PREFIX + name + ".period", 60000));
+ }
+
+ protected void reportStatus(final NodeStatus nodeStatus) {
+ // no-op
+ }
+
+ @Override
+ public Map<String, NodeStatus> statuses() {
+ if (status.get() != null) {
+ statusAsMap.put("local", status.get());
+ } else {
+ statusAsMap.clear();
+ }
+ return statusAsMap;
+ }
+
+ private class ReportStatusTask implements Runnable {
+ private final NodeStatusReporter reporter;
+
+ public ReportStatusTask(final NodeStatusReporter nodeStatusReporter) {
+ reporter = nodeStatusReporter;
+ }
+
+ @Override
+ public void run() {
+ final NodeStatus nodeStatus = reporter.computeStatus();
+ try {
+ status.set(nodeStatus);
+ reportStatus(nodeStatus);
+ } catch (final Exception e) {
+ LOGGER.log(Level.SEVERE, e.getMessage(), e);
+ }
+ }
+ }
+}
Modified: incubator/sirona/trunk/core/src/main/java/org/apache/sirona/util/Environment.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/core/src/main/java/org/apache/sirona/util/Environment.java?rev=1538662&r1=1538661&r2=1538662&view=diff
==============================================================================
--- incubator/sirona/trunk/core/src/main/java/org/apache/sirona/util/Environment.java (original)
+++ incubator/sirona/trunk/core/src/main/java/org/apache/sirona/util/Environment.java Mon Nov 4 16:12:48 2013
@@ -17,9 +17,8 @@
package org.apache.sirona.util;
import org.apache.sirona.configuration.Configuration;
-import org.apache.sirona.store.CollectorCounterStore;
+import org.apache.sirona.store.counter.CollectorCounterStore;
import org.apache.sirona.repositories.Repository;
-import org.apache.sirona.store.CounterDataStore;
public final class Environment {
private Environment() {
Modified: incubator/sirona/trunk/core/src/test/java/org/apache/sirona/counters/CounterBench.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/core/src/test/java/org/apache/sirona/counters/CounterBench.java?rev=1538662&r1=1538661&r2=1538662&view=diff
==============================================================================
--- incubator/sirona/trunk/core/src/test/java/org/apache/sirona/counters/CounterBench.java (original)
+++ incubator/sirona/trunk/core/src/test/java/org/apache/sirona/counters/CounterBench.java Mon Nov 4 16:12:48 2013
@@ -17,7 +17,7 @@
package org.apache.sirona.counters;
import org.apache.sirona.Role;
-import org.apache.sirona.store.InMemoryCounterDataStore;
+import org.apache.sirona.store.counter.InMemoryCounterDataStore;
import org.junit.Test;
import java.util.concurrent.ExecutorService;
Added: incubator/sirona/trunk/core/src/test/java/org/apache/sirona/spi/SpiTestImpl.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/core/src/test/java/org/apache/sirona/spi/SpiTestImpl.java?rev=1538662&view=auto
==============================================================================
--- incubator/sirona/trunk/core/src/test/java/org/apache/sirona/spi/SpiTestImpl.java (added)
+++ incubator/sirona/trunk/core/src/test/java/org/apache/sirona/spi/SpiTestImpl.java Mon Nov 4 16:12:48 2013
@@ -0,0 +1,40 @@
+/*
+ * 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.spi;
+
+import org.apache.sirona.status.Status;
+import org.apache.sirona.status.Validation;
+import org.apache.sirona.status.ValidationResult;
+
+import java.util.Arrays;
+
+public class SpiTestImpl extends DefaultSPI {
+ public static ValidationResult status = new ValidationResult("n", Status.OK, "m");
+
+ @Override
+ public <T> Iterable<T> find(final Class<T> api, final ClassLoader loader) {
+ if (Validation.class.equals(api)) {
+ return (Iterable<T>) Arrays.asList(new Validation() {
+ @Override
+ public ValidationResult validate() {
+ return status;
+ }
+ });
+ }
+ return super.find(api, loader);
+ }
+}
Added: incubator/sirona/trunk/core/src/test/java/org/apache/sirona/status/ValidationTest.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/core/src/test/java/org/apache/sirona/status/ValidationTest.java?rev=1538662&view=auto
==============================================================================
--- incubator/sirona/trunk/core/src/test/java/org/apache/sirona/status/ValidationTest.java (added)
+++ incubator/sirona/trunk/core/src/test/java/org/apache/sirona/status/ValidationTest.java Mon Nov 4 16:12:48 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.
+ */
+package org.apache.sirona.status;
+
+import org.apache.sirona.spi.SpiTestImpl;
+import org.apache.sirona.store.status.PeriodicNodeStatusDataStore;
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+
+public class ValidationTest {
+ @Test
+ public void globalStatus() {
+ assertEquals(Status.OK, new NodeStatus(new ValidationResult[]{new ValidationResult(null, Status.OK, null)}).getStatus());
+ assertEquals(Status.KO, new NodeStatus(new ValidationResult[]{new ValidationResult(null, Status.KO, null)}).getStatus());
+ assertEquals(Status.DEGRADED, new NodeStatus(new ValidationResult[]{new ValidationResult(null, Status.DEGRADED, null)}).getStatus());
+ assertEquals(Status.KO, new NodeStatus(new ValidationResult[]{new ValidationResult(null, Status.DEGRADED, null), new ValidationResult(null, Status.KO, null)}).getStatus());
+ assertEquals(Status.DEGRADED, new NodeStatus(new ValidationResult[]{new ValidationResult(null, Status.DEGRADED, null), new ValidationResult(null, Status.OK, null)}).getStatus());
+ }
+
+ @Test
+ public void periodicNodeReporter() throws InterruptedException {
+ final PeriodicNodeStatusDataStore store = new PeriodicNodeStatusDataStore() {
+ @Override
+ protected int getPeriod(final String name) {
+ return 100;
+ }
+ };
+ Thread.sleep(200);
+ assertEquals(Status.OK, store.statuses().values().iterator().next().getStatus());
+
+ SpiTestImpl.status = new ValidationResult("", Status.KO, "");
+ Thread.sleep(200);
+ assertEquals(Status.KO, store.statuses().values().iterator().next().getStatus());
+ store.shutdown();
+ }
+}
Added: incubator/sirona/trunk/core/src/test/resources/sirona.properties
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/core/src/test/resources/sirona.properties?rev=1538662&view=auto
==============================================================================
--- incubator/sirona/trunk/core/src/test/resources/sirona.properties (added)
+++ incubator/sirona/trunk/core/src/test/resources/sirona.properties Mon Nov 4 16:12:48 2013
@@ -0,0 +1,17 @@
+# 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.
+org.apache.sirona.spi.SPI = org.apache.sirona.spi.SpiTestImpl
Modified: incubator/sirona/trunk/cube/src/main/java/org/apache/sirona/cube/CubeBuilder.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/cube/src/main/java/org/apache/sirona/cube/CubeBuilder.java?rev=1538662&r1=1538661&r2=1538662&view=diff
==============================================================================
--- incubator/sirona/trunk/cube/src/main/java/org/apache/sirona/cube/CubeBuilder.java (original)
+++ incubator/sirona/trunk/cube/src/main/java/org/apache/sirona/cube/CubeBuilder.java Mon Nov 4 16:12:48 2013
@@ -30,7 +30,7 @@ public class CubeBuilder {
private String collector;
private String marker;
- public Cube build() {
+ public synchronized Cube build() {
if (marker == null) {
try {
marker = InetAddress.getLocalHost().getHostName();
Modified: incubator/sirona/trunk/cube/src/main/java/org/apache/sirona/cube/CubeCounterDataStore.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/cube/src/main/java/org/apache/sirona/cube/CubeCounterDataStore.java?rev=1538662&r1=1538661&r2=1538662&view=diff
==============================================================================
--- incubator/sirona/trunk/cube/src/main/java/org/apache/sirona/cube/CubeCounterDataStore.java (original)
+++ incubator/sirona/trunk/cube/src/main/java/org/apache/sirona/cube/CubeCounterDataStore.java Mon Nov 4 16:12:48 2013
@@ -18,7 +18,7 @@ package org.apache.sirona.cube;
import org.apache.sirona.configuration.Configuration;
import org.apache.sirona.counters.Counter;
-import org.apache.sirona.store.BatchCounterDataStore;
+import org.apache.sirona.store.counter.BatchCounterDataStore;
import java.util.Collection;
Modified: incubator/sirona/trunk/cube/src/main/java/org/apache/sirona/cube/CubeDataStoreFactory.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/cube/src/main/java/org/apache/sirona/cube/CubeDataStoreFactory.java?rev=1538662&r1=1538661&r2=1538662&view=diff
==============================================================================
--- incubator/sirona/trunk/cube/src/main/java/org/apache/sirona/cube/CubeDataStoreFactory.java (original)
+++ incubator/sirona/trunk/cube/src/main/java/org/apache/sirona/cube/CubeDataStoreFactory.java Mon Nov 4 16:12:48 2013
@@ -20,6 +20,6 @@ import org.apache.sirona.store.DelegateD
public class CubeDataStoreFactory extends DelegateDataStoreFactory {
public CubeDataStoreFactory() {
- super(new CubeCounterDataStore(), new CubeGaugeDataStore());
+ super(new CubeCounterDataStore(), new CubeGaugeDataStore(), new CubeNodeStatusDataStore());
}
}
Added: incubator/sirona/trunk/cube/src/main/java/org/apache/sirona/cube/CubeNodeStatusDataStore.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/cube/src/main/java/org/apache/sirona/cube/CubeNodeStatusDataStore.java?rev=1538662&view=auto
==============================================================================
--- incubator/sirona/trunk/cube/src/main/java/org/apache/sirona/cube/CubeNodeStatusDataStore.java (added)
+++ incubator/sirona/trunk/cube/src/main/java/org/apache/sirona/cube/CubeNodeStatusDataStore.java Mon Nov 4 16:12:48 2013
@@ -0,0 +1,42 @@
+/*
+ * 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.cube;
+
+import org.apache.sirona.configuration.Configuration;
+import org.apache.sirona.status.NodeStatus;
+import org.apache.sirona.status.ValidationResult;
+import org.apache.sirona.store.status.PeriodicNodeStatusDataStore;
+
+public class CubeNodeStatusDataStore extends PeriodicNodeStatusDataStore {
+ private static final String VALIDATION_TYPE = "validation";
+
+ private final Cube cube = Configuration.findOrCreateInstance(CubeBuilder.class).build();
+
+ @Override
+ protected void reportStatus(final NodeStatus nodeStatus) {
+ final long ts = System.currentTimeMillis();
+ final StringBuilder events = cube.newEventStream();
+ for (final ValidationResult result : nodeStatus.getResults()) {
+ cube.buildEvent(events, VALIDATION_TYPE, ts, new MapBuilder()
+ .add("message", result.getMessage())
+ .add("status", result.getStatus().name())
+ .add("name", result.getName())
+ .map());
+ }
+ cube.post(events);
+ }
+}
Modified: incubator/sirona/trunk/graphite/src/main/java/org/apache/sirona/graphite/GraphiteBuilder.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/graphite/src/main/java/org/apache/sirona/graphite/GraphiteBuilder.java?rev=1538662&r1=1538661&r2=1538662&view=diff
==============================================================================
--- incubator/sirona/trunk/graphite/src/main/java/org/apache/sirona/graphite/GraphiteBuilder.java (original)
+++ incubator/sirona/trunk/graphite/src/main/java/org/apache/sirona/graphite/GraphiteBuilder.java Mon Nov 4 16:12:48 2013
@@ -29,7 +29,7 @@ public class GraphiteBuilder {
private int port;
private String charset;
- public Graphite build() {
+ public synchronized Graphite build() {
if (charset == null) {
charset = "UTF-8";
}