[ONOS-3535] Accumulate control message stats using monitor service
- Augment the control message class to have device id
- Initial implementation of accumulating control message stats
- Add more adpator for unit test
- Change Collection<ControlMessage> to Set<ControlMessage>
- Fix the arithmatic exception
- Fix some javadoc warnings
Change-Id: I2abaf0d91edca5419b26f1c5a69246bcdb9201bf
diff --git a/apps/cpman/api/src/main/java/org/onosproject/cpman/ControlMessage.java b/apps/cpman/api/src/main/java/org/onosproject/cpman/ControlMessage.java
index 8b6112e..eb0dcab 100644
--- a/apps/cpman/api/src/main/java/org/onosproject/cpman/ControlMessage.java
+++ b/apps/cpman/api/src/main/java/org/onosproject/cpman/ControlMessage.java
@@ -15,6 +15,8 @@
*/
package org.onosproject.cpman;
+import org.onosproject.net.DeviceId;
+
/**
* Abstraction of control message.
*/
@@ -33,6 +35,13 @@
Type type();
/**
+ * Returns the device identification.
+ *
+ * @return device identification
+ */
+ DeviceId deviceId();
+
+ /**
* Returns the latest control message load.
*
* @return control message load
@@ -56,7 +65,7 @@
/**
* Returns the time that this control message stats collected.
*
- * @return
+ * @return time stamp.
*/
- long timeStamp();
+ long timestamp();
}
diff --git a/apps/cpman/api/src/main/java/org/onosproject/cpman/ControlPlaneMonitorService.java b/apps/cpman/api/src/main/java/org/onosproject/cpman/ControlPlaneMonitorService.java
index f34e82b..051d1c7 100644
--- a/apps/cpman/api/src/main/java/org/onosproject/cpman/ControlPlaneMonitorService.java
+++ b/apps/cpman/api/src/main/java/org/onosproject/cpman/ControlPlaneMonitorService.java
@@ -78,6 +78,7 @@
/**
* Obtains a list of names of available resources.
*
+ * @param resourceType resource type
* @return a collection of names of available resources
*/
Set<String> availableResources(Type resourceType);
diff --git a/apps/cpman/api/src/main/java/org/onosproject/cpman/DefaultControlMessage.java b/apps/cpman/api/src/main/java/org/onosproject/cpman/DefaultControlMessage.java
index e63c0ee..a859cd5 100644
--- a/apps/cpman/api/src/main/java/org/onosproject/cpman/DefaultControlMessage.java
+++ b/apps/cpman/api/src/main/java/org/onosproject/cpman/DefaultControlMessage.java
@@ -15,34 +15,43 @@
*/
package org.onosproject.cpman;
+import org.onosproject.net.DeviceId;
+
+import java.util.Objects;
+
+import static com.google.common.base.MoreObjects.toStringHelper;
+
/**
* Default control message implementation.
*/
public class DefaultControlMessage implements ControlMessage {
private final Type type;
+ private final DeviceId deviceId;
private final long load;
private final long rate;
private final long count;
- private final long timeStamp;
+ private final long timestamp;
/**
* Generates a control message instance using given type and statistic
* information.
*
* @param type control message type
+ * @param deviceId device identification
* @param load control message load
* @param rate control message rate
* @param count control message count
- * @param timeStamp time stamp of the control message stats
+ * @param timestamp time stamp of the control message stats
*/
- public DefaultControlMessage(Type type, long load, long rate,
- long count, long timeStamp) {
+ public DefaultControlMessage(Type type, DeviceId deviceId, long load,
+ long rate, long count, long timestamp) {
this.type = type;
+ this.deviceId = deviceId;
this.load = load;
this.rate = rate;
this.count = count;
- this.timeStamp = timeStamp;
+ this.timestamp = timestamp;
}
@Override
@@ -51,6 +60,11 @@
}
@Override
+ public DeviceId deviceId() {
+ return deviceId;
+ }
+
+ @Override
public long load() {
return load;
}
@@ -66,7 +80,41 @@
}
@Override
- public long timeStamp() {
- return timeStamp;
+ public long timestamp() {
+ return timestamp;
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(type, deviceId.toString(), load, rate, count, timestamp);
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj instanceof DefaultControlMessage) {
+ final DefaultControlMessage other = (DefaultControlMessage) obj;
+ return Objects.equals(this.type, other.type) &&
+ Objects.equals(this.deviceId, other.deviceId) &&
+ Objects.equals(this.load, other.load) &&
+ Objects.equals(this.rate, other.rate) &&
+ Objects.equals(this.count, other.count) &&
+ Objects.equals(this.timestamp, other.timestamp);
+ }
+ return false;
+ }
+
+ @Override
+ public String toString() {
+ return toStringHelper(this)
+ .add("type", type)
+ .add("deviceId", deviceId.toString())
+ .add("load", load)
+ .add("rate", rate)
+ .add("count", count)
+ .add("timestamp", timestamp)
+ .toString();
}
}
diff --git a/apps/cpman/api/src/main/java/org/onosproject/cpman/MetricsDatabase.java b/apps/cpman/api/src/main/java/org/onosproject/cpman/MetricsDatabase.java
index 9d4ce08..54167b8 100644
--- a/apps/cpman/api/src/main/java/org/onosproject/cpman/MetricsDatabase.java
+++ b/apps/cpman/api/src/main/java/org/onosproject/cpman/MetricsDatabase.java
@@ -141,6 +141,7 @@
* Add a new metric to be monitored.
*
* @param metricType control metric type
+ * @return builder object
*/
Builder addMetricType(String metricType);
diff --git a/apps/cpman/api/src/main/java/org/onosproject/cpman/message/ControlMessageEvent.java b/apps/cpman/api/src/main/java/org/onosproject/cpman/message/ControlMessageEvent.java
index 83858be..40c3529 100644
--- a/apps/cpman/api/src/main/java/org/onosproject/cpman/message/ControlMessageEvent.java
+++ b/apps/cpman/api/src/main/java/org/onosproject/cpman/message/ControlMessageEvent.java
@@ -15,10 +15,10 @@
*/
package org.onosproject.cpman.message;
-import org.onosproject.event.AbstractEvent;
import org.onosproject.cpman.ControlMessage;
+import org.onosproject.event.AbstractEvent;
-import java.util.Collection;
+import java.util.Set;
import static com.google.common.base.MoreObjects.toStringHelper;
@@ -26,7 +26,7 @@
* Describes control message event.
*/
public class ControlMessageEvent
- extends AbstractEvent<ControlMessageEvent.Type, Collection<ControlMessage>> {
+ extends AbstractEvent<ControlMessageEvent.Type, Set<ControlMessage>> {
/**
* Type of control message events.
@@ -44,7 +44,7 @@
* @param type control message event type
* @param controlMessages event control message subject
*/
- public ControlMessageEvent(Type type, Collection<ControlMessage> controlMessages) {
+ public ControlMessageEvent(Type type, Set<ControlMessage> controlMessages) {
super(type, controlMessages);
}
diff --git a/apps/cpman/api/src/main/java/org/onosproject/cpman/message/ControlMessageProviderService.java b/apps/cpman/api/src/main/java/org/onosproject/cpman/message/ControlMessageProviderService.java
index 7a702c2..0472a2f 100644
--- a/apps/cpman/api/src/main/java/org/onosproject/cpman/message/ControlMessageProviderService.java
+++ b/apps/cpman/api/src/main/java/org/onosproject/cpman/message/ControlMessageProviderService.java
@@ -19,7 +19,7 @@
import org.onosproject.net.DeviceId;
import org.onosproject.net.provider.ProviderService;
-import java.util.Collection;
+import java.util.Set;
/**
* Service through which control message providers can inject control message
@@ -34,5 +34,5 @@
* @param deviceId device identifier
* @param controlMessages a collection of control message stats
*/
- void updateStatsInfo(DeviceId deviceId, Collection<ControlMessage> controlMessages);
+ void updateStatsInfo(DeviceId deviceId, Set<ControlMessage> controlMessages);
}
\ No newline at end of file
diff --git a/apps/cpman/api/src/main/java/org/onosproject/cpman/message/ControlMessageStore.java b/apps/cpman/api/src/main/java/org/onosproject/cpman/message/ControlMessageStore.java
index 8c6667a..32083b6 100644
--- a/apps/cpman/api/src/main/java/org/onosproject/cpman/message/ControlMessageStore.java
+++ b/apps/cpman/api/src/main/java/org/onosproject/cpman/message/ControlMessageStore.java
@@ -20,7 +20,7 @@
import org.onosproject.net.provider.ProviderId;
import org.onosproject.store.Store;
-import java.util.Collection;
+import java.util.Set;
/**
* Manages inventory of control message.
@@ -37,6 +37,6 @@
* @return ready to send event describing what occurred
*/
ControlMessageEvent updateStatsInfo(ProviderId providerId, DeviceId deviceId,
- Collection<ControlMessage> controlMessages);
+ Set<ControlMessage> controlMessages);
}
diff --git a/apps/cpman/api/src/test/java/org/onosproject/cpman/message/ControlMessageEventTest.java b/apps/cpman/api/src/test/java/org/onosproject/cpman/message/ControlMessageEventTest.java
index c504f5a..fc74892 100644
--- a/apps/cpman/api/src/test/java/org/onosproject/cpman/message/ControlMessageEventTest.java
+++ b/apps/cpman/api/src/test/java/org/onosproject/cpman/message/ControlMessageEventTest.java
@@ -15,36 +15,40 @@
*/
package org.onosproject.cpman.message;
+import com.google.common.collect.Sets;
import org.junit.Test;
import org.onosproject.cpman.ControlMessage;
import org.onosproject.cpman.DefaultControlMessage;
import org.onosproject.event.AbstractEventTest;
+import org.onosproject.net.DeviceId;
-import java.util.ArrayList;
-import java.util.Collection;
+import java.util.Set;
-import static org.onosproject.cpman.ControlMessage.Type.*;
+import static org.onosproject.cpman.ControlMessage.Type.INBOUND_PACKET;
+import static org.onosproject.cpman.ControlMessage.Type.OUTBOUND_PACKET;
/**
* Tests of the control message event.
*/
public class ControlMessageEventTest extends AbstractEventTest {
- private ControlMessage createControlMessage(ControlMessage.Type type) {
- return new DefaultControlMessage(type, 0L, 0L, 0L, 0L);
+ private ControlMessage createControlMessage(ControlMessage.Type type,
+ DeviceId deviceId) {
+ return new DefaultControlMessage(type, deviceId, 0L, 0L, 0L, 0L);
}
- private Collection<ControlMessage> createControlMessages() {
- Collection<ControlMessage> controlMessages = new ArrayList<>();
- controlMessages.add(createControlMessage(INBOUND_PACKET));
- controlMessages.add(createControlMessage(OUTBOUND_PACKET));
+ private Set<ControlMessage> createControlMessages() {
+ final DeviceId deviceId = DeviceId.deviceId("of:0000000000000001");
+ Set<ControlMessage> controlMessages = Sets.newConcurrentHashSet();
+ controlMessages.add(createControlMessage(INBOUND_PACKET, deviceId));
+ controlMessages.add(createControlMessage(OUTBOUND_PACKET, deviceId));
return controlMessages;
}
@Override
@Test
public void withoutTime() {
- Collection<ControlMessage> cms = createControlMessages();
+ Set<ControlMessage> cms = createControlMessages();
long before = System.currentTimeMillis();
ControlMessageEvent event =
new ControlMessageEvent(ControlMessageEvent.Type.STATS_UPDATE, cms);
diff --git a/apps/cpman/api/src/test/java/org/onosproject/cpman/message/ControlMessageServiceAdaptor.java b/apps/cpman/api/src/test/java/org/onosproject/cpman/message/ControlMessageServiceAdaptor.java
deleted file mode 100644
index 23976c4..0000000
--- a/apps/cpman/api/src/test/java/org/onosproject/cpman/message/ControlMessageServiceAdaptor.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Copyright 2016 Open Networking Laboratory
- *
- * Licensed 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.onosproject.cpman.message;
-
-/**
- * Test adapter for control message service.
- */
-public class ControlMessageServiceAdaptor implements ControlMessageService {
- @Override
- public void addListener(ControlMessageListener listener) {
- }
-
- @Override
- public void removeListener(ControlMessageListener listener) {
- }
-}
diff --git a/apps/cpman/api/src/test/java/org/onosproject/cpman/message/DefaultControlMessageTest.java b/apps/cpman/api/src/test/java/org/onosproject/cpman/message/DefaultControlMessageTest.java
index 1bc114f..9f4572e 100644
--- a/apps/cpman/api/src/test/java/org/onosproject/cpman/message/DefaultControlMessageTest.java
+++ b/apps/cpman/api/src/test/java/org/onosproject/cpman/message/DefaultControlMessageTest.java
@@ -17,6 +17,7 @@
import org.junit.Test;
import org.onosproject.cpman.DefaultControlMessage;
+import org.onosproject.net.DeviceId;
import static org.hamcrest.Matchers.is;
import static org.junit.Assert.assertThat;
@@ -42,12 +43,13 @@
*/
@Test
public void testBasic() {
+ final DeviceId deviceId = DeviceId.deviceId("of:0000000000000001");
final DefaultControlMessage cm =
- new DefaultControlMessage(INBOUND_PACKET, 0L, 1L, 2L, 3L);
+ new DefaultControlMessage(INBOUND_PACKET, deviceId, 0L, 1L, 2L, 3L);
assertThat(cm.type(), is(INBOUND_PACKET));
assertThat(cm.load(), is(0L));
assertThat(cm.rate(), is(1L));
assertThat(cm.count(), is(2L));
- assertThat(cm.timeStamp(), is(3L));
+ assertThat(cm.timestamp(), is(3L));
}
}