Committed by
Gerrit Code Review
Add resource name param to diskMetrics and networkMetrics method
- Enable to add metrics of multiple disks - Enable to add metrics of multiple network interfaces Change-Id: I6e91d63b7a02f0d2f63fe445712a23e72d208789
Showing
6 changed files
with
110 additions
and
28 deletions
| ... | @@ -16,12 +16,13 @@ | ... | @@ -16,12 +16,13 @@ |
| 16 | package org.onosproject.cpman.rest; | 16 | package org.onosproject.cpman.rest; |
| 17 | 17 | ||
| 18 | import com.fasterxml.jackson.databind.JsonNode; | 18 | import com.fasterxml.jackson.databind.JsonNode; |
| 19 | +import com.fasterxml.jackson.databind.node.ArrayNode; | ||
| 19 | import com.fasterxml.jackson.databind.node.ObjectNode; | 20 | import com.fasterxml.jackson.databind.node.ObjectNode; |
| 20 | import org.onosproject.cpman.ControlMetric; | 21 | import org.onosproject.cpman.ControlMetric; |
| 21 | import org.onosproject.cpman.ControlMetricType; | 22 | import org.onosproject.cpman.ControlMetricType; |
| 22 | -import org.onosproject.cpman.impl.ControlMetricsSystemSpec; | ||
| 23 | import org.onosproject.cpman.ControlPlaneMonitorService; | 23 | import org.onosproject.cpman.ControlPlaneMonitorService; |
| 24 | import org.onosproject.cpman.MetricValue; | 24 | import org.onosproject.cpman.MetricValue; |
| 25 | +import org.onosproject.cpman.impl.ControlMetricsSystemSpec; | ||
| 25 | import org.onosproject.rest.AbstractWebResource; | 26 | import org.onosproject.rest.AbstractWebResource; |
| 26 | 27 | ||
| 27 | import javax.ws.rs.Consumes; | 28 | import javax.ws.rs.Consumes; |
| ... | @@ -34,6 +35,8 @@ import java.io.IOException; | ... | @@ -34,6 +35,8 @@ import java.io.IOException; |
| 34 | import java.io.InputStream; | 35 | import java.io.InputStream; |
| 35 | import java.util.Optional; | 36 | import java.util.Optional; |
| 36 | 37 | ||
| 38 | +import static org.onlab.util.Tools.nullIsIllegal; | ||
| 39 | + | ||
| 37 | /** | 40 | /** |
| 38 | * Collect control plane metrics. | 41 | * Collect control plane metrics. |
| 39 | */ | 42 | */ |
| ... | @@ -43,6 +46,7 @@ public class ControlMetricsCollectorWebResource extends AbstractWebResource { | ... | @@ -43,6 +46,7 @@ public class ControlMetricsCollectorWebResource extends AbstractWebResource { |
| 43 | final ControlPlaneMonitorService service = get(ControlPlaneMonitorService.class); | 46 | final ControlPlaneMonitorService service = get(ControlPlaneMonitorService.class); |
| 44 | public static final int UPDATE_INTERVAL = 1; // 1 minute update interval | 47 | public static final int UPDATE_INTERVAL = 1; // 1 minute update interval |
| 45 | public static final String INVALID_SYSTEM_SPECS = "Invalid system specifications"; | 48 | public static final String INVALID_SYSTEM_SPECS = "Invalid system specifications"; |
| 49 | + public static final String INVALID_RESOURCE_NAME = "Invalid resource name"; | ||
| 46 | 50 | ||
| 47 | /** | 51 | /** |
| 48 | * Collects CPU metrics. | 52 | * Collects CPU metrics. |
| ... | @@ -166,24 +170,29 @@ public class ControlMetricsCollectorWebResource extends AbstractWebResource { | ... | @@ -166,24 +170,29 @@ public class ControlMetricsCollectorWebResource extends AbstractWebResource { |
| 166 | @Produces(MediaType.APPLICATION_JSON) | 170 | @Produces(MediaType.APPLICATION_JSON) |
| 167 | public Response diskMetrics(InputStream stream) { | 171 | public Response diskMetrics(InputStream stream) { |
| 168 | ObjectNode root = mapper().createObjectNode(); | 172 | ObjectNode root = mapper().createObjectNode(); |
| 169 | - ControlMetric cm; | 173 | + final ControlMetric[] cm = new ControlMetric[1]; |
| 170 | try { | 174 | try { |
| 171 | ObjectNode jsonTree = (ObjectNode) mapper().readTree(stream); | 175 | ObjectNode jsonTree = (ObjectNode) mapper().readTree(stream); |
| 176 | + ArrayNode diskRes = (ArrayNode) jsonTree.get("disks"); | ||
| 177 | + diskRes.forEach(node-> { | ||
| 178 | + JsonNode resourceName = node.get("resourceName"); | ||
| 179 | + nullIsIllegal(resourceName, INVALID_RESOURCE_NAME); | ||
| 180 | + | ||
| 172 | JsonNode readBytes = jsonTree.get("readBytes"); | 181 | JsonNode readBytes = jsonTree.get("readBytes"); |
| 173 | JsonNode writeBytes = jsonTree.get("writeBytes"); | 182 | JsonNode writeBytes = jsonTree.get("writeBytes"); |
| 174 | 183 | ||
| 175 | if (readBytes != null) { | 184 | if (readBytes != null) { |
| 176 | - cm = new ControlMetric(ControlMetricType.DISK_READ_BYTES, | 185 | + cm[0] = new ControlMetric(ControlMetricType.DISK_READ_BYTES, |
| 177 | new MetricValue.Builder().load(readBytes.asLong()).add()); | 186 | new MetricValue.Builder().load(readBytes.asLong()).add()); |
| 178 | - service.updateMetric(cm, UPDATE_INTERVAL, Optional.ofNullable(null)); | 187 | + service.updateMetric(cm[0], UPDATE_INTERVAL, resourceName.asText()); |
| 179 | } | 188 | } |
| 180 | 189 | ||
| 181 | if (writeBytes != null) { | 190 | if (writeBytes != null) { |
| 182 | - cm = new ControlMetric(ControlMetricType.DISK_WRITE_BYTES, | 191 | + cm[0] = new ControlMetric(ControlMetricType.DISK_WRITE_BYTES, |
| 183 | new MetricValue.Builder().load(writeBytes.asLong()).add()); | 192 | new MetricValue.Builder().load(writeBytes.asLong()).add()); |
| 184 | - service.updateMetric(cm, UPDATE_INTERVAL, Optional.ofNullable(null)); | 193 | + service.updateMetric(cm[0], UPDATE_INTERVAL, resourceName.asText()); |
| 185 | } | 194 | } |
| 186 | - | 195 | + }); |
| 187 | } catch (IOException e) { | 196 | } catch (IOException e) { |
| 188 | throw new IllegalArgumentException(e.getMessage()); | 197 | throw new IllegalArgumentException(e.getMessage()); |
| 189 | } | 198 | } |
| ... | @@ -203,45 +212,49 @@ public class ControlMetricsCollectorWebResource extends AbstractWebResource { | ... | @@ -203,45 +212,49 @@ public class ControlMetricsCollectorWebResource extends AbstractWebResource { |
| 203 | @Produces(MediaType.APPLICATION_JSON) | 212 | @Produces(MediaType.APPLICATION_JSON) |
| 204 | public Response networkMetrics(InputStream stream) { | 213 | public Response networkMetrics(InputStream stream) { |
| 205 | ObjectNode root = mapper().createObjectNode(); | 214 | ObjectNode root = mapper().createObjectNode(); |
| 206 | - ControlMetric cm; | 215 | + final ControlMetric[] cm = new ControlMetric[1]; |
| 207 | try { | 216 | try { |
| 208 | ObjectNode jsonTree = (ObjectNode) mapper().readTree(stream); | 217 | ObjectNode jsonTree = (ObjectNode) mapper().readTree(stream); |
| 218 | + ArrayNode networkRes = (ArrayNode) jsonTree.get("networks"); | ||
| 219 | + networkRes.forEach(node -> { | ||
| 220 | + JsonNode resourceName = node.get("resourceName"); | ||
| 221 | + nullIsIllegal(resourceName, INVALID_RESOURCE_NAME); | ||
| 222 | + | ||
| 209 | JsonNode inBytes = jsonTree.get("incomingBytes"); | 223 | JsonNode inBytes = jsonTree.get("incomingBytes"); |
| 210 | JsonNode outBytes = jsonTree.get("outgoingBytes"); | 224 | JsonNode outBytes = jsonTree.get("outgoingBytes"); |
| 211 | JsonNode inPackets = jsonTree.get("incomingPackets"); | 225 | JsonNode inPackets = jsonTree.get("incomingPackets"); |
| 212 | JsonNode outPackets = jsonTree.get("outgoingPackets"); | 226 | JsonNode outPackets = jsonTree.get("outgoingPackets"); |
| 213 | 227 | ||
| 214 | if (inBytes != null) { | 228 | if (inBytes != null) { |
| 215 | - cm = new ControlMetric(ControlMetricType.NW_INCOMING_BYTES, | 229 | + cm[0] = new ControlMetric(ControlMetricType.NW_INCOMING_BYTES, |
| 216 | new MetricValue.Builder().load(inBytes.asLong()).add()); | 230 | new MetricValue.Builder().load(inBytes.asLong()).add()); |
| 217 | - service.updateMetric(cm, UPDATE_INTERVAL, Optional.ofNullable(null)); | 231 | + service.updateMetric(cm[0], UPDATE_INTERVAL, resourceName.asText()); |
| 218 | } | 232 | } |
| 219 | 233 | ||
| 220 | if (outBytes != null) { | 234 | if (outBytes != null) { |
| 221 | - cm = new ControlMetric(ControlMetricType.NW_OUTGOING_BYTES, | 235 | + cm[0] = new ControlMetric(ControlMetricType.NW_OUTGOING_BYTES, |
| 222 | new MetricValue.Builder().load(outBytes.asLong()).add()); | 236 | new MetricValue.Builder().load(outBytes.asLong()).add()); |
| 223 | - service.updateMetric(cm, UPDATE_INTERVAL, Optional.ofNullable(null)); | 237 | + service.updateMetric(cm[0], UPDATE_INTERVAL, resourceName.asText()); |
| 224 | } | 238 | } |
| 225 | 239 | ||
| 226 | if (inPackets != null) { | 240 | if (inPackets != null) { |
| 227 | - cm = new ControlMetric(ControlMetricType.NW_INCOMING_PACKETS, | 241 | + cm[0] = new ControlMetric(ControlMetricType.NW_INCOMING_PACKETS, |
| 228 | new MetricValue.Builder().load(inPackets.asLong()).add()); | 242 | new MetricValue.Builder().load(inPackets.asLong()).add()); |
| 229 | - service.updateMetric(cm, UPDATE_INTERVAL, Optional.ofNullable(null)); | 243 | + service.updateMetric(cm[0], UPDATE_INTERVAL, resourceName.asText()); |
| 230 | } | 244 | } |
| 231 | 245 | ||
| 232 | if (outPackets != null) { | 246 | if (outPackets != null) { |
| 233 | - cm = new ControlMetric(ControlMetricType.NW_OUTGOING_PACKETS, | 247 | + cm[0] = new ControlMetric(ControlMetricType.NW_OUTGOING_PACKETS, |
| 234 | new MetricValue.Builder().load(outPackets.asLong()).add()); | 248 | new MetricValue.Builder().load(outPackets.asLong()).add()); |
| 235 | - service.updateMetric(cm, UPDATE_INTERVAL, Optional.ofNullable(null)); | 249 | + service.updateMetric(cm[0], UPDATE_INTERVAL, resourceName.asText()); |
| 236 | } | 250 | } |
| 237 | - | 251 | + }); |
| 238 | } catch (IOException e) { | 252 | } catch (IOException e) { |
| 239 | throw new IllegalArgumentException(e.getMessage()); | 253 | throw new IllegalArgumentException(e.getMessage()); |
| 240 | } | 254 | } |
| 241 | return ok(root).build(); | 255 | return ok(root).build(); |
| 242 | } | 256 | } |
| 243 | 257 | ||
| 244 | - | ||
| 245 | /** | 258 | /** |
| 246 | * Collects system specifications. | 259 | * Collects system specifications. |
| 247 | * The system specs include the various control metrics | 260 | * The system specs include the various control metrics | ... | ... |
| 1 | { | 1 | { |
| 2 | "type": "object", | 2 | "type": "object", |
| 3 | + "title": "disks", | ||
| 3 | "required": [ | 4 | "required": [ |
| 5 | + "disks" | ||
| 6 | + ], | ||
| 7 | + "properties": { | ||
| 8 | + "disks": { | ||
| 9 | + "type": "array", | ||
| 10 | + "xml": { | ||
| 11 | + "name": "disks", | ||
| 12 | + "wrapped": true | ||
| 13 | + }, | ||
| 14 | + "items": { | ||
| 15 | + "type": "object", | ||
| 16 | + "title": "disks", | ||
| 17 | + "required": [ | ||
| 18 | + "resourceName", | ||
| 4 | "readBytes", | 19 | "readBytes", |
| 5 | "writeBytes" | 20 | "writeBytes" |
| 6 | ], | 21 | ], |
| 7 | "properties": { | 22 | "properties": { |
| 23 | + "resourceName": { | ||
| 24 | + "type": "string", | ||
| 25 | + "example": "disk1" | ||
| 26 | + }, | ||
| 8 | "readBytes": { | 27 | "readBytes": { |
| 9 | "type": "integer", | 28 | "type": "integer", |
| 10 | "format": "int64", | 29 | "format": "int64", |
| ... | @@ -16,4 +35,7 @@ | ... | @@ -16,4 +35,7 @@ |
| 16 | "example": "300" | 35 | "example": "300" |
| 17 | } | 36 | } |
| 18 | } | 37 | } |
| 38 | + } | ||
| 39 | + } | ||
| 40 | + } | ||
| 19 | } | 41 | } |
| ... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
| 1 | { | 1 | { |
| 2 | "type": "object", | 2 | "type": "object", |
| 3 | + "title": "networks", | ||
| 3 | "required": [ | 4 | "required": [ |
| 5 | + "networks" | ||
| 6 | + ], | ||
| 7 | + "properties": { | ||
| 8 | + "networks": { | ||
| 9 | + "type": "array", | ||
| 10 | + "xml": { | ||
| 11 | + "name": "networks", | ||
| 12 | + "wrapped": true | ||
| 13 | + }, | ||
| 14 | + "items": { | ||
| 15 | + "type": "object", | ||
| 16 | + "title": "networks", | ||
| 17 | + "required": [ | ||
| 18 | + "resourceName", | ||
| 4 | "incomingBytes", | 19 | "incomingBytes", |
| 5 | "outgoingBytes", | 20 | "outgoingBytes", |
| 6 | "incomingPackets", | 21 | "incomingPackets", |
| 7 | "outgoingPackets" | 22 | "outgoingPackets" |
| 8 | ], | 23 | ], |
| 9 | "properties": { | 24 | "properties": { |
| 25 | + "resourceName": { | ||
| 26 | + "type": "string", | ||
| 27 | + "example": "eth0" | ||
| 28 | + }, | ||
| 10 | "incomingBytes": { | 29 | "incomingBytes": { |
| 11 | "type": "integer", | 30 | "type": "integer", |
| 12 | "format": "int64", | 31 | "format": "int64", |
| ... | @@ -28,4 +47,7 @@ | ... | @@ -28,4 +47,7 @@ |
| 28 | "example": "2000" | 47 | "example": "2000" |
| 29 | } | 48 | } |
| 30 | } | 49 | } |
| 50 | + } | ||
| 51 | + } | ||
| 52 | + } | ||
| 31 | } | 53 | } |
| ... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
| ... | @@ -37,6 +37,7 @@ import java.net.ServerSocket; | ... | @@ -37,6 +37,7 @@ import java.net.ServerSocket; |
| 37 | import java.util.Optional; | 37 | import java.util.Optional; |
| 38 | 38 | ||
| 39 | import static org.easymock.EasyMock.anyObject; | 39 | import static org.easymock.EasyMock.anyObject; |
| 40 | +import static org.easymock.EasyMock.anyString; | ||
| 40 | import static org.easymock.EasyMock.createMock; | 41 | import static org.easymock.EasyMock.createMock; |
| 41 | import static org.easymock.EasyMock.expectLastCall; | 42 | import static org.easymock.EasyMock.expectLastCall; |
| 42 | import static org.easymock.EasyMock.replay; | 43 | import static org.easymock.EasyMock.replay; |
| ... | @@ -84,19 +85,17 @@ public class ControlMetricsCollectorResourceTest extends JerseyTest { | ... | @@ -84,19 +85,17 @@ public class ControlMetricsCollectorResourceTest extends JerseyTest { |
| 84 | } | 85 | } |
| 85 | 86 | ||
| 86 | @Test | 87 | @Test |
| 87 | - public void testDiskMetricsPost() { | 88 | + public void testDiskMetricsWithNullName() { |
| 88 | - mockControlPlaneMonitorService.updateMetric(anyObject(), anyObject(), | 89 | + mockControlPlaneMonitorService.updateMetric(anyObject(), anyObject(), anyString()); |
| 89 | - (Optional<DeviceId>) anyObject()); | 90 | + expectLastCall().times(4); |
| 90 | - expectLastCall().times(2); | ||
| 91 | replay(mockControlPlaneMonitorService); | 91 | replay(mockControlPlaneMonitorService); |
| 92 | basePostTest("disk-metrics-post.json", PREFIX + "/disk_metrics"); | 92 | basePostTest("disk-metrics-post.json", PREFIX + "/disk_metrics"); |
| 93 | } | 93 | } |
| 94 | 94 | ||
| 95 | @Test | 95 | @Test |
| 96 | - public void testNetworkMetricsPost() { | 96 | + public void testNetworkMetricsWithNullName() { |
| 97 | - mockControlPlaneMonitorService.updateMetric(anyObject(), anyObject(), | 97 | + mockControlPlaneMonitorService.updateMetric(anyObject(), anyObject(), anyString()); |
| 98 | - (Optional<DeviceId>) anyObject()); | 98 | + expectLastCall().times(8); |
| 99 | - expectLastCall().times(4); | ||
| 100 | replay(mockControlPlaneMonitorService); | 99 | replay(mockControlPlaneMonitorService); |
| 101 | basePostTest("network-metrics-post.json", PREFIX + "/network_metrics"); | 100 | basePostTest("network-metrics-post.json", PREFIX + "/network_metrics"); |
| 102 | } | 101 | } |
| ... | @@ -106,16 +105,20 @@ public class ControlMetricsCollectorResourceTest extends JerseyTest { | ... | @@ -106,16 +105,20 @@ public class ControlMetricsCollectorResourceTest extends JerseyTest { |
| 106 | basePostTest("system-spec-post.json", PREFIX + "/system_specs"); | 105 | basePostTest("system-spec-post.json", PREFIX + "/system_specs"); |
| 107 | } | 106 | } |
| 108 | 107 | ||
| 109 | - private void basePostTest(String jsonFile, String path) { | 108 | + private ClientResponse baseTest(String jsonFile, String path) { |
| 110 | final WebResource rs = resource(); | 109 | final WebResource rs = resource(); |
| 111 | InputStream jsonStream = ControlMetricsCollectorResourceTest.class | 110 | InputStream jsonStream = ControlMetricsCollectorResourceTest.class |
| 112 | .getResourceAsStream(jsonFile); | 111 | .getResourceAsStream(jsonFile); |
| 113 | 112 | ||
| 114 | assertThat(jsonStream, notNullValue()); | 113 | assertThat(jsonStream, notNullValue()); |
| 115 | 114 | ||
| 116 | - ClientResponse response = rs.path(path) | 115 | + return rs.path(path) |
| 117 | .type(MediaType.APPLICATION_JSON_TYPE) | 116 | .type(MediaType.APPLICATION_JSON_TYPE) |
| 118 | .post(ClientResponse.class, jsonStream); | 117 | .post(ClientResponse.class, jsonStream); |
| 118 | + } | ||
| 119 | + | ||
| 120 | + private void basePostTest(String jsonFile, String path) { | ||
| 121 | + ClientResponse response = baseTest(jsonFile, path); | ||
| 119 | assertThat(response.getStatus(), is(HttpURLConnection.HTTP_OK)); | 122 | assertThat(response.getStatus(), is(HttpURLConnection.HTTP_OK)); |
| 120 | } | 123 | } |
| 121 | 124 | ... | ... |
| 1 | { | 1 | { |
| 2 | + "disks": [ | ||
| 3 | + { | ||
| 4 | + "resourceName": "disk1", | ||
| 2 | "readBytes": 500, | 5 | "readBytes": 500, |
| 3 | "writeBytes": 300 | 6 | "writeBytes": 300 |
| 7 | + }, | ||
| 8 | + { | ||
| 9 | + "resourceName": "disk2", | ||
| 10 | + "readBytes": 500, | ||
| 11 | + "writeBytes": 300 | ||
| 12 | + } | ||
| 13 | + ] | ||
| 4 | } | 14 | } |
| ... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
| 1 | { | 1 | { |
| 2 | + "networks": [ | ||
| 3 | + { | ||
| 4 | + "resourceName": "eth0", | ||
| 2 | "incomingBytes": 1024, | 5 | "incomingBytes": 1024, |
| 3 | "outgoingBytes": 1024, | 6 | "outgoingBytes": 1024, |
| 4 | "incomingPackets": 1000, | 7 | "incomingPackets": 1000, |
| 5 | "outgoingPackets": 2000 | 8 | "outgoingPackets": 2000 |
| 9 | + }, | ||
| 10 | + { | ||
| 11 | + "resourceName": "eth1", | ||
| 12 | + "incomingBytes": 1024, | ||
| 13 | + "outgoingBytes": 1024, | ||
| 14 | + "incomingPackets": 1000, | ||
| 15 | + "outgoingPackets": 2000 | ||
| 16 | + } | ||
| 17 | + ] | ||
| 6 | } | 18 | } |
| ... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
-
Please register or login to post a comment