Add statistics to Map-Register cache 47/39347/2
authorLorand Jakab <lojakab@cisco.com>
Wed, 25 May 2016 17:47:23 +0000 (20:47 +0300)
committerLorand Jakab <lojakab@cisco.com>
Wed, 25 May 2016 17:47:23 +0000 (20:47 +0300)
Change-Id: Ifb35087d65f8acd0d4f249a01f15d3bb688ffec8
Signed-off-by: Lorand Jakab <lojakab@cisco.com>
mappingservice/api/src/main/yang/odl-lisp-sb.yang
mappingservice/southbound/src/main/java/org/opendaylight/lispflowmapping/southbound/LispSouthboundRPC.java
mappingservice/southbound/src/main/java/org/opendaylight/lispflowmapping/southbound/LispSouthboundStats.java
mappingservice/southbound/src/main/java/org/opendaylight/lispflowmapping/southbound/lisp/LispSouthboundHandler.java
mappingservice/southbound/src/test/java/org/opendaylight/lispflowmapping/southbound/lisp/LispSouthboundServiceTest.java

index 13f3cff607a6f18ee03d68a929da7aea882071b7..45a56e65b9d9333f91f5517d8b6e738b6fda3090 100644 (file)
@@ -42,6 +42,15 @@ module odl-lisp-sb {
         }
     }
 
+    grouping cache-stats {
+        leaf hits {
+            type int64;
+        }
+        leaf misses {
+            type int64;
+        }
+    }
+
     rpc send-map-request {
         input {
             uses lisp-proto:MapRequestMessage;
@@ -71,6 +80,9 @@ module odl-lisp-sb {
             container control-message-stats {
                 uses ctrl-msg-stats;
             }
+            container map-register-cache-stats {
+                uses cache-stats;
+            }
         }
     }
 
index 7aa397165b3f18b7bbc4b9520b51bf35086b5f4c..b423f0fef53066d5850ec854473859b6f1c9f5e2 100644 (file)
@@ -28,6 +28,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.sb.rev150904.SendM
 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.sb.rev150904.ctrl.msg.stats.ControlMessage;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.sb.rev150904.ctrl.msg.stats.ControlMessageBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.sb.rev150904.get.stats.output.ControlMessageStatsBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.sb.rev150904.get.stats.output.MapRegisterCacheStatsBuilder;
 import org.opendaylight.yangtools.yang.common.RpcError;
 import org.opendaylight.yangtools.yang.common.RpcResult;
 import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
@@ -165,6 +166,12 @@ public class LispSouthboundRPC implements OdlLispSbService {
         }
 
         cmsb.setControlMessage(messages);
-        return new GetStatsOutputBuilder().setControlMessageStats(cmsb.build()).build();
+
+        MapRegisterCacheStatsBuilder mrcsb = new MapRegisterCacheStatsBuilder();
+        mrcsb.setHits(stats.getCacheHits());
+        mrcsb.setMisses(stats.getCacheMisses());
+
+        return new GetStatsOutputBuilder().setControlMessageStats(cmsb.build())
+                .setMapRegisterCacheStats(mrcsb.build()).build();
     }
 }
index 3ab543da9e65629e97f0886bf50271ed78bce176..76f194d633bdd07baa4875db59b5f3f2ba01b3d7 100644 (file)
@@ -22,6 +22,8 @@ public class LispSouthboundStats {
     private long tx[] = new long[MAX_LISP_TYPES + 1];
     private long rxUnknown = 0;
     private long txErrors = 0;
+    private long cacheHits = 0;
+    private long cacheMisses = 0;
 
     public LispSouthboundStats() {
         resetStats();
@@ -66,6 +68,22 @@ public class LispSouthboundStats {
         this.txErrors = incrementWithWrap(txErrors);
     }
 
+    public long getCacheHits() {
+        return cacheHits;
+    }
+
+    public void incrementCacheHits() {
+        this.cacheHits = incrementWithWrap(cacheHits);
+    }
+
+    public long getCacheMisses() {
+        return cacheMisses;
+    }
+
+    public void incrementCacheMisses() {
+        this.cacheMisses = incrementWithWrap(cacheMisses);
+    }
+
     private static long incrementWithWrap(long value) {
         if (value == Long.MAX_VALUE) {
             return 0;
index 2a5f8fd400d791989e74d424f263f24d3d2fc7ba..49182246a1093802249307393be05765479386c0 100644 (file)
@@ -204,6 +204,7 @@ public class LispSouthboundHandler extends SimpleChannelInboundHandler<DatagramP
                 if (mapRegisterValue.isWantMapNotify()) {
                     sendMapNotifyMsg(inBuffer, sourceAddress, port, mapRegisterValue.getEidLispAddress());
                 }
+                lispSbStats.incrementCacheHits();
             } else {
                 MapRegister mapRegister = MapRegisterSerializer.getInstance().deserialize(inBuffer, sourceAddress);
                 if (isAuthenticationSuccessful(mapRegister, inBuffer)) {
@@ -232,6 +233,7 @@ public class LispSouthboundHandler extends SimpleChannelInboundHandler<DatagramP
                         mapRegisterCache.addEntry(cacheKey, cacheValueBldNew.build());
                     }
                 }
+                lispSbStats.incrementCacheMisses();
             }
         } catch (RuntimeException re) {
             throw new LispMalformedPacketException("Couldn't deserialize Map-Register (len="
index bcf7c42d61773320dd4e214947bd8403f80b9928..ac6c3d5e2710679a6f394bad7a2ab875d55c420b 100644 (file)
@@ -53,6 +53,7 @@ import org.opendaylight.lispflowmapping.lisp.util.MapNotifyBuilderHelper;
 import org.opendaylight.lispflowmapping.lisp.util.MaskUtil;
 import org.opendaylight.lispflowmapping.mapcache.SimpleMapCache;
 import org.opendaylight.lispflowmapping.southbound.LispSouthboundPlugin;
+import org.opendaylight.lispflowmapping.southbound.LispSouthboundStats;
 import org.opendaylight.lispflowmapping.southbound.lisp.cache.MapRegisterCache;
 import org.opendaylight.lispflowmapping.southbound.lisp.exception.LispMalformedPacketException;
 import org.opendaylight.lispflowmapping.tools.junit.BaseTestCase;
@@ -151,6 +152,7 @@ public class LispSouthboundServiceTest extends BaseTestCase {
         // mapResolver = context.mock(IMapResolver.class);
         // mapServer = context.mock(IMapServer.class);
         mockLispSouthboundPlugin = mock(LispSouthboundPlugin.class);
+        Mockito.when(mockLispSouthboundPlugin.getStats()).thenReturn(Mockito.mock(LispSouthboundStats.class));
         testedLispService = new LispSouthboundHandler(mockLispSouthboundPlugin);
         mapRegisterCache = new MapRegisterCache();
         testedLispService.setMapRegisterCache(mapRegisterCache);