mirror of
https://github.com/opennetworkinglab/onos.git
synced 2025-11-03 01:31:21 +01:00
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
This commit is contained in:
parent
1beb60c575
commit
ba6b1172d8
@ -16,12 +16,13 @@
|
||||
package org.onosproject.cpman.rest;
|
||||
|
||||
import com.fasterxml.jackson.databind.JsonNode;
|
||||
import com.fasterxml.jackson.databind.node.ArrayNode;
|
||||
import com.fasterxml.jackson.databind.node.ObjectNode;
|
||||
import org.onosproject.cpman.ControlMetric;
|
||||
import org.onosproject.cpman.ControlMetricType;
|
||||
import org.onosproject.cpman.impl.ControlMetricsSystemSpec;
|
||||
import org.onosproject.cpman.ControlPlaneMonitorService;
|
||||
import org.onosproject.cpman.MetricValue;
|
||||
import org.onosproject.cpman.impl.ControlMetricsSystemSpec;
|
||||
import org.onosproject.rest.AbstractWebResource;
|
||||
|
||||
import javax.ws.rs.Consumes;
|
||||
@ -34,6 +35,8 @@ import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.util.Optional;
|
||||
|
||||
import static org.onlab.util.Tools.nullIsIllegal;
|
||||
|
||||
/**
|
||||
* Collect control plane metrics.
|
||||
*/
|
||||
@ -43,6 +46,7 @@ public class ControlMetricsCollectorWebResource extends AbstractWebResource {
|
||||
final ControlPlaneMonitorService service = get(ControlPlaneMonitorService.class);
|
||||
public static final int UPDATE_INTERVAL = 1; // 1 minute update interval
|
||||
public static final String INVALID_SYSTEM_SPECS = "Invalid system specifications";
|
||||
public static final String INVALID_RESOURCE_NAME = "Invalid resource name";
|
||||
|
||||
/**
|
||||
* Collects CPU metrics.
|
||||
@ -68,13 +72,13 @@ public class ControlMetricsCollectorWebResource extends AbstractWebResource {
|
||||
|
||||
if (cpuLoadJson != null) {
|
||||
cm = new ControlMetric(ControlMetricType.CPU_LOAD,
|
||||
new MetricValue.Builder().load(cpuLoadJson.asLong()).add());
|
||||
new MetricValue.Builder().load(cpuLoadJson.asLong()).add());
|
||||
service.updateMetric(cm, UPDATE_INTERVAL, Optional.ofNullable(null));
|
||||
}
|
||||
|
||||
if (totalCpuTimeJson != null) {
|
||||
cm = new ControlMetric(ControlMetricType.TOTAL_CPU_TIME,
|
||||
new MetricValue.Builder().load(totalCpuTimeJson.asLong()).add());
|
||||
new MetricValue.Builder().load(totalCpuTimeJson.asLong()).add());
|
||||
service.updateMetric(cm, UPDATE_INTERVAL, Optional.ofNullable(null));
|
||||
}
|
||||
|
||||
@ -166,24 +170,29 @@ public class ControlMetricsCollectorWebResource extends AbstractWebResource {
|
||||
@Produces(MediaType.APPLICATION_JSON)
|
||||
public Response diskMetrics(InputStream stream) {
|
||||
ObjectNode root = mapper().createObjectNode();
|
||||
ControlMetric cm;
|
||||
final ControlMetric[] cm = new ControlMetric[1];
|
||||
try {
|
||||
ObjectNode jsonTree = (ObjectNode) mapper().readTree(stream);
|
||||
JsonNode readBytes = jsonTree.get("readBytes");
|
||||
JsonNode writeBytes = jsonTree.get("writeBytes");
|
||||
ArrayNode diskRes = (ArrayNode) jsonTree.get("disks");
|
||||
diskRes.forEach(node-> {
|
||||
JsonNode resourceName = node.get("resourceName");
|
||||
nullIsIllegal(resourceName, INVALID_RESOURCE_NAME);
|
||||
|
||||
if (readBytes != null) {
|
||||
cm = new ControlMetric(ControlMetricType.DISK_READ_BYTES,
|
||||
new MetricValue.Builder().load(readBytes.asLong()).add());
|
||||
service.updateMetric(cm, UPDATE_INTERVAL, Optional.ofNullable(null));
|
||||
}
|
||||
JsonNode readBytes = jsonTree.get("readBytes");
|
||||
JsonNode writeBytes = jsonTree.get("writeBytes");
|
||||
|
||||
if (writeBytes != null) {
|
||||
cm = new ControlMetric(ControlMetricType.DISK_WRITE_BYTES,
|
||||
new MetricValue.Builder().load(writeBytes.asLong()).add());
|
||||
service.updateMetric(cm, UPDATE_INTERVAL, Optional.ofNullable(null));
|
||||
}
|
||||
if (readBytes != null) {
|
||||
cm[0] = new ControlMetric(ControlMetricType.DISK_READ_BYTES,
|
||||
new MetricValue.Builder().load(readBytes.asLong()).add());
|
||||
service.updateMetric(cm[0], UPDATE_INTERVAL, resourceName.asText());
|
||||
}
|
||||
|
||||
if (writeBytes != null) {
|
||||
cm[0] = new ControlMetric(ControlMetricType.DISK_WRITE_BYTES,
|
||||
new MetricValue.Builder().load(writeBytes.asLong()).add());
|
||||
service.updateMetric(cm[0], UPDATE_INTERVAL, resourceName.asText());
|
||||
}
|
||||
});
|
||||
} catch (IOException e) {
|
||||
throw new IllegalArgumentException(e.getMessage());
|
||||
}
|
||||
@ -203,45 +212,49 @@ public class ControlMetricsCollectorWebResource extends AbstractWebResource {
|
||||
@Produces(MediaType.APPLICATION_JSON)
|
||||
public Response networkMetrics(InputStream stream) {
|
||||
ObjectNode root = mapper().createObjectNode();
|
||||
ControlMetric cm;
|
||||
final ControlMetric[] cm = new ControlMetric[1];
|
||||
try {
|
||||
ObjectNode jsonTree = (ObjectNode) mapper().readTree(stream);
|
||||
JsonNode inBytes = jsonTree.get("incomingBytes");
|
||||
JsonNode outBytes = jsonTree.get("outgoingBytes");
|
||||
JsonNode inPackets = jsonTree.get("incomingPackets");
|
||||
JsonNode outPackets = jsonTree.get("outgoingPackets");
|
||||
ArrayNode networkRes = (ArrayNode) jsonTree.get("networks");
|
||||
networkRes.forEach(node -> {
|
||||
JsonNode resourceName = node.get("resourceName");
|
||||
nullIsIllegal(resourceName, INVALID_RESOURCE_NAME);
|
||||
|
||||
if (inBytes != null) {
|
||||
cm = new ControlMetric(ControlMetricType.NW_INCOMING_BYTES,
|
||||
new MetricValue.Builder().load(inBytes.asLong()).add());
|
||||
service.updateMetric(cm, UPDATE_INTERVAL, Optional.ofNullable(null));
|
||||
}
|
||||
JsonNode inBytes = jsonTree.get("incomingBytes");
|
||||
JsonNode outBytes = jsonTree.get("outgoingBytes");
|
||||
JsonNode inPackets = jsonTree.get("incomingPackets");
|
||||
JsonNode outPackets = jsonTree.get("outgoingPackets");
|
||||
|
||||
if (outBytes != null) {
|
||||
cm = new ControlMetric(ControlMetricType.NW_OUTGOING_BYTES,
|
||||
new MetricValue.Builder().load(outBytes.asLong()).add());
|
||||
service.updateMetric(cm, UPDATE_INTERVAL, Optional.ofNullable(null));
|
||||
}
|
||||
if (inBytes != null) {
|
||||
cm[0] = new ControlMetric(ControlMetricType.NW_INCOMING_BYTES,
|
||||
new MetricValue.Builder().load(inBytes.asLong()).add());
|
||||
service.updateMetric(cm[0], UPDATE_INTERVAL, resourceName.asText());
|
||||
}
|
||||
|
||||
if (inPackets != null) {
|
||||
cm = new ControlMetric(ControlMetricType.NW_INCOMING_PACKETS,
|
||||
new MetricValue.Builder().load(inPackets.asLong()).add());
|
||||
service.updateMetric(cm, UPDATE_INTERVAL, Optional.ofNullable(null));
|
||||
}
|
||||
if (outBytes != null) {
|
||||
cm[0] = new ControlMetric(ControlMetricType.NW_OUTGOING_BYTES,
|
||||
new MetricValue.Builder().load(outBytes.asLong()).add());
|
||||
service.updateMetric(cm[0], UPDATE_INTERVAL, resourceName.asText());
|
||||
}
|
||||
|
||||
if (outPackets != null) {
|
||||
cm = new ControlMetric(ControlMetricType.NW_OUTGOING_PACKETS,
|
||||
new MetricValue.Builder().load(outPackets.asLong()).add());
|
||||
service.updateMetric(cm, UPDATE_INTERVAL, Optional.ofNullable(null));
|
||||
}
|
||||
if (inPackets != null) {
|
||||
cm[0] = new ControlMetric(ControlMetricType.NW_INCOMING_PACKETS,
|
||||
new MetricValue.Builder().load(inPackets.asLong()).add());
|
||||
service.updateMetric(cm[0], UPDATE_INTERVAL, resourceName.asText());
|
||||
}
|
||||
|
||||
if (outPackets != null) {
|
||||
cm[0] = new ControlMetric(ControlMetricType.NW_OUTGOING_PACKETS,
|
||||
new MetricValue.Builder().load(outPackets.asLong()).add());
|
||||
service.updateMetric(cm[0], UPDATE_INTERVAL, resourceName.asText());
|
||||
}
|
||||
});
|
||||
} catch (IOException e) {
|
||||
throw new IllegalArgumentException(e.getMessage());
|
||||
}
|
||||
return ok(root).build();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Collects system specifications.
|
||||
* The system specs include the various control metrics
|
||||
@ -283,4 +296,4 @@ public class ControlMetricsCollectorWebResource extends AbstractWebResource {
|
||||
}
|
||||
return ok(root).build();
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,19 +1,41 @@
|
||||
{
|
||||
"type": "object",
|
||||
"title": "disks",
|
||||
"required": [
|
||||
"readBytes",
|
||||
"writeBytes"
|
||||
"disks"
|
||||
],
|
||||
"properties": {
|
||||
"readBytes": {
|
||||
"type": "integer",
|
||||
"format": "int64",
|
||||
"example": "500"
|
||||
},
|
||||
"writeBytes": {
|
||||
"type": "integer",
|
||||
"format": "int64",
|
||||
"example": "300"
|
||||
"disks": {
|
||||
"type": "array",
|
||||
"xml": {
|
||||
"name": "disks",
|
||||
"wrapped": true
|
||||
},
|
||||
"items": {
|
||||
"type": "object",
|
||||
"title": "disks",
|
||||
"required": [
|
||||
"resourceName",
|
||||
"readBytes",
|
||||
"writeBytes"
|
||||
],
|
||||
"properties": {
|
||||
"resourceName": {
|
||||
"type": "string",
|
||||
"example": "disk1"
|
||||
},
|
||||
"readBytes": {
|
||||
"type": "integer",
|
||||
"format": "int64",
|
||||
"example": "500"
|
||||
},
|
||||
"writeBytes": {
|
||||
"type": "integer",
|
||||
"format": "int64",
|
||||
"example": "300"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,31 +1,53 @@
|
||||
{
|
||||
"type": "object",
|
||||
"title": "networks",
|
||||
"required": [
|
||||
"incomingBytes",
|
||||
"outgoingBytes",
|
||||
"incomingPackets",
|
||||
"outgoingPackets"
|
||||
"networks"
|
||||
],
|
||||
"properties": {
|
||||
"incomingBytes": {
|
||||
"type": "integer",
|
||||
"format": "int64",
|
||||
"example": "1024"
|
||||
},
|
||||
"outgoingBytes": {
|
||||
"type": "integer",
|
||||
"format": "int64",
|
||||
"example": "1024"
|
||||
},
|
||||
"incomingPackets": {
|
||||
"type": "integer",
|
||||
"format": "int64",
|
||||
"example": "1000"
|
||||
},
|
||||
"outgoingPackets": {
|
||||
"type": "integer",
|
||||
"format": "int64",
|
||||
"example": "2000"
|
||||
"networks": {
|
||||
"type": "array",
|
||||
"xml": {
|
||||
"name": "networks",
|
||||
"wrapped": true
|
||||
},
|
||||
"items": {
|
||||
"type": "object",
|
||||
"title": "networks",
|
||||
"required": [
|
||||
"resourceName",
|
||||
"incomingBytes",
|
||||
"outgoingBytes",
|
||||
"incomingPackets",
|
||||
"outgoingPackets"
|
||||
],
|
||||
"properties": {
|
||||
"resourceName": {
|
||||
"type": "string",
|
||||
"example": "eth0"
|
||||
},
|
||||
"incomingBytes": {
|
||||
"type": "integer",
|
||||
"format": "int64",
|
||||
"example": "1024"
|
||||
},
|
||||
"outgoingBytes": {
|
||||
"type": "integer",
|
||||
"format": "int64",
|
||||
"example": "1024"
|
||||
},
|
||||
"incomingPackets": {
|
||||
"type": "integer",
|
||||
"format": "int64",
|
||||
"example": "1000"
|
||||
},
|
||||
"outgoingPackets": {
|
||||
"type": "integer",
|
||||
"format": "int64",
|
||||
"example": "2000"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -37,6 +37,7 @@ import java.net.ServerSocket;
|
||||
import java.util.Optional;
|
||||
|
||||
import static org.easymock.EasyMock.anyObject;
|
||||
import static org.easymock.EasyMock.anyString;
|
||||
import static org.easymock.EasyMock.createMock;
|
||||
import static org.easymock.EasyMock.expectLastCall;
|
||||
import static org.easymock.EasyMock.replay;
|
||||
@ -84,19 +85,17 @@ public class ControlMetricsCollectorResourceTest extends JerseyTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDiskMetricsPost() {
|
||||
mockControlPlaneMonitorService.updateMetric(anyObject(), anyObject(),
|
||||
(Optional<DeviceId>) anyObject());
|
||||
expectLastCall().times(2);
|
||||
public void testDiskMetricsWithNullName() {
|
||||
mockControlPlaneMonitorService.updateMetric(anyObject(), anyObject(), anyString());
|
||||
expectLastCall().times(4);
|
||||
replay(mockControlPlaneMonitorService);
|
||||
basePostTest("disk-metrics-post.json", PREFIX + "/disk_metrics");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testNetworkMetricsPost() {
|
||||
mockControlPlaneMonitorService.updateMetric(anyObject(), anyObject(),
|
||||
(Optional<DeviceId>) anyObject());
|
||||
expectLastCall().times(4);
|
||||
public void testNetworkMetricsWithNullName() {
|
||||
mockControlPlaneMonitorService.updateMetric(anyObject(), anyObject(), anyString());
|
||||
expectLastCall().times(8);
|
||||
replay(mockControlPlaneMonitorService);
|
||||
basePostTest("network-metrics-post.json", PREFIX + "/network_metrics");
|
||||
}
|
||||
@ -106,16 +105,20 @@ public class ControlMetricsCollectorResourceTest extends JerseyTest {
|
||||
basePostTest("system-spec-post.json", PREFIX + "/system_specs");
|
||||
}
|
||||
|
||||
private void basePostTest(String jsonFile, String path) {
|
||||
private ClientResponse baseTest(String jsonFile, String path) {
|
||||
final WebResource rs = resource();
|
||||
InputStream jsonStream = ControlMetricsCollectorResourceTest.class
|
||||
.getResourceAsStream(jsonFile);
|
||||
|
||||
assertThat(jsonStream, notNullValue());
|
||||
|
||||
ClientResponse response = rs.path(path)
|
||||
return rs.path(path)
|
||||
.type(MediaType.APPLICATION_JSON_TYPE)
|
||||
.post(ClientResponse.class, jsonStream);
|
||||
}
|
||||
|
||||
private void basePostTest(String jsonFile, String path) {
|
||||
ClientResponse response = baseTest(jsonFile, path);
|
||||
assertThat(response.getStatus(), is(HttpURLConnection.HTTP_OK));
|
||||
}
|
||||
|
||||
|
||||
@ -1,4 +1,14 @@
|
||||
{
|
||||
"readBytes": 500,
|
||||
"writeBytes": 300
|
||||
"disks": [
|
||||
{
|
||||
"resourceName": "disk1",
|
||||
"readBytes": 500,
|
||||
"writeBytes": 300
|
||||
},
|
||||
{
|
||||
"resourceName": "disk2",
|
||||
"readBytes": 500,
|
||||
"writeBytes": 300
|
||||
}
|
||||
]
|
||||
}
|
||||
@ -1,6 +1,18 @@
|
||||
{
|
||||
"incomingBytes": 1024,
|
||||
"outgoingBytes": 1024,
|
||||
"incomingPackets": 1000,
|
||||
"outgoingPackets": 2000
|
||||
"networks": [
|
||||
{
|
||||
"resourceName": "eth0",
|
||||
"incomingBytes": 1024,
|
||||
"outgoingBytes": 1024,
|
||||
"incomingPackets": 1000,
|
||||
"outgoingPackets": 2000
|
||||
},
|
||||
{
|
||||
"resourceName": "eth1",
|
||||
"incomingBytes": 1024,
|
||||
"outgoingBytes": 1024,
|
||||
"incomingPackets": 1000,
|
||||
"outgoingPackets": 2000
|
||||
}
|
||||
]
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user