aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJim Hahn <jrh3@att.com>2021-07-30 14:54:35 -0400
committerJim Hahn <jrh3@att.com>2021-07-30 15:15:39 -0400
commit5636d8592b4c2b2190928ab7907463b099d55a7b (patch)
tree6e59b8158f07c4a2cf0be6e6970b8c890365166c
parentbc9b573f9ade4143e2aac9d5e578921de9383d42 (diff)
Add time ranges to PAP statistics API
Issue-ID: POLICY-3511 Change-Id: Ifc91e4732b3574da37f55658b23faf8a9f8091f5 Signed-off-by: Jim Hahn <jrh3@att.com>
-rw-r--r--main/src/main/java/org/onap/policy/pap/main/rest/StatisticsRestControllerV1.java59
-rw-r--r--main/src/test/java/org/onap/policy/pap/main/rest/e2e/StatisticsTest.java105
2 files changed, 127 insertions, 37 deletions
diff --git a/main/src/main/java/org/onap/policy/pap/main/rest/StatisticsRestControllerV1.java b/main/src/main/java/org/onap/policy/pap/main/rest/StatisticsRestControllerV1.java
index fb64b058..bd187dcb 100644
--- a/main/src/main/java/org/onap/policy/pap/main/rest/StatisticsRestControllerV1.java
+++ b/main/src/main/java/org/onap/policy/pap/main/rest/StatisticsRestControllerV1.java
@@ -29,6 +29,7 @@ import io.swagger.annotations.Authorization;
import io.swagger.annotations.Extension;
import io.swagger.annotations.ExtensionProperty;
import io.swagger.annotations.ResponseHeader;
+import java.time.Instant;
import java.util.Map;
import java.util.UUID;
import javax.ws.rs.GET;
@@ -110,11 +111,18 @@ public class StatisticsRestControllerV1 extends PapRestControllerV1 {
})
public Response pdpStatistics(
@HeaderParam(REQUEST_ID_NAME) @ApiParam(REQUEST_ID_PARAM_DESCRIPTION) final UUID requestId,
- @ApiParam(value = "Record Count", required = false) @QueryParam("recordCount") final int recordCount) {
+ @ApiParam(value = "Record Count", required = false) @QueryParam("recordCount") final int recordCount,
+ @ApiParam(value = "Start time in epoch timestamp",
+ required = false) @QueryParam("startTime") final Long startTime,
+ @ApiParam(value = "End time in epoch timestamp",
+ required = false) @QueryParam("endTime") final Long endTime) {
try {
return addLoggingHeaders(addVersionControlHeaders(Response.status(Response.Status.OK)), requestId)
- .entity(new StatisticsRestProvider().fetchDatabaseStatistics(
- PdpFilterParameters.builder().recordNum(recordCount).build()))
+ .entity(new StatisticsRestProvider().fetchDatabaseStatistics(PdpFilterParameters.builder()
+ .recordNum(recordCount)
+ .startTime(convertEpochtoInstant(startTime))
+ .endTime(convertEpochtoInstant(endTime))
+ .build()))
.build();
} catch (final PfModelException exp) {
LOGGER.info(GET_STATISTICS_ERR_MSG, exp);
@@ -160,11 +168,19 @@ public class StatisticsRestControllerV1 extends PapRestControllerV1 {
public Response pdpGroupStatistics(
@HeaderParam(REQUEST_ID_NAME) @ApiParam(REQUEST_ID_PARAM_DESCRIPTION) final UUID requestId,
@ApiParam(value = "PDP Group Name", required = true) @PathParam("group") final String groupName,
- @ApiParam(value = "Record Count", required = false) @QueryParam("recordCount") final int recordCount) {
+ @ApiParam(value = "Record Count", required = false) @QueryParam("recordCount") final int recordCount,
+ @ApiParam(value = "Start time in epoch timestamp",
+ required = false) @QueryParam("startTime") final Long startTime,
+ @ApiParam(value = "End time in epoch timestamp",
+ required = false) @QueryParam("endTime") final Long endTime) {
try {
return addLoggingHeaders(addVersionControlHeaders(Response.status(Response.Status.OK)), requestId)
.entity(new StatisticsRestProvider().fetchDatabaseStatistics(PdpFilterParameters.builder()
- .group(groupName).recordNum(recordCount).build()))
+ .group(groupName)
+ .recordNum(recordCount)
+ .startTime(convertEpochtoInstant(startTime))
+ .endTime(convertEpochtoInstant(endTime))
+ .build()))
.build();
} catch (final PfModelException exp) {
LOGGER.info(GET_STATISTICS_ERR_MSG, exp);
@@ -212,11 +228,20 @@ public class StatisticsRestControllerV1 extends PapRestControllerV1 {
@HeaderParam(REQUEST_ID_NAME) @ApiParam(REQUEST_ID_PARAM_DESCRIPTION) final UUID requestId,
@ApiParam(value = "PDP Group Name", required = true) @PathParam("group") final String groupName,
@ApiParam(value = "PDP SubGroup type", required = true) @PathParam("type") final String subType,
- @ApiParam(value = "Record Count", required = false) @QueryParam("recordCount") final int recordCount) {
+ @ApiParam(value = "Record Count", required = false) @QueryParam("recordCount") final int recordCount,
+ @ApiParam(value = "Start time in epoch timestamp",
+ required = false) @QueryParam("startTime") final Long startTime,
+ @ApiParam(value = "End time in epoch timestamp",
+ required = false) @QueryParam("endTime") final Long endTime) {
try {
return addLoggingHeaders(addVersionControlHeaders(Response.status(Response.Status.OK)), requestId)
.entity(new StatisticsRestProvider().fetchDatabaseStatistics(PdpFilterParameters.builder()
- .group(groupName).subGroup(subType).recordNum(recordCount).build()))
+ .group(groupName)
+ .subGroup(subType)
+ .recordNum(recordCount)
+ .startTime(convertEpochtoInstant(startTime))
+ .endTime(convertEpochtoInstant(endTime))
+ .build()))
.build();
} catch (final PfModelException exp) {
LOGGER.info(GET_STATISTICS_ERR_MSG, exp);
@@ -268,12 +293,22 @@ public class StatisticsRestControllerV1 extends PapRestControllerV1 {
@ApiParam(value = "PDP Group Name", required = true) @PathParam("group") final String groupName,
@ApiParam(value = "PDP SubGroup type", required = true) @PathParam("type") final String subType,
@ApiParam(value = "PDP Instance name", required = true) @PathParam("pdp") final String pdpName,
- @ApiParam(value = "Record Count", required = false) @QueryParam("recordCount") final int recordCount) {
+ @ApiParam(value = "Record Count", required = false) @QueryParam("recordCount") final int recordCount,
+ @ApiParam(value = "Start time in epoch timestamp",
+ required = false) @QueryParam("startTime") final Long startTime,
+ @ApiParam(value = "End time in epoch timestamp",
+ required = false) @QueryParam("endTime") final Long endTime) {
try {
return addLoggingHeaders(addVersionControlHeaders(Response.status(Response.Status.OK)), requestId)
.entity(new StatisticsRestProvider().fetchDatabaseStatistics(
- PdpFilterParameters.builder().group(groupName).subGroup(subType)
- .name(pdpName).recordNum(recordCount).build()))
+ PdpFilterParameters.builder()
+ .group(groupName)
+ .subGroup(subType)
+ .name(pdpName)
+ .recordNum(recordCount)
+ .startTime(convertEpochtoInstant(startTime))
+ .endTime(convertEpochtoInstant(endTime))
+ .build()))
.build();
} catch (final PfModelException exp) {
LOGGER.info(GET_STATISTICS_ERR_MSG, exp);
@@ -282,4 +317,8 @@ public class StatisticsRestControllerV1 extends PapRestControllerV1 {
.build();
}
}
+
+ private Instant convertEpochtoInstant(Long epochSecond) {
+ return (epochSecond == null ? null : Instant.ofEpochSecond(epochSecond));
+ }
}
diff --git a/main/src/test/java/org/onap/policy/pap/main/rest/e2e/StatisticsTest.java b/main/src/test/java/org/onap/policy/pap/main/rest/e2e/StatisticsTest.java
index 2f6cc3a1..0f1b560f 100644
--- a/main/src/test/java/org/onap/policy/pap/main/rest/e2e/StatisticsTest.java
+++ b/main/src/test/java/org/onap/policy/pap/main/rest/e2e/StatisticsTest.java
@@ -2,7 +2,7 @@
* ============LICENSE_START=======================================================
* ONAP PAP
* ================================================================================
- * Copyright (C) 2019-2020 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2019-2021 AT&T Intellectual Property. All rights reserved.
* Modifications Copyright (C) 2020-2021 Nordix Foundation.
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -21,16 +21,17 @@
package org.onap.policy.pap.main.rest.e2e;
+import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.Assert.assertEquals;
import java.net.HttpURLConnection;
import java.time.Instant;
-import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import javax.ws.rs.client.Invocation;
import javax.ws.rs.core.GenericType;
import javax.ws.rs.core.Response;
+import org.junit.BeforeClass;
import org.junit.Test;
import org.onap.policy.common.utils.services.Registry;
import org.onap.policy.models.base.PfModelException;
@@ -44,9 +45,39 @@ import org.onap.policy.pap.main.rest.StatisticsReport;
public class StatisticsTest extends End2EndBase {
private static final String STATISTICS_ENDPOINT = "statistics";
- private List<PdpStatistics> recordList = new ArrayList<>();
+ private static final String END_TIME_NAME = "endTime";
+ private static final String START_TIME_NAME = "startTime";
+ private static final long TIMESTAMP_SEC = 1562494272;
+ /**
+ * Adds a record to the DB.
+ */
+ @BeforeClass
+ public static void setUpBeforeClass() throws Exception {
+ End2EndBase.setUpBeforeClass();
+
+ PolicyModelsProviderFactoryWrapper modelProviderWrapper =
+ Registry.get(PapConstants.REG_PAP_DAO_FACTORY, PolicyModelsProviderFactoryWrapper.class);
+
+ try (PolicyModelsProvider databaseProvider = modelProviderWrapper.create()) {
+ PdpStatistics pdpStatisticsRecord = new PdpStatistics();
+ pdpStatisticsRecord.setPdpGroupName("defaultGroup");
+ pdpStatisticsRecord.setPdpSubGroupName("apex");
+ pdpStatisticsRecord.setPdpInstanceId("pdp1");
+ pdpStatisticsRecord.setTimeStamp(Instant.ofEpochSecond(TIMESTAMP_SEC));
+ pdpStatisticsRecord.setPolicyDeployCount(1);
+ pdpStatisticsRecord.setPolicyDeployFailCount(0);
+ pdpStatisticsRecord.setPolicyDeploySuccessCount(1);
+ pdpStatisticsRecord.setPolicyExecutedCount(1);
+ pdpStatisticsRecord.setPolicyExecutedFailCount(0);
+ pdpStatisticsRecord.setPolicyExecutedSuccessCount(1);
+ databaseProvider.createPdpStatistics(List.of(pdpStatisticsRecord));
+ } catch (final PfModelException exp) {
+ throw new PfModelRuntimeException(Response.Status.BAD_REQUEST, exp.getMessage());
+ }
+ }
+
@Test
public void test() throws Exception {
Invocation.Builder invocationBuilder = sendRequest(STATISTICS_ENDPOINT);
@@ -108,33 +139,30 @@ public class StatisticsTest extends End2EndBase {
mgr.updatePolicyDownloadFailureCount();
}
- private void setupEnv() {
- PolicyModelsProviderFactoryWrapper modelProviderWrapper =
- Registry.get(PapConstants.REG_PAP_DAO_FACTORY, PolicyModelsProviderFactoryWrapper.class);
-
- try (PolicyModelsProvider databaseProvider = modelProviderWrapper.create()) {
- PdpStatistics pdpStatisticsRecord = new PdpStatistics();
- pdpStatisticsRecord.setPdpGroupName("defaultGroup");
- pdpStatisticsRecord.setPdpSubGroupName("apex");
- pdpStatisticsRecord.setPdpInstanceId("pdp1");
- pdpStatisticsRecord.setTimeStamp(Instant.now());
- pdpStatisticsRecord.setPolicyDeployCount(1);
- pdpStatisticsRecord.setPolicyDeployFailCount(0);
- pdpStatisticsRecord.setPolicyDeploySuccessCount(1);
- pdpStatisticsRecord.setPolicyExecutedCount(1);
- pdpStatisticsRecord.setPolicyExecutedFailCount(0);
- pdpStatisticsRecord.setPolicyExecutedSuccessCount(1);
- recordList.add(pdpStatisticsRecord);
- databaseProvider.createPdpStatistics(recordList);
- } catch (final PfModelException exp) {
- throw new PfModelRuntimeException(Response.Status.BAD_REQUEST, exp.getMessage());
- }
- }
-
private void verifyResponse(String endpoint) throws Exception {
- setupEnv();
Invocation.Builder invocationBuilder = sendRequest(endpoint);
verifyResponse(invocationBuilder.get());
+
+ // repeat with "start", in range
+ invocationBuilder = sendRequest(addTimeParam(endpoint, START_TIME_NAME, TIMESTAMP_SEC));
+ verifyResponse(invocationBuilder.get());
+
+ // repeat with "end", in range
+ invocationBuilder = sendRequest(addTimeParam(endpoint, END_TIME_NAME, TIMESTAMP_SEC));
+ verifyResponse(invocationBuilder.get());
+
+ // repeat with "start" and "end", in range
+ invocationBuilder = sendRequest(addTimeParam(endpoint, START_TIME_NAME, TIMESTAMP_SEC - 1)
+ + "&" + END_TIME_NAME + "=" + TIMESTAMP_SEC + 1);
+ verifyResponse(invocationBuilder.get());
+
+ // repeat with "start", out of range
+ invocationBuilder = sendRequest(addTimeParam(endpoint, START_TIME_NAME, TIMESTAMP_SEC + 1));
+ verifyEmptyResponse(invocationBuilder.get());
+
+ // repeat with "end", out of range
+ invocationBuilder = sendRequest(addTimeParam(endpoint, END_TIME_NAME, TIMESTAMP_SEC - 1));
+ verifyEmptyResponse(invocationBuilder.get());
}
private void verifyResponse(Response testResponse) {
@@ -147,4 +175,27 @@ public class StatisticsTest extends End2EndBase {
assertEquals("apex", resRecord.get(0).getPdpSubGroupName());
assertEquals("defaultGroup", resRecord.get(0).getPdpGroupName());
}
+
+ private void verifyEmptyResponse(Response testResponse) {
+ assertEquals(Response.Status.OK.getStatusCode(), testResponse.getStatus());
+ Map<String, Map<String, List<PdpStatistics>>> map =
+ testResponse.readEntity(new GenericType<Map<String, Map<String, List<PdpStatistics>>>>() {});
+ assertThat(map).isEmpty();
+ }
+
+ /**
+ * Adds a timestamp parameter to an endpoint string.
+ * @param endpoint endpoint to which it should be added
+ * @param paramName parameter name
+ * @param timeSec time, in seconds
+ * @return the new endpoint, with the added parameter
+ */
+ private String addTimeParam(String endpoint, String paramName, long timeSec) {
+ StringBuilder builder = new StringBuilder(endpoint);
+ builder.append(endpoint.contains("?") ? '&' : '?');
+ builder.append(paramName);
+ builder.append('=');
+ builder.append(timeSec);
+ return builder.toString();
+ }
}