From 3e4946f538604b1621b845c72e582f917c275275 Mon Sep 17 00:00:00 2001 From: Pawel Date: Wed, 27 Mar 2019 02:31:46 -0400 Subject: [PATCH] Added stopwatch filter Issue-ID: DMAAP-1109 Change-Id: I1738444ec9ce18768efdc9693c9669990660698f Signed-off-by: Pawel --- pom.xml | 8 ++- .../dbcapi/resources/RequestTimeLogFilter.java | 55 +++++++++++++++ .../dmaap/dbcapi/server/ApplicationConfig.java | 7 +- .../org/onap/dmaap/dbcapi/service/StopWatch.java | 64 ------------------ .../dbcapi/resources/RequestTimeLogFilterTest.java | 78 ++++++++++++++++++++++ .../onap/dmaap/dbcapi/service/StopWatchTest.java | 49 -------------- 6 files changed, 144 insertions(+), 117 deletions(-) create mode 100644 src/main/java/org/onap/dmaap/dbcapi/resources/RequestTimeLogFilter.java delete mode 100644 src/main/java/org/onap/dmaap/dbcapi/service/StopWatch.java create mode 100644 src/test/java/org/onap/dmaap/dbcapi/resources/RequestTimeLogFilterTest.java delete mode 100644 src/test/java/org/onap/dmaap/dbcapi/service/StopWatchTest.java diff --git a/pom.xml b/pom.xml index f78118d..fdc0cc5 100644 --- a/pom.xml +++ b/pom.xml @@ -347,7 +347,13 @@ org.glassfish.jersey.inject jersey-hk2 - + + pl.pragmatists + JUnitParams + 1.1.0 + test + + diff --git a/src/main/java/org/onap/dmaap/dbcapi/resources/RequestTimeLogFilter.java b/src/main/java/org/onap/dmaap/dbcapi/resources/RequestTimeLogFilter.java new file mode 100644 index 0000000..b2b98b6 --- /dev/null +++ b/src/main/java/org/onap/dmaap/dbcapi/resources/RequestTimeLogFilter.java @@ -0,0 +1,55 @@ +/*- + * ============LICENSE_START======================================================= + * org.onap.dmaap + * ================================================================================ + * Copyright (C) 2019 Nokia Intellectual Property. All rights reserved. + * ================================================================================ + * 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. + * ============LICENSE_END========================================================= + */ +package org.onap.dmaap.dbcapi.resources; + +import com.att.eelf.configuration.EELFLogger; +import java.time.Clock; +import javax.ws.rs.container.ContainerRequestContext; +import javax.ws.rs.container.ContainerRequestFilter; +import javax.ws.rs.container.ContainerResponseContext; +import javax.ws.rs.container.ContainerResponseFilter; +import org.onap.dmaap.dbcapi.logging.BaseLoggingClass; + +public class RequestTimeLogFilter extends BaseLoggingClass implements ContainerRequestFilter, ContainerResponseFilter { + + private final EELFLogger log; + private Clock clock; + + public RequestTimeLogFilter() { + this(auditLogger, Clock.systemDefaultZone()); + } + + RequestTimeLogFilter(EELFLogger logger, Clock clock) { + this.log = logger; + this.clock = clock; + } + + @Override + public void filter(ContainerRequestContext requestContext) { + requestContext.setProperty("start", clock.millis()); + } + + @Override + public void filter(ContainerRequestContext requestContext, ContainerResponseContext containerResponseContext) { + long startTime = (long) requestContext.getProperty("start"); + long elapsedTime = clock.millis() - startTime; + log.info("Request took {} ms", elapsedTime); + } +} diff --git a/src/main/java/org/onap/dmaap/dbcapi/server/ApplicationConfig.java b/src/main/java/org/onap/dmaap/dbcapi/server/ApplicationConfig.java index 2283ea2..2244b73 100644 --- a/src/main/java/org/onap/dmaap/dbcapi/server/ApplicationConfig.java +++ b/src/main/java/org/onap/dmaap/dbcapi/server/ApplicationConfig.java @@ -20,8 +20,8 @@ package org.onap.dmaap.dbcapi.server; import org.glassfish.jersey.server.ResourceConfig; - - +import org.onap.dmaap.dbcapi.resources.RequestTimeLogFilter; +import org.onap.dmaap.dbcapi.resources.AuthorizationFilter; public class ApplicationConfig extends ResourceConfig { @@ -30,7 +30,8 @@ public class ApplicationConfig extends ResourceConfig { */ public ApplicationConfig() { - register(org.onap.dmaap.dbcapi.resources.AuthorizationFilter.class); + register(AuthorizationFilter.class). + register(RequestTimeLogFilter.class); } } diff --git a/src/main/java/org/onap/dmaap/dbcapi/service/StopWatch.java b/src/main/java/org/onap/dmaap/dbcapi/service/StopWatch.java deleted file mode 100644 index 6dc8fe9..0000000 --- a/src/main/java/org/onap/dmaap/dbcapi/service/StopWatch.java +++ /dev/null @@ -1,64 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * org.onap.dmaap - * ================================================================================ - * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved. - * ================================================================================ - * 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. - * ============LICENSE_END========================================================= - */ -package org.onap.dmaap.dbcapi.service; - -import static com.att.eelf.configuration.Configuration.MDC_BEGIN_TIMESTAMP; -import static com.att.eelf.configuration.Configuration.MDC_ELAPSED_TIME; -import static com.att.eelf.configuration.Configuration.MDC_END_TIMESTAMP; - -import java.text.SimpleDateFormat; -import java.util.Date; -import java.util.TimeZone; -import org.slf4j.MDC; - - -public class StopWatch { - - private static final String ISO_FORMAT = "yyyy-MM-dd'T'HH:mm:ss.SSSZ"; - private final static SimpleDateFormat isoFormatter = new SimpleDateFormat(ISO_FORMAT); - private final static TimeZone utc = TimeZone.getTimeZone("UTC"); - - private long startTimestamp; - private long elapsedTime; - - static { - isoFormatter.setTimeZone(utc); - } - - public void start() { - startTimestamp = System.currentTimeMillis(); - MDC.put(MDC_BEGIN_TIMESTAMP, isoFormatter.format(new Date(startTimestamp))); - } - - public void stop() { - long endTimestamp = System.currentTimeMillis(); - elapsedTime = endTimestamp - startTimestamp; - MDC.put(MDC_END_TIMESTAMP, isoFormatter.format(new Date(endTimestamp))); - MDC.put(MDC_ELAPSED_TIME, String.valueOf(elapsedTime)); - } - - public void resetElapsedTime() { - elapsedTime = 0; - } - - public long getElapsedTime() { - return elapsedTime; - } -} diff --git a/src/test/java/org/onap/dmaap/dbcapi/resources/RequestTimeLogFilterTest.java b/src/test/java/org/onap/dmaap/dbcapi/resources/RequestTimeLogFilterTest.java new file mode 100644 index 0000000..0c88c0c --- /dev/null +++ b/src/test/java/org/onap/dmaap/dbcapi/resources/RequestTimeLogFilterTest.java @@ -0,0 +1,78 @@ +/*- + * ============LICENSE_START======================================================= + * org.onap.dmaap + * ================================================================================ + * Copyright (C) 2019 Nokia Intellectual Property. All rights reserved. + * ================================================================================ + * 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. + * ============LICENSE_END========================================================= + */ +package org.onap.dmaap.dbcapi.resources; + +import static org.junit.Assert.assertNotNull; +import static org.mockito.Matchers.anyString; +import static org.mockito.Matchers.eq; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; +import com.att.eelf.configuration.EELFLogger; +import java.time.Clock; +import java.time.Instant; +import java.time.ZoneId; +import javax.ws.rs.container.ContainerRequestContext; +import javax.ws.rs.container.ContainerResponseContext; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.runners.MockitoJUnitRunner; + +@RunWith(MockitoJUnitRunner.class) +public class RequestTimeLogFilterTest { + + private Clock clock ; + private RequestTimeLogFilter requestTimeLogFilter; + public static final long START = 1L; + @Mock + private ContainerRequestContext requestContext; + @Mock + private ContainerResponseContext responseContext; + @Mock + private EELFLogger logger; + + + @Before + public void setup() { + clock = Clock.fixed(Instant.parse("1970-01-01T00:00:10Z"), ZoneId.systemDefault()); + requestTimeLogFilter = new RequestTimeLogFilter(logger, clock); + } + + @Test + public void shouldHaveDefaultConstructor() { + assertNotNull(new RequestTimeLogFilter()); + } + + @Test + public void filterShouldSetStartTimestampProperty() { + requestTimeLogFilter.filter(requestContext); + verify(requestContext).setProperty("start",clock.millis()); + } + + @Test + public void filterShouldPrintElapsedTime() { + when(requestContext.getProperty("start")).thenReturn(START); + + requestTimeLogFilter.filter(requestContext, responseContext); + + verify(logger).info(anyString(),eq(clock.millis() - START)); + } +} \ No newline at end of file diff --git a/src/test/java/org/onap/dmaap/dbcapi/service/StopWatchTest.java b/src/test/java/org/onap/dmaap/dbcapi/service/StopWatchTest.java deleted file mode 100644 index b4b6af2..0000000 --- a/src/test/java/org/onap/dmaap/dbcapi/service/StopWatchTest.java +++ /dev/null @@ -1,49 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * org.onap.dmaap - * ================================================================================ - * Copyright (C) 2019 Nokia Intellectual Property. All rights reserved. - * ================================================================================ - * 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. - * ============LICENSE_END========================================================= - */ -package org.onap.dmaap.dbcapi.service; - -import static org.junit.Assert.assertThat; -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.assertEquals; -import org.junit.Test; -import org.onap.dmaap.dbcapi.logging.BaseLoggingClass; - -public class StopWatchTest extends BaseLoggingClass { - - private StopWatch stopWatch = new StopWatch(); - - @Test - public void stopWatchShouldReturnElapsedTime() throws InterruptedException { - stopWatch.start(); - Thread.sleep(50); - stopWatch.stop(); - assertTrue(stopWatch.getElapsedTime() > 0); - } - - @Test - public void resetShouldSetElapsedTime() { - stopWatch.start(); - stopWatch.stop(); - stopWatch.resetElapsedTime(); - assertEquals(0,stopWatch.getElapsedTime()); - - } - -} \ No newline at end of file -- 2.16.6