From f26ff841fe0cb5c56e8e9278a328dcb548e8e129 Mon Sep 17 00:00:00 2001 From: "bhavesh.kumar1" Date: Mon, 27 Apr 2015 09:48:44 +0530 Subject: [PATCH] Bug222:Comments incorporated for response based Restconf statistics Added response based restconf statistics which counts the reponse of get, put, post and delete on the success and failure response for config and operational datastore. Change-Id: If423da08e2c5793e68398beb69575b7cf214f57e Signed-off-by: bhavesh.kumar1 --- .../restconf/impl/RestconfProviderImpl.java | 23 ++- .../StatisticsRestconfServiceWrapper.java | 144 +++++++++++++++++- .../yang/opendaylight-rest-connector.yang | 12 ++ 3 files changed, 170 insertions(+), 9 deletions(-) diff --git a/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/restconf/impl/RestconfProviderImpl.java b/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/restconf/impl/RestconfProviderImpl.java index 84b092e10e..624d709c60 100644 --- a/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/restconf/impl/RestconfProviderImpl.java +++ b/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/restconf/impl/RestconfProviderImpl.java @@ -11,6 +11,7 @@ import java.math.BigInteger; import java.util.Collection; import java.util.Collections; import org.opendaylight.controller.config.yang.md.sal.rest.connector.Config; +import org.opendaylight.controller.config.yang.md.sal.rest.connector.Delete; import org.opendaylight.controller.config.yang.md.sal.rest.connector.Get; import org.opendaylight.controller.config.yang.md.sal.rest.connector.Operational; import org.opendaylight.controller.config.yang.md.sal.rest.connector.Post; @@ -78,15 +79,31 @@ public class RestconfProviderImpl implements Provider, AutoCloseable, RestConnec @Override public Config getConfig() { final Config config = new Config(); + final Get get = new Get(); get.setReceivedRequests(stats.getConfigGet()); + get.setSuccessfulResponses(stats.getSuccessGetConfig()); + get.setFailedResponses(stats.getFailureGetConfig()); config.setGet(get); + final Post post = new Post(); post.setReceivedRequests(stats.getConfigPost()); + post.setSuccessfulResponses(stats.getSuccessPost()); + post.setFailedResponses(stats.getFailurePost()); config.setPost(post); + final Put put = new Put(); put.setReceivedRequests(stats.getConfigPut()); + put.setSuccessfulResponses(stats.getSuccessPut()); + put.setFailedResponses(stats.getFailurePut()); config.setPut(put); + + final Delete delete = new Delete(); + delete.setReceivedRequests(stats.getConfigDelete()); + delete.setSuccessfulResponses(stats.getSuccessDelete()); + delete.setFailedResponses(stats.getFailureDelete()); + config.setDelete(delete); + return config; } @@ -96,6 +113,8 @@ public class RestconfProviderImpl implements Provider, AutoCloseable, RestConnec final Operational operational = new Operational(); final Get get = new Get(); get.setReceivedRequests(opGet); + get.setSuccessfulResponses(stats.getSuccessGetOperational()); + get.setFailedResponses(stats.getFailureGetOperational()); operational.setGet(get); return operational; } @@ -105,6 +124,6 @@ public class RestconfProviderImpl implements Provider, AutoCloseable, RestConnec final BigInteger rpcInvoke = stats.getRpc(); final Rpcs rpcs = new Rpcs(); rpcs.setReceivedRequests(rpcInvoke); - return rpcs ; + return rpcs; } -} +} \ No newline at end of file diff --git a/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/restconf/impl/StatisticsRestconfServiceWrapper.java b/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/restconf/impl/StatisticsRestconfServiceWrapper.java index 07178f5379..f4a5fbc926 100644 --- a/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/restconf/impl/StatisticsRestconfServiceWrapper.java +++ b/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/restconf/impl/StatisticsRestconfServiceWrapper.java @@ -10,6 +10,7 @@ package org.opendaylight.controller.sal.restconf.impl; import java.math.BigInteger; import java.util.concurrent.atomic.AtomicLong; import javax.ws.rs.core.Response; +import javax.ws.rs.core.Response.Status; import javax.ws.rs.core.UriInfo; import org.opendaylight.controller.sal.rest.api.RestconfService; @@ -21,6 +22,16 @@ public class StatisticsRestconfServiceWrapper implements RestconfService { AtomicLong configPost = new AtomicLong(); AtomicLong configPut = new AtomicLong(); AtomicLong configDelete = new AtomicLong(); + AtomicLong successGetConfig = new AtomicLong(); + AtomicLong successGetOperational = new AtomicLong(); + AtomicLong successPost = new AtomicLong(); + AtomicLong successPut = new AtomicLong(); + AtomicLong successDelete = new AtomicLong(); + AtomicLong failureGetConfig = new AtomicLong(); + AtomicLong failureGetOperational = new AtomicLong(); + AtomicLong failurePost = new AtomicLong(); + AtomicLong failurePut = new AtomicLong(); + AtomicLong failureDelete = new AtomicLong(); private static final StatisticsRestconfServiceWrapper INSTANCE = new StatisticsRestconfServiceWrapper(RestconfImpl.getInstance()); @@ -79,36 +90,115 @@ public class StatisticsRestconfServiceWrapper implements RestconfService { @Override public NormalizedNodeContext readConfigurationData(final String identifier, final UriInfo uriInfo) { configGet.incrementAndGet(); - return delegate.readConfigurationData(identifier, uriInfo); + NormalizedNodeContext normalizedNodeContext = null; + try { + normalizedNodeContext = delegate.readConfigurationData(identifier, uriInfo); + if (normalizedNodeContext.getData() != null) { + successGetConfig.incrementAndGet(); + } + else { + failureGetConfig.incrementAndGet(); + } + } catch (Exception e) { + failureGetConfig.incrementAndGet(); + throw e; + } + return normalizedNodeContext; } @Override public NormalizedNodeContext readOperationalData(final String identifier, final UriInfo uriInfo) { operationalGet.incrementAndGet(); - return delegate.readOperationalData(identifier, uriInfo); + NormalizedNodeContext normalizedNodeContext = null; + try { + normalizedNodeContext = delegate.readOperationalData(identifier, uriInfo); + if (normalizedNodeContext.getData() != null) { + successGetOperational.incrementAndGet(); + } + else { + failureGetOperational.incrementAndGet(); + } + } catch (Exception e) { + failureGetOperational.incrementAndGet(); + throw e; + } + return normalizedNodeContext; } @Override public Response updateConfigurationData(final String identifier, final NormalizedNodeContext payload) { configPut.incrementAndGet(); - return delegate.updateConfigurationData(identifier, payload); + Response response = null; + try { + response = delegate.updateConfigurationData(identifier, payload); + if (response.getStatus() == Status.OK.getStatusCode()) { + successPut.incrementAndGet(); + } + else { + failurePut.incrementAndGet(); + } + } catch (Exception e) { + failurePut.incrementAndGet(); + throw e; + } + return response; } @Override public Response createConfigurationData(final String identifier, final NormalizedNodeContext payload, final UriInfo uriInfo) { configPost.incrementAndGet(); - return delegate.createConfigurationData(identifier, payload, uriInfo); + Response response = null; + try { + response = delegate.createConfigurationData(identifier, payload, uriInfo); + if (response.getStatus() == Status.OK.getStatusCode()) { + successPost.incrementAndGet(); + } + else { + failurePost.incrementAndGet(); + } + } catch (Exception e) { + failurePost.incrementAndGet(); + throw e; + } + return response; } @Override public Response createConfigurationData(final NormalizedNodeContext payload, final UriInfo uriInfo) { configPost.incrementAndGet(); - return delegate.createConfigurationData(payload, uriInfo); + Response response = null; + try { + response = delegate.createConfigurationData(payload, uriInfo); + if (response.getStatus() == Status.OK.getStatusCode()) { + successPost.incrementAndGet(); + } + else { + failurePost.incrementAndGet(); + } + }catch (Exception e) { + failurePost.incrementAndGet(); + throw e; + } + return response; } @Override public Response deleteConfigurationData(final String identifier) { - return delegate.deleteConfigurationData(identifier); + configDelete.incrementAndGet(); + Response response = null; + try { + response = delegate.deleteConfigurationData(identifier); + if (response.getStatus() == Status.OK.getStatusCode()) { + successDelete.incrementAndGet(); + } + else { + failureDelete.incrementAndGet(); + } + } catch (Exception e) { + failureDelete.incrementAndGet(); + throw e; + } + return response; } @Override @@ -144,4 +234,44 @@ public class StatisticsRestconfServiceWrapper implements RestconfService { public BigInteger getRpc() { return BigInteger.valueOf(rpc.get()); } -} + + public BigInteger getSuccessGetConfig() { + return BigInteger.valueOf(successGetConfig.get()); + } + + public BigInteger getSuccessGetOperational() { + return BigInteger.valueOf(successGetOperational.get()); + } + + public BigInteger getSuccessPost() { + return BigInteger.valueOf(successPost.get()); + } + + public BigInteger getSuccessPut() { + return BigInteger.valueOf(successPut.get()); + } + + public BigInteger getSuccessDelete() { + return BigInteger.valueOf(successDelete.get()); + } + + public BigInteger getFailureGetConfig() { + return BigInteger.valueOf(failureGetConfig.get()); + } + + public BigInteger getFailureGetOperational() { + return BigInteger.valueOf(failureGetOperational.get()); + } + + public BigInteger getFailurePost() { + return BigInteger.valueOf(failurePost.get()); + } + + public BigInteger getFailurePut() { + return BigInteger.valueOf(failurePut.get()); + } + + public BigInteger getFailureDelete() { + return BigInteger.valueOf(failureDelete.get()); + } +} \ No newline at end of file diff --git a/opendaylight/md-sal/sal-rest-connector/src/main/yang/opendaylight-rest-connector.yang b/opendaylight/md-sal/sal-rest-connector/src/main/yang/opendaylight-rest-connector.yang index 6d2add6ff1..6fa9c86ec1 100644 --- a/opendaylight/md-sal/sal-rest-connector/src/main/yang/opendaylight-rest-connector.yang +++ b/opendaylight/md-sal/sal-rest-connector/src/main/yang/opendaylight-rest-connector.yang @@ -31,6 +31,14 @@ module opendaylight-rest-connector { leaf received-requests { type uint64; } + + leaf successful-responses { + type uint64; + } + + leaf failed-responses { + type uint64; + } } augment "/config:modules/config:module/config:configuration" { @@ -70,6 +78,10 @@ module opendaylight-rest-connector { container put { uses statistics; } + + container delete { + uses statistics; + } } container operational { -- 2.36.6