Aggregate system metrics using metrics service
Change-Id: I617fa21973b7e01b92f311a6fa5687e1f0f870c2
diff --git a/apps/cpman/app/src/test/java/org/onosproject/cpman/rest/ControlMetricsCollectorResourceTest.java b/apps/cpman/app/src/test/java/org/onosproject/cpman/rest/ControlMetricsCollectorResourceTest.java
index a0ef91c..e4fa11f 100644
--- a/apps/cpman/app/src/test/java/org/onosproject/cpman/rest/ControlMetricsCollectorResourceTest.java
+++ b/apps/cpman/app/src/test/java/org/onosproject/cpman/rest/ControlMetricsCollectorResourceTest.java
@@ -15,28 +15,42 @@
*/
package org.onosproject.cpman.rest;
-import java.io.InputStream;
-import java.net.HttpURLConnection;
-import java.util.Optional;
-
-import javax.ws.rs.client.Entity;
-import javax.ws.rs.client.WebTarget;
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.Response;
-
+import com.codahale.metrics.Counter;
+import com.codahale.metrics.Gauge;
+import com.codahale.metrics.Histogram;
+import com.codahale.metrics.Meter;
+import com.codahale.metrics.Metric;
+import com.codahale.metrics.MetricFilter;
+import com.codahale.metrics.MetricRegistry;
+import com.codahale.metrics.Timer;
import org.glassfish.jersey.server.ResourceConfig;
import org.junit.Before;
import org.junit.Test;
+import org.onlab.metrics.MetricsComponent;
+import org.onlab.metrics.MetricsFeature;
+import org.onlab.metrics.MetricsService;
import org.onlab.osgi.ServiceDirectory;
import org.onlab.osgi.TestServiceDirectory;
import org.onlab.rest.BaseResource;
import org.onosproject.cpman.ControlPlaneMonitorService;
import org.onosproject.cpman.SystemInfo;
import org.onosproject.cpman.impl.SystemInfoFactory;
+import org.onosproject.cpman.impl.SystemMetricsAggregator;
import org.onosproject.net.DeviceId;
import org.onosproject.rest.resources.ResourceTest;
+import javax.ws.rs.client.Entity;
+import javax.ws.rs.client.WebTarget;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import java.io.InputStream;
+import java.net.HttpURLConnection;
+import java.util.Collections;
+import java.util.Map;
+import java.util.Optional;
+
import static org.easymock.EasyMock.anyInt;
+import static org.easymock.EasyMock.anyLong;
import static org.easymock.EasyMock.anyObject;
import static org.easymock.EasyMock.anyString;
import static org.easymock.EasyMock.createMock;
@@ -53,6 +67,10 @@
final ControlPlaneMonitorService mockControlPlaneMonitorService =
createMock(ControlPlaneMonitorService.class);
+ final MetricsService mockMetricsService = new MockMetricsService();
+ final MetricsComponent mockMetricsComponent = createMock(MetricsComponent.class);
+ final SystemMetricsAggregator mockAggregator = createMock(SystemMetricsAggregator.class);
+
private static final String PREFIX = "collector";
@@ -70,7 +88,8 @@
public void setUpTest() {
ServiceDirectory testDirectory =
new TestServiceDirectory()
- .add(ControlPlaneMonitorService.class, mockControlPlaneMonitorService);
+ .add(ControlPlaneMonitorService.class, mockControlPlaneMonitorService)
+ .add(MetricsService.class, mockMetricsService);
BaseResource.setServiceDirectory(testDirectory);
}
@@ -83,6 +102,11 @@
(Optional<DeviceId>) anyObject());
expectLastCall().times(5);
replay(mockControlPlaneMonitorService);
+
+ mockAggregator.increment(anyObject(), anyLong());
+ expectLastCall();
+ replay(mockAggregator);
+
basePostTest("cpu-metrics-post.json", PREFIX + "/cpu_metrics");
}
@@ -95,6 +119,7 @@
(Optional<DeviceId>) anyObject());
expectLastCall().times(4);
replay(mockControlPlaneMonitorService);
+
basePostTest("memory-metrics-post.json", PREFIX + "/memory_metrics");
}
@@ -106,6 +131,7 @@
mockControlPlaneMonitorService.updateMetric(anyObject(), anyInt(), anyString());
expectLastCall().times(4);
replay(mockControlPlaneMonitorService);
+
basePostTest("disk-metrics-post.json", PREFIX + "/disk_metrics");
}
@@ -117,6 +143,7 @@
mockControlPlaneMonitorService.updateMetric(anyObject(), anyInt(), anyString());
expectLastCall().times(8);
replay(mockControlPlaneMonitorService);
+
basePostTest("network-metrics-post.json", PREFIX + "/network_metrics");
}
@@ -147,4 +174,90 @@
Response response = baseTest(jsonFile, path);
assertThat(response.getStatus(), is(HttpURLConnection.HTTP_OK));
}
+
+ private class MockMetricsService implements MetricsService {
+
+ @Override
+ public MetricsComponent registerComponent(String name) {
+ MetricsComponent metricsComponent = new MetricsComponent(name);
+ return metricsComponent;
+ }
+
+ @Override
+ public MetricRegistry getMetricRegistry() {
+ return null;
+ }
+
+ @Override
+ public Counter createCounter(MetricsComponent component, MetricsFeature feature,
+ String metricName) {
+ return null;
+ }
+
+ @Override
+ public Histogram createHistogram(MetricsComponent component,
+ MetricsFeature feature, String metricName) {
+ return null;
+ }
+
+ @Override
+ public Timer createTimer(MetricsComponent component,
+ MetricsFeature feature, String metricName) {
+ return null;
+ }
+
+ @Override
+ public Meter createMeter(MetricsComponent component,
+ MetricsFeature feature, String metricName) {
+ return new Meter();
+ }
+
+ @Override
+ public <T extends Metric> T registerMetric(MetricsComponent component,
+ MetricsFeature feature,
+ String metricName, T metric) {
+ return null;
+ }
+
+ @Override
+ public boolean removeMetric(MetricsComponent component,
+ MetricsFeature feature, String metricName) {
+ return false;
+ }
+
+ @Override
+ public Map<String, Timer> getTimers(MetricFilter filter) {
+ return Collections.emptyMap();
+ }
+
+ @Override
+ public Map<String, Gauge> getGauges(MetricFilter filter) {
+ return Collections.emptyMap();
+ }
+
+ @Override
+ public Map<String, Counter> getCounters(MetricFilter filter) {
+ return Collections.emptyMap();
+ }
+
+ @Override
+ public Map<String, Meter> getMeters(MetricFilter filter) {
+ return Collections.emptyMap();
+ }
+
+ @Override
+ public Map<String, Histogram> getHistograms(MetricFilter filter) {
+ return Collections.emptyMap();
+ }
+
+ @Override
+ public Map<String, Metric> getMetrics() {
+ return Collections.emptyMap();
+ }
+
+ @Override
+ public void removeMatching(MetricFilter filter) {
+
+ }
+ }
}