diff options
31 files changed, 1420 insertions, 435 deletions
diff --git a/main/pom.xml b/main/pom.xml index db306112..381d39f1 100644 --- a/main/pom.xml +++ b/main/pom.xml @@ -68,6 +68,15 @@ <artifactId>lombok</artifactId> <scope>provided</scope> </dependency> + <dependency> + <groupId>com.h2database</groupId> + <artifactId>h2</artifactId> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.mariadb.jdbc</groupId> + <artifactId>mariadb-java-client</artifactId> + </dependency> </dependencies> <build> diff --git a/main/src/main/java/org/onap/policy/api/main/parameters/ApiParameterGroup.java b/main/src/main/java/org/onap/policy/api/main/parameters/ApiParameterGroup.java index af12f016..9727b239 100644 --- a/main/src/main/java/org/onap/policy/api/main/parameters/ApiParameterGroup.java +++ b/main/src/main/java/org/onap/policy/api/main/parameters/ApiParameterGroup.java @@ -24,23 +24,28 @@ import org.onap.policy.common.parameters.GroupValidationResult; import org.onap.policy.common.parameters.ParameterGroup; import org.onap.policy.common.parameters.ValidationStatus; import org.onap.policy.common.utils.validation.ParameterValidationUtils; +import org.onap.policy.models.provider.PolicyModelsProviderParameters; /** * Class to hold all parameters needed for Api component. * */ public class ApiParameterGroup implements ParameterGroup { + private String name; private RestServerParameters restServerParameters; + private PolicyModelsProviderParameters databaseProviderParameters; /** * Create the api parameter group. * * @param name the parameter group name */ - public ApiParameterGroup(final String name, final RestServerParameters restServerParameters) { + public ApiParameterGroup(final String name, final RestServerParameters restServerParameters, + final PolicyModelsProviderParameters databaseProviderParameters) { this.name = name; this.restServerParameters = restServerParameters; + this.databaseProviderParameters = databaseProviderParameters; } /** @@ -73,6 +78,15 @@ public class ApiParameterGroup implements ParameterGroup { } /** + * Return the databaseProviderParameters of this parameter group instance. + * + * @return the databaseProviderParameters + */ + public PolicyModelsProviderParameters getDatabaseProviderParameters() { + return databaseProviderParameters; + } + + /** * Validate the parameter group. * * @return the result of the validation @@ -89,6 +103,12 @@ public class ApiParameterGroup implements ParameterGroup { } else { validationResult.setResult("restServerParameters", restServerParameters.validate()); } + if (databaseProviderParameters == null) { + validationResult.setResult("databaseProviderParameters", ValidationStatus.INVALID, + "must have databaseProviderParameters to configure api rest server"); + } else { + validationResult.setResult("databaseProviderParameters", databaseProviderParameters.validate()); + } return validationResult; } } diff --git a/main/src/main/java/org/onap/policy/api/main/rest/ApiRestController.java b/main/src/main/java/org/onap/policy/api/main/rest/ApiRestController.java index 0f68882f..500c5a89 100644 --- a/main/src/main/java/org/onap/policy/api/main/rest/ApiRestController.java +++ b/main/src/main/java/org/onap/policy/api/main/rest/ApiRestController.java @@ -36,6 +36,8 @@ import io.swagger.annotations.Info; import io.swagger.annotations.ResponseHeader;
import io.swagger.annotations.SecurityDefinition;
import io.swagger.annotations.SwaggerDefinition;
+import java.util.List;
+import java.util.Map;
import java.util.UUID;
import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
@@ -45,15 +47,18 @@ import javax.ws.rs.POST; import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
-import javax.ws.rs.QueryParam;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.ResponseBuilder;
+import org.apache.commons.lang3.tuple.Pair;
import org.onap.policy.api.main.rest.provider.HealthCheckProvider;
import org.onap.policy.api.main.rest.provider.PolicyProvider;
import org.onap.policy.api.main.rest.provider.PolicyTypeProvider;
import org.onap.policy.api.main.rest.provider.StatisticsProvider;
import org.onap.policy.common.endpoints.report.HealthCheckReport;
-import org.onap.policy.models.tosca.simple.concepts.ToscaServiceTemplate;
+import org.onap.policy.models.base.PfModelException;
+import org.onap.policy.models.base.PfModelRuntimeException;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
/**
* Class to provide REST API services.
@@ -126,6 +131,8 @@ public class ApiRestController { })
public Response getHealthCheck(
@HeaderParam("X-ONAP-RequestID") @ApiParam("RequestID for http transaction") UUID requestId) {
+
+ updateApiStatisticsCounter(Target.OTHER, Result.SUCCESS, HttpMethod.GET);
return addLoggingHeaders(addVersionControlHeaders(Response.status(Response.Status.OK)), requestId)
.entity(new HealthCheckProvider().performHealthCheck()).build();
}
@@ -172,6 +179,8 @@ public class ApiRestController { })
public Response getStatistics(
@HeaderParam("X-ONAP-RequestID") @ApiParam("RequestID for http transaction") UUID requestId) {
+
+ updateApiStatisticsCounter(Target.OTHER, Result.SUCCESS, HttpMethod.GET);
return addLoggingHeaders(addVersionControlHeaders(Response.status(Response.Status.OK)), requestId)
.entity(new StatisticsProvider().fetchCurrentStatistics()).build();
}
@@ -218,8 +227,18 @@ public class ApiRestController { })
public Response getAllPolicyTypes(
@HeaderParam("X-ONAP-RequestID") @ApiParam("RequestID for http transaction") UUID requestId) {
- return addLoggingHeaders(addVersionControlHeaders(Response.status(Response.Status.OK)), requestId)
- .entity(new PolicyTypeProvider().fetchPolicyTypes(null, null)).build();
+
+ try {
+ ToscaServiceTemplate serviceTemplate = new PolicyTypeProvider().fetchPolicyTypes(null, null);
+ updateApiStatisticsCounter(Target.POLICY_TYPE, Result.SUCCESS, HttpMethod.GET);
+ return addLoggingHeaders(addVersionControlHeaders(Response.status(Response.Status.OK)), requestId)
+ .entity(serviceTemplate).build();
+ } catch (PfModelException | PfModelRuntimeException pfme) {
+ updateApiStatisticsCounter(Target.POLICY_TYPE, Result.FAILURE, HttpMethod.GET);
+ return addLoggingHeaders(addVersionControlHeaders(
+ Response.status(pfme.getErrorResponse().getResponseCode())), requestId)
+ .entity(pfme.getErrorResponse()).build();
+ }
}
/**
@@ -268,8 +287,19 @@ public class ApiRestController { public Response getAllVersionsOfPolicyType(
@PathParam("policyTypeId") @ApiParam(value = "ID of policy type", required = true) String policyTypeId,
@HeaderParam("X-ONAP-RequestID") @ApiParam("RequestID for http transaction") UUID requestId) {
- return addLoggingHeaders(addVersionControlHeaders(Response.status(Response.Status.OK)), requestId)
- .entity(new PolicyTypeProvider().fetchPolicyTypes(policyTypeId, null)).build();
+
+ try {
+ ToscaServiceTemplate serviceTemplate = new PolicyTypeProvider()
+ .fetchPolicyTypes(policyTypeId, null);
+ updateApiStatisticsCounter(Target.POLICY_TYPE, Result.SUCCESS, HttpMethod.GET);
+ return addLoggingHeaders(addVersionControlHeaders(Response.status(Response.Status.OK)), requestId)
+ .entity(serviceTemplate).build();
+ } catch (PfModelException | PfModelRuntimeException pfme) {
+ updateApiStatisticsCounter(Target.POLICY_TYPE, Result.FAILURE, HttpMethod.GET);
+ return addLoggingHeaders(addVersionControlHeaders(
+ Response.status(pfme.getErrorResponse().getResponseCode())), requestId)
+ .entity(pfme.getErrorResponse()).build();
+ }
}
/**
@@ -320,8 +350,19 @@ public class ApiRestController { @PathParam("policyTypeId") @ApiParam(value = "ID of policy type", required = true) String policyTypeId,
@PathParam("versionId") @ApiParam(value = "Version of policy type", required = true) String versionId,
@HeaderParam("X-ONAP-RequestID") @ApiParam("RequestID for http transaction") UUID requestId) {
- return addLoggingHeaders(addVersionControlHeaders(Response.status(Response.Status.OK)), requestId)
- .entity(new PolicyTypeProvider().fetchPolicyTypes(policyTypeId, versionId)).build();
+
+ try {
+ ToscaServiceTemplate serviceTemplate = new PolicyTypeProvider()
+ .fetchPolicyTypes(policyTypeId, versionId);
+ updateApiStatisticsCounter(Target.POLICY_TYPE, Result.SUCCESS, HttpMethod.GET);
+ return addLoggingHeaders(addVersionControlHeaders(Response.status(Response.Status.OK)), requestId)
+ .entity(serviceTemplate).build();
+ } catch (PfModelException | PfModelRuntimeException pfme) {
+ updateApiStatisticsCounter(Target.POLICY_TYPE, Result.FAILURE, HttpMethod.GET);
+ return addLoggingHeaders(addVersionControlHeaders(
+ Response.status(pfme.getErrorResponse().getResponseCode())), requestId)
+ .entity(pfme.getErrorResponse()).build();
+ }
}
/**
@@ -370,33 +411,37 @@ public class ApiRestController { public Response createPolicyType(
@ApiParam(value = "Entity body of policy type", required = true) ToscaServiceTemplate body,
@HeaderParam("X-ONAP-RequestID") @ApiParam("RequestID for http transaction") UUID requestId) {
- return addLoggingHeaders(addVersionControlHeaders(Response.status(Response.Status.OK)), requestId)
- .entity(new PolicyTypeProvider().createPolicyType(body)).build();
+
+ try {
+ ToscaServiceTemplate serviceTemplate = new PolicyTypeProvider().createPolicyType(body);
+ updateApiStatisticsCounter(Target.POLICY_TYPE, Result.SUCCESS, HttpMethod.POST);
+ return addLoggingHeaders(addVersionControlHeaders(Response.status(Response.Status.OK)), requestId)
+ .entity(serviceTemplate).build();
+ } catch (PfModelException | PfModelRuntimeException pfme) {
+ updateApiStatisticsCounter(Target.POLICY_TYPE, Result.FAILURE, HttpMethod.POST);
+ return addLoggingHeaders(addVersionControlHeaders(
+ Response.status(pfme.getErrorResponse().getResponseCode())), requestId)
+ .entity(pfme.getErrorResponse()).build();
+ }
}
/**
- * Deletes all versions of a particular policy type.
+ * Deletes specified version of a particular policy type.
*
* @param policyTypeId the ID of specified policy type
+ * @param versionId the version of specified policy type
*
* @return the Response object containing the results of the API operation
*/
@DELETE
- @Path("/policytypes/{policyTypeId}")
- @ApiOperation(value = "Delete all versions of a policy type",
+ @Path("/policytypes/{policyTypeId}/versions/{versionId}")
+ @ApiOperation(value = "Delete one version of a policy type",
notes = "Rule 1: pre-defined policy types cannot be deleted;"
+ "Rule 2: policy types that are in use (parameterized by a TOSCA policy) cannot be deleted."
+ "The parameterizing TOSCA policies must be deleted first;",
authorizations = @Authorization(value = "basicAuth"),
tags = { "PolicyType", },
- extensions = {
- @Extension(name = "interface info", properties = {
- @ExtensionProperty(name = "api-version", value = "1.0.0"),
- @ExtensionProperty(name = "last-mod-release", value = "Dublin")
- })
- })
- @ApiResponses(value = {
- @ApiResponse(code = 204, message = "Resources successfully deleted, no content returned",
+ response = ToscaServiceTemplate.class,
responseHeaders = {
@ResponseHeader(name = "X-MinorVersion",
description = "Used to request or communicate a MINOR version back from the client"
@@ -413,36 +458,7 @@ public class ApiRestController { @ResponseHeader(name = "X-ONAP-RequestID",
description = "Used to track REST transactions for logging purpose",
response = UUID.class)
- }),
- @ApiResponse(code = 401, message = "Authentication Error"),
- @ApiResponse(code = 403, message = "Authorization Error"),
- @ApiResponse(code = 404, message = "Resource Not Found"),
- @ApiResponse(code = 409, message = "Delete Conflict, Rule Violation"),
- @ApiResponse(code = 500, message = "Internal Server Error")
- })
- public Response deleteAllVersionsOfPolicyType(
- @PathParam("policyTypeId") @ApiParam(value = "ID of policy type", required = true) String policyTypeId,
- @HeaderParam("X-ONAP-RequestID") @ApiParam("RequestID for http transaction") UUID requestId) {
- return addLoggingHeaders(addVersionControlHeaders(Response.status(Response.Status.OK)), requestId)
- .entity(new PolicyTypeProvider().deletePolicyTypes(policyTypeId, null)).build();
- }
-
- /**
- * Deletes specified version of a particular policy type.
- *
- * @param policyTypeId the ID of specified policy type
- * @param versionId the version of specified policy type
- *
- * @return the Response object containing the results of the API operation
- */
- @DELETE
- @Path("/policytypes/{policyTypeId}/versions/{versionId}")
- @ApiOperation(value = "Delete one version of a policy type",
- notes = "Rule 1: pre-defined policy types cannot be deleted;"
- + "Rule 2: policy types that are in use (parameterized by a TOSCA policy) cannot be deleted."
- + "The parameterizing TOSCA policies must be deleted first;",
- authorizations = @Authorization(value = "basicAuth"),
- tags = { "PolicyType", },
+ },
extensions = {
@Extension(name = "interface info", properties = {
@ExtensionProperty(name = "api-version", value = "1.0.0"),
@@ -450,24 +466,6 @@ public class ApiRestController { })
})
@ApiResponses(value = {
- @ApiResponse(code = 204, message = "Resource successfully deleted, no content returned",
- responseHeaders = {
- @ResponseHeader(name = "X-MinorVersion",
- description = "Used to request or communicate a MINOR version back from the client"
- + " to the server, and from the server back to the client",
- response = String.class),
- @ResponseHeader(name = "X-PatchVersion",
- description = "Used only to communicate a PATCH version in a response for"
- + " troubleshooting purposes only, and will not be provided by"
- + " the client on request",
- response = String.class),
- @ResponseHeader(name = "X-LatestVersion",
- description = "Used only to communicate an API's latest version",
- response = String.class),
- @ResponseHeader(name = "X-ONAP-RequestID",
- description = "Used to track REST transactions for logging purpose",
- response = UUID.class)
- }),
@ApiResponse(code = 401, message = "Authentication Error"),
@ApiResponse(code = 403, message = "Authorization Error"),
@ApiResponse(code = 404, message = "Resource Not Found"),
@@ -478,8 +476,17 @@ public class ApiRestController { @PathParam("policyTypeId") @ApiParam(value = "ID of policy type", required = true) String policyTypeId,
@PathParam("versionId") @ApiParam(value = "Version of policy type", required = true) String versionId,
@HeaderParam("X-ONAP-RequestID") @ApiParam("RequestID for http transaction") UUID requestId) {
- return addLoggingHeaders(addVersionControlHeaders(Response.status(Response.Status.OK)), requestId)
- .entity(new PolicyTypeProvider().deletePolicyTypes(policyTypeId, versionId)).build();
+
+ try {
+ ToscaServiceTemplate serviceTemplate = new PolicyTypeProvider()
+ .deletePolicyType(policyTypeId, versionId);
+ return addLoggingHeaders(addVersionControlHeaders(Response.status(Response.Status.OK)), requestId)
+ .entity(serviceTemplate).build();
+ } catch (PfModelException | PfModelRuntimeException pfme) {
+ return addLoggingHeaders(addVersionControlHeaders(
+ Response.status(pfme.getErrorResponse().getResponseCode())), requestId)
+ .entity(pfme.getErrorResponse()).build();
+ }
}
/**
@@ -531,8 +538,19 @@ public class ApiRestController { @PathParam("policyTypeVersion")
@ApiParam(value = "Version of policy type", required = true) String policyTypeVersion,
@HeaderParam("X-ONAP-RequestID") @ApiParam("RequestID for http transaction") UUID requestId) {
- return addLoggingHeaders(addVersionControlHeaders(Response.status(Response.Status.OK)), requestId)
- .entity(new PolicyProvider().fetchPolicies(policyTypeId, policyTypeVersion, null, null)).build();
+
+ try {
+ ToscaServiceTemplate serviceTemplate = new PolicyProvider()
+ .fetchPolicies(policyTypeId, policyTypeVersion, null, null);
+ updateApiStatisticsCounter(Target.POLICY, Result.SUCCESS, HttpMethod.GET);
+ return addLoggingHeaders(addVersionControlHeaders(Response.status(Response.Status.OK)), requestId)
+ .entity(serviceTemplate).build();
+ } catch (PfModelException | PfModelRuntimeException pfme) {
+ updateApiStatisticsCounter(Target.POLICY, Result.FAILURE, HttpMethod.GET);
+ return addLoggingHeaders(addVersionControlHeaders(
+ Response.status(pfme.getErrorResponse().getResponseCode())), requestId)
+ .entity(pfme.getErrorResponse()).build();
+ }
}
/**
@@ -586,8 +604,19 @@ public class ApiRestController { @ApiParam(value = "Version of policy type", required = true) String policyTypeVersion,
@PathParam("policyId") @ApiParam(value = "ID of policy", required = true) String policyId,
@HeaderParam("X-ONAP-RequestID") @ApiParam("RequestID for http transaction") UUID requestId) {
- return addLoggingHeaders(addVersionControlHeaders(Response.status(Response.Status.OK)), requestId)
- .entity(new PolicyProvider().fetchPolicies(policyTypeId, policyTypeVersion, policyId, null)).build();
+
+ try {
+ ToscaServiceTemplate serviceTemplate = new PolicyProvider()
+ .fetchPolicies(policyTypeId, policyTypeVersion, policyId, null);
+ updateApiStatisticsCounter(Target.POLICY, Result.SUCCESS, HttpMethod.GET);
+ return addLoggingHeaders(addVersionControlHeaders(Response.status(Response.Status.OK)), requestId)
+ .entity(serviceTemplate).build();
+ } catch (PfModelException | PfModelRuntimeException pfme) {
+ updateApiStatisticsCounter(Target.POLICY, Result.FAILURE, HttpMethod.GET);
+ return addLoggingHeaders(addVersionControlHeaders(
+ Response.status(pfme.getErrorResponse().getResponseCode())), requestId)
+ .entity(pfme.getErrorResponse()).build();
+ }
}
/**
@@ -643,13 +672,23 @@ public class ApiRestController { @PathParam("policyId") @ApiParam(value = "ID of policy", required = true) String policyId,
@PathParam("policyVersion") @ApiParam(value = "Version of policy", required = true) String policyVersion,
@HeaderParam("X-ONAP-RequestID") @ApiParam("RequestID for http transaction") UUID requestId) {
- return addLoggingHeaders(addVersionControlHeaders(Response.status(Response.Status.OK)), requestId)
- .entity(new PolicyProvider().fetchPolicies(policyTypeId, policyTypeVersion,
- policyId, policyVersion)).build();
+
+ try {
+ ToscaServiceTemplate serviceTemplate = new PolicyProvider()
+ .fetchPolicies(policyTypeId, policyTypeVersion, policyId, policyVersion);
+ updateApiStatisticsCounter(Target.POLICY, Result.SUCCESS, HttpMethod.GET);
+ return addLoggingHeaders(addVersionControlHeaders(Response.status(Response.Status.OK)), requestId)
+ .entity(serviceTemplate).build();
+ } catch (PfModelException | PfModelRuntimeException pfme) {
+ updateApiStatisticsCounter(Target.POLICY, Result.FAILURE, HttpMethod.GET);
+ return addLoggingHeaders(addVersionControlHeaders(
+ Response.status(pfme.getErrorResponse().getResponseCode())), requestId)
+ .entity(pfme.getErrorResponse()).build();
+ }
}
/**
- * Retrieves either latest or deployed version of a particular policy depending on query parameter.
+ * Retrieves the latest version of a particular policy.
*
* @param policyTypeId the ID of specified policy type
* @param policyTypeVersion the version of specified policy type
@@ -658,9 +697,9 @@ public class ApiRestController { * @return the Response object containing the results of the API operation
*/
@GET
- @Path("/policytypes/{policyTypeId}/versions/{policyTypeVersion}/policies/{policyId}/versions")
- @ApiOperation(value = "Retrieve either latest or deployed version of a particular policy depending on query param",
- notes = "Returns either latest or deployed version of specified policy depending on query param",
+ @Path("/policytypes/{policyTypeId}/versions/{policyTypeVersion}/policies/{policyId}/latest")
+ @ApiOperation(value = "Retrieve the latest version of a particular policy",
+ notes = "Returns the latest version of specified policy",
response = ToscaServiceTemplate.class,
responseHeaders = {
@ResponseHeader(name = "X-MinorVersion",
@@ -693,34 +732,41 @@ public class ApiRestController { @ApiResponse(code = 404, message = "Resource Not Found"),
@ApiResponse(code = 500, message = "Internal Server Error")
})
- public Response getEitherLatestOrDeployedVersionOfPolicy(
+ public Response getLatestVersionOfPolicy(
@PathParam("policyTypeId") @ApiParam(value = "ID of policy type", required = true) String policyTypeId,
@PathParam("policyTypeVersion")
@ApiParam(value = "Version of policy type", required = true) String policyTypeVersion,
@PathParam("policyId") @ApiParam(value = "ID of policy", required = true) String policyId,
- @QueryParam("type")
- @ApiParam(value = "Version that can only be 'latest' or 'deployed'", required = true) String type,
@HeaderParam("X-ONAP-RequestID") @ApiParam("RequestID for http transaction") UUID requestId) {
- return addLoggingHeaders(addVersionControlHeaders(Response.status(Response.Status.OK)), requestId)
- .entity(new PolicyProvider().fetchPolicies(policyTypeId, policyTypeVersion, policyId, type)).build();
+
+ try {
+ ToscaServiceTemplate serviceTemplate =
+ new PolicyProvider().fetchLatestPolicies(policyTypeId, policyTypeVersion, policyId);
+ updateApiStatisticsCounter(Target.POLICY, Result.SUCCESS, HttpMethod.GET);
+ return addLoggingHeaders(addVersionControlHeaders(Response.status(Response.Status.OK)), requestId)
+ .entity(serviceTemplate).build();
+ } catch (PfModelException | PfModelRuntimeException pfme) {
+ updateApiStatisticsCounter(Target.POLICY, Result.FAILURE, HttpMethod.GET);
+ return addLoggingHeaders(addVersionControlHeaders(
+ Response.status(pfme.getErrorResponse().getResponseCode())), requestId)
+ .entity(pfme.getErrorResponse()).build();
+ }
}
/**
- * Creates a new policy for a particular policy type and version.
+ * Retrieves deployed versions of a particular policy in pdp groups.
*
* @param policyTypeId the ID of specified policy type
* @param policyTypeVersion the version of specified policy type
- * @param body the body of policy following TOSCA definition
+ * @param policyId the ID of specified policy
*
* @return the Response object containing the results of the API operation
*/
- @POST
- @Path("/policytypes/{policyTypeId}/versions/{policyTypeVersion}/policies")
- @ApiOperation(value = "Create a new policy for a policy type version",
- notes = "Client should provide TOSCA body of the new policy",
- authorizations = @Authorization(value = "basicAuth"),
- tags = { "Policy", },
- response = ToscaServiceTemplate.class,
+ @GET
+ @Path("/policytypes/{policyTypeId}/versions/{policyTypeVersion}/policies/{policyId}/deployed")
+ @ApiOperation(value = "Retrieve deployed versions of a particular policy in pdp groups",
+ notes = "Returns deployed versions of specified policy in pdp groups",
+ response = ToscaPolicy.class, responseContainer = "List",
responseHeaders = {
@ResponseHeader(name = "X-MinorVersion",
description = "Used to request or communicate a MINOR version back from the client"
@@ -738,6 +784,8 @@ public class ApiRestController { description = "Used to track REST transactions for logging purpose",
response = UUID.class)
},
+ authorizations = @Authorization(value = "basicAuth"),
+ tags = { "Policy", },
extensions = {
@Extension(name = "interface info", properties = {
@ExtensionProperty(name = "api-version", value = "1.0.0"),
@@ -745,45 +793,48 @@ public class ApiRestController { })
})
@ApiResponses(value = {
- @ApiResponse(code = 400, message = "Invalid Body"),
@ApiResponse(code = 401, message = "Authentication Error"),
@ApiResponse(code = 403, message = "Authorization Error"),
@ApiResponse(code = 404, message = "Resource Not Found"),
@ApiResponse(code = 500, message = "Internal Server Error")
})
- public Response createPolicy(
+ public Response getDeployedVersionsOfPolicy(
@PathParam("policyTypeId") @ApiParam(value = "ID of policy type", required = true) String policyTypeId,
@PathParam("policyTypeVersion")
@ApiParam(value = "Version of policy type", required = true) String policyTypeVersion,
- @HeaderParam("X-ONAP-RequestID") @ApiParam("RequestID for http transaction") UUID requestId,
- @ApiParam(value = "Entity body of policy", required = true) ToscaServiceTemplate body) {
- return addLoggingHeaders(addVersionControlHeaders(Response.status(Response.Status.OK)), requestId)
- .entity(new PolicyProvider().createPolicy(policyTypeId, policyTypeVersion, body)).build();
+ @PathParam("policyId") @ApiParam(value = "ID of policy", required = true) String policyId,
+ @HeaderParam("X-ONAP-RequestID") @ApiParam("RequestID for http transaction") UUID requestId) {
+
+ try {
+ Map<Pair<String, String>, List<ToscaPolicy>> deployedPolicies = new PolicyProvider()
+ .fetchDeployedPolicies(policyTypeId, policyTypeVersion, policyId);
+ updateApiStatisticsCounter(Target.POLICY, Result.SUCCESS, HttpMethod.GET);
+ return addLoggingHeaders(addVersionControlHeaders(Response.status(Response.Status.OK)), requestId)
+ .entity(deployedPolicies).build();
+ } catch (PfModelException | PfModelRuntimeException pfme) {
+ updateApiStatisticsCounter(Target.POLICY, Result.FAILURE, HttpMethod.GET);
+ return addLoggingHeaders(addVersionControlHeaders(
+ Response.status(pfme.getErrorResponse().getResponseCode())), requestId)
+ .entity(pfme.getErrorResponse()).build();
+ }
}
/**
- * Deletes all versions of a particular policy.
+ * Creates a new policy for a particular policy type and version.
*
* @param policyTypeId the ID of specified policy type
* @param policyTypeVersion the version of specified policy type
- * @param policyId the ID of specified policy
+ * @param body the body of policy following TOSCA definition
*
* @return the Response object containing the results of the API operation
*/
- @DELETE
- @Path("/policytypes/{policyTypeId}/versions/{policyTypeVersion}/policies/{policyId}")
- @ApiOperation(value = "Delete all versions of a policy",
- notes = "Rule: the version that has been deployed in PDP group(s) cannot be deleted",
+ @POST
+ @Path("/policytypes/{policyTypeId}/versions/{policyTypeVersion}/policies")
+ @ApiOperation(value = "Create a new policy for a policy type version",
+ notes = "Client should provide TOSCA body of the new policy",
authorizations = @Authorization(value = "basicAuth"),
tags = { "Policy", },
- extensions = {
- @Extension(name = "interface info", properties = {
- @ExtensionProperty(name = "api-version", value = "1.0.0"),
- @ExtensionProperty(name = "last-mod-release", value = "Dublin")
- })
- })
- @ApiResponses(value = {
- @ApiResponse(code = 204, message = "Resources successfully deleted, no content returned",
+ response = ToscaServiceTemplate.class,
responseHeaders = {
@ResponseHeader(name = "X-MinorVersion",
description = "Used to request or communicate a MINOR version back from the client"
@@ -800,21 +851,39 @@ public class ApiRestController { @ResponseHeader(name = "X-ONAP-RequestID",
description = "Used to track REST transactions for logging purpose",
response = UUID.class)
- }),
+ },
+ extensions = {
+ @Extension(name = "interface info", properties = {
+ @ExtensionProperty(name = "api-version", value = "1.0.0"),
+ @ExtensionProperty(name = "last-mod-release", value = "Dublin")
+ })
+ })
+ @ApiResponses(value = {
+ @ApiResponse(code = 400, message = "Invalid Body"),
@ApiResponse(code = 401, message = "Authentication Error"),
@ApiResponse(code = 403, message = "Authorization Error"),
@ApiResponse(code = 404, message = "Resource Not Found"),
- @ApiResponse(code = 409, message = "Delete Conflict, Rule Violation"),
@ApiResponse(code = 500, message = "Internal Server Error")
})
- public Response deleteAllVersionsOfPolicy(
+ public Response createPolicy(
@PathParam("policyTypeId") @ApiParam(value = "ID of policy type", required = true) String policyTypeId,
@PathParam("policyTypeVersion")
@ApiParam(value = "Version of policy type", required = true) String policyTypeVersion,
- @PathParam("policyId") @ApiParam(value = "ID of policy", required = true) String policyId,
- @HeaderParam("X-ONAP-RequestID") @ApiParam("RequestID for http transaction") UUID requestId) {
- return addLoggingHeaders(addVersionControlHeaders(Response.status(Response.Status.OK)), requestId)
- .entity(new PolicyProvider().deletePolicies(policyTypeId, policyTypeVersion, policyId, null)).build();
+ @HeaderParam("X-ONAP-RequestID") @ApiParam("RequestID for http transaction") UUID requestId,
+ @ApiParam(value = "Entity body of policy", required = true) ToscaServiceTemplate body) {
+
+ try {
+ ToscaServiceTemplate serviceTemplate = new PolicyProvider()
+ .createPolicy(policyTypeId, policyTypeVersion, body);
+ updateApiStatisticsCounter(Target.POLICY, Result.SUCCESS, HttpMethod.POST);
+ return addLoggingHeaders(addVersionControlHeaders(Response.status(Response.Status.OK)), requestId)
+ .entity(serviceTemplate).build();
+ } catch (PfModelException | PfModelRuntimeException pfme) {
+ updateApiStatisticsCounter(Target.POLICY, Result.FAILURE, HttpMethod.POST);
+ return addLoggingHeaders(addVersionControlHeaders(
+ Response.status(pfme.getErrorResponse().getResponseCode())), requestId)
+ .entity(pfme.getErrorResponse()).build();
+ }
}
/**
@@ -833,14 +902,7 @@ public class ApiRestController { notes = "Rule: the version that has been deployed in PDP group(s) cannot be deleted",
authorizations = @Authorization(value = "basicAuth"),
tags = { "Policy", },
- extensions = {
- @Extension(name = "interface info", properties = {
- @ExtensionProperty(name = "api-version", value = "1.0.0"),
- @ExtensionProperty(name = "last-mod-release", value = "Dublin")
- })
- })
- @ApiResponses(value = {
- @ApiResponse(code = 204, message = "Resource successfully deleted, no content returned",
+ response = ToscaServiceTemplate.class,
responseHeaders = {
@ResponseHeader(name = "X-MinorVersion",
description = "Used to request or communicate a MINOR version back from the client"
@@ -857,7 +919,14 @@ public class ApiRestController { @ResponseHeader(name = "X-ONAP-RequestID",
description = "Used to track REST transactions for logging purpose",
response = UUID.class)
- }),
+ },
+ extensions = {
+ @Extension(name = "interface info", properties = {
+ @ExtensionProperty(name = "api-version", value = "1.0.0"),
+ @ExtensionProperty(name = "last-mod-release", value = "Dublin")
+ })
+ })
+ @ApiResponses(value = {
@ApiResponse(code = 401, message = "Authentication Error"),
@ApiResponse(code = 403, message = "Authorization Error"),
@ApiResponse(code = 404, message = "Resource Not Found"),
@@ -871,9 +940,17 @@ public class ApiRestController { @PathParam("policyId") @ApiParam(value = "ID of policy", required = true) String policyId,
@PathParam("policyVersion") @ApiParam(value = "Version of policy", required = true) String policyVersion,
@HeaderParam("X-ONAP-RequestID") @ApiParam("RequestID for http transaction") UUID requestId) {
- return addLoggingHeaders(addVersionControlHeaders(Response.status(Response.Status.OK)), requestId)
- .entity(new PolicyProvider().deletePolicies(policyTypeId, policyTypeVersion,
- policyId, policyVersion)).build();
+
+ try {
+ ToscaServiceTemplate serviceTemplate = new PolicyProvider()
+ .deletePolicy(policyTypeId, policyTypeVersion, policyId, policyVersion);
+ return addLoggingHeaders(addVersionControlHeaders(Response.status(Response.Status.OK)), requestId)
+ .entity(serviceTemplate).build();
+ } catch (PfModelException | PfModelRuntimeException pfme) {
+ return addLoggingHeaders(addVersionControlHeaders(
+ Response.status(pfme.getErrorResponse().getResponseCode())), requestId)
+ .entity(pfme.getErrorResponse()).build();
+ }
}
private ResponseBuilder addVersionControlHeaders(ResponseBuilder rb) {
@@ -887,4 +964,68 @@ public class ApiRestController { }
return rb.header("X-ONAP-RequestID", requestId);
}
+
+ private enum Target {
+ POLICY, POLICY_TYPE, OTHER
+ }
+
+ private enum Result {
+ SUCCESS, FAILURE
+ }
+
+ private enum HttpMethod {
+ POST, GET
+ }
+
+ private void updateApiStatisticsCounter(Target target, Result result, HttpMethod http) {
+
+ ApiStatisticsManager.updateTotalApiCallCount();
+ if (target == Target.POLICY) {
+ if (result == Result.SUCCESS) {
+ if (http == HttpMethod.GET) {
+ ApiStatisticsManager.updateApiCallSuccessCount();
+ ApiStatisticsManager.updateTotalPolicyGetCount();
+ ApiStatisticsManager.updatePolicyGetSuccessCount();
+ } else if (http == HttpMethod.POST) {
+ ApiStatisticsManager.updateApiCallSuccessCount();
+ ApiStatisticsManager.updateTotalPolicyPostCount();
+ ApiStatisticsManager.updatePolicyPostSuccessCount();
+ }
+ } else {
+ if (http == HttpMethod.GET) {
+ ApiStatisticsManager.updateApiCallFailureCount();
+ ApiStatisticsManager.updateTotalPolicyGetCount();
+ ApiStatisticsManager.updatePolicyGetFailureCount();
+ } else {
+ ApiStatisticsManager.updateApiCallFailureCount();
+ ApiStatisticsManager.updateTotalPolicyPostCount();
+ ApiStatisticsManager.updatePolicyPostFailureCount();
+ }
+ }
+ } else if (target == Target.POLICY_TYPE) {
+ if (result == Result.SUCCESS) {
+ if (http == HttpMethod.GET) {
+ ApiStatisticsManager.updateApiCallSuccessCount();
+ ApiStatisticsManager.updateTotalPolicyTypeGetCount();
+ ApiStatisticsManager.updatePolicyTypeGetSuccessCount();
+ } else if (http == HttpMethod.POST) {
+ ApiStatisticsManager.updateApiCallSuccessCount();
+ ApiStatisticsManager.updatePolicyTypePostSuccessCount();
+ ApiStatisticsManager.updatePolicyTypePostSuccessCount();
+ }
+ } else {
+ if (http == HttpMethod.GET) {
+ ApiStatisticsManager.updateApiCallFailureCount();
+ ApiStatisticsManager.updateTotalPolicyTypeGetCount();
+ ApiStatisticsManager.updatePolicyTypeGetFailureCount();
+ } else {
+ ApiStatisticsManager.updateApiCallFailureCount();
+ ApiStatisticsManager.updateTotalPolicyTypePostCount();
+ ApiStatisticsManager.updatePolicyTypePostFailureCount();
+ }
+ }
+ } else {
+ ApiStatisticsManager.updateApiCallSuccessCount();
+ }
+ }
}
\ No newline at end of file diff --git a/main/src/main/java/org/onap/policy/api/main/rest/ApiRestServer.java b/main/src/main/java/org/onap/policy/api/main/rest/ApiRestServer.java index 46ec34d7..2a7b0cef 100644 --- a/main/src/main/java/org/onap/policy/api/main/rest/ApiRestServer.java +++ b/main/src/main/java/org/onap/policy/api/main/rest/ApiRestServer.java @@ -31,7 +31,7 @@ import org.onap.policy.api.main.rest.aaf.AafApiFilter; import org.onap.policy.common.capabilities.Startable; import org.onap.policy.common.endpoints.http.server.HttpServletServer; import org.onap.policy.common.endpoints.properties.PolicyEndPointProperties; -import org.onap.policy.models.tosca.simple.serialization.ToscaServiceTemplateMessageBodyHandler; +import org.onap.policy.common.gson.GsonMessageBodyHandler; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -105,7 +105,7 @@ public class ApiRestServer implements Startable { props.setProperty(svcpfx + PolicyEndPointProperties.PROPERTY_AAF_SUFFIX, String.valueOf(restServerParameters.isAaf())); props.setProperty(svcpfx + PolicyEndPointProperties.PROPERTY_HTTP_SERIALIZATION_PROVIDER, - ToscaServiceTemplateMessageBodyHandler.class.getName()); + GsonMessageBodyHandler.class.getName()); return props; } diff --git a/main/src/main/java/org/onap/policy/api/main/rest/LegacyApiRestController.java b/main/src/main/java/org/onap/policy/api/main/rest/LegacyApiRestController.java index 8e00b436..38736e85 100644 --- a/main/src/main/java/org/onap/policy/api/main/rest/LegacyApiRestController.java +++ b/main/src/main/java/org/onap/policy/api/main/rest/LegacyApiRestController.java @@ -31,6 +31,7 @@ import io.swagger.annotations.Authorization; import io.swagger.annotations.Extension; import io.swagger.annotations.ExtensionProperty; import io.swagger.annotations.ResponseHeader; +import java.util.Map; import java.util.UUID; import javax.ws.rs.Consumes; import javax.ws.rs.DELETE; @@ -44,9 +45,11 @@ import javax.ws.rs.core.Response; import javax.ws.rs.core.Response.ResponseBuilder; import org.onap.policy.api.main.rest.provider.LegacyGuardPolicyProvider; import org.onap.policy.api.main.rest.provider.LegacyOperationalPolicyProvider; -import org.onap.policy.models.tosca.legacy.concepts.LegacyGuardPolicy; +import org.onap.policy.models.base.PfModelException; +import org.onap.policy.models.base.PfModelRuntimeException; +import org.onap.policy.models.tosca.legacy.concepts.LegacyGuardPolicyInput; +import org.onap.policy.models.tosca.legacy.concepts.LegacyGuardPolicyOutput; import org.onap.policy.models.tosca.legacy.concepts.LegacyOperationalPolicy; -import org.onap.policy.models.tosca.simple.concepts.ToscaServiceTemplate; /** * Class to provide legacy REST API services. @@ -69,7 +72,7 @@ public class LegacyApiRestController { @Produces("application/json; vnd.onap.guard") @ApiOperation(value = "Retrieve all versions of guard policies", notes = "Returns a list of all versions of guard policies", - response = ToscaServiceTemplate.class, + response = LegacyGuardPolicyOutput.class, responseContainer = "Map", responseHeaders = { @ResponseHeader(name = "X-MinorVersion", description = "Used to request or communicate a MINOR version back from the client" @@ -102,8 +105,17 @@ public class LegacyApiRestController { }) public Response getAllGuardPolicies( @HeaderParam("X-ONAP-RequestID") @ApiParam("RequestID for http transaction") UUID requestId) { - return addLoggingHeaders(addVersionControlHeaders(Response.status(Response.Status.OK)), requestId) - .entity(new LegacyGuardPolicyProvider().fetchGuardPolicies(null, null)).build(); + + try { + Map<String, LegacyGuardPolicyOutput> policies = new LegacyGuardPolicyProvider() + .fetchGuardPolicies(null, null); + return addLoggingHeaders(addVersionControlHeaders(Response.status(Response.Status.OK)), requestId) + .entity(policies).build(); + } catch (PfModelException | PfModelRuntimeException pfme) { + return addLoggingHeaders(addVersionControlHeaders( + Response.status(pfme.getErrorResponse().getResponseCode())), requestId) + .entity(pfme.getErrorResponse()).build(); + } } /** @@ -118,7 +130,7 @@ public class LegacyApiRestController { @Produces("application/json; vnd.onap.guard") @ApiOperation(value = "Retrieve all versions of a particular guard policy", notes = "Returns a list of all versions of the specified guard policy", - response = ToscaServiceTemplate.class, + response = LegacyGuardPolicyOutput.class, responseContainer = "Map", responseHeaders = { @ResponseHeader(name = "X-MinorVersion", description = "Used to request or communicate a MINOR version back from the client" @@ -153,8 +165,17 @@ public class LegacyApiRestController { public Response getAllVersionsOfGuardPolicy( @PathParam("policyId") @ApiParam(value = "ID of policy", required = true) String policyId, @HeaderParam("X-ONAP-RequestID") @ApiParam("RequestID for http transaction") UUID requestId) { - return addLoggingHeaders(addVersionControlHeaders(Response.status(Response.Status.OK)), requestId) - .entity(new LegacyGuardPolicyProvider().fetchGuardPolicies(policyId, null)).build(); + + try { + Map<String, LegacyGuardPolicyOutput> policies = new LegacyGuardPolicyProvider() + .fetchGuardPolicies(policyId, null); + return addLoggingHeaders(addVersionControlHeaders(Response.status(Response.Status.OK)), requestId) + .entity(policies).build(); + } catch (PfModelException | PfModelRuntimeException pfme) { + return addLoggingHeaders(addVersionControlHeaders( + Response.status(pfme.getErrorResponse().getResponseCode())), requestId) + .entity(pfme.getErrorResponse()).build(); + } } /** @@ -170,7 +191,7 @@ public class LegacyApiRestController { @Produces("application/json; vnd.onap.guard") @ApiOperation(value = "Retrieve one version of a particular guard policy", notes = "Returns a particular version of a specified guard policy", - response = ToscaServiceTemplate.class, + response = LegacyGuardPolicyOutput.class, responseContainer = "Map", responseHeaders = { @ResponseHeader(name = "X-MinorVersion", description = "Used to request or communicate a MINOR version back from the client" @@ -206,8 +227,17 @@ public class LegacyApiRestController { @PathParam("policyId") @ApiParam(value = "ID of policy", required = true) String policyId, @PathParam("policyVersion") @ApiParam(value = "Version of policy", required = true) String policyVersion, @HeaderParam("X-ONAP-RequestID") @ApiParam("RequestID for http transaction") UUID requestId) { - return addLoggingHeaders(addVersionControlHeaders(Response.status(Response.Status.OK)), requestId) - .entity(new LegacyGuardPolicyProvider().fetchGuardPolicies(policyId, policyVersion)).build(); + + try { + Map<String, LegacyGuardPolicyOutput> policies = new LegacyGuardPolicyProvider() + .fetchGuardPolicies(policyId, policyVersion); + return addLoggingHeaders(addVersionControlHeaders(Response.status(Response.Status.OK)), requestId) + .entity(policies).build(); + } catch (PfModelException | PfModelRuntimeException pfme) { + return addLoggingHeaders(addVersionControlHeaders( + Response.status(pfme.getErrorResponse().getResponseCode())), requestId) + .entity(pfme.getErrorResponse()).build(); + } } /** @@ -225,7 +255,7 @@ public class LegacyApiRestController { notes = "Client should provide entity body of the new guard policy", authorizations = @Authorization(value = "basicAuth"), tags = { "Legacy Guard Policy", }, - response = ToscaServiceTemplate.class, + response = LegacyGuardPolicyOutput.class, responseContainer = "Map", responseHeaders = { @ResponseHeader(name = "X-MinorVersion", description = "Used to request or communicate a MINOR version back from the client" @@ -257,32 +287,35 @@ public class LegacyApiRestController { }) public Response createGuardPolicy( @HeaderParam("X-ONAP-RequestID") @ApiParam("RequestID for http transaction") UUID requestId, - @ApiParam(value = "Entity body of policy", required = true) LegacyGuardPolicy body) { - return addLoggingHeaders(addVersionControlHeaders(Response.status(Response.Status.OK)), requestId) - .entity(new LegacyGuardPolicyProvider().createGuardPolicy(body)).build(); + @ApiParam(value = "Entity body of policy", required = true) LegacyGuardPolicyInput body) { + + try { + Map<String, LegacyGuardPolicyOutput> policy = new LegacyGuardPolicyProvider().createGuardPolicy(body); + return addLoggingHeaders(addVersionControlHeaders(Response.status(Response.Status.OK)), requestId) + .entity(policy).build(); + } catch (PfModelException | PfModelRuntimeException pfme) { + return addLoggingHeaders(addVersionControlHeaders( + Response.status(pfme.getErrorResponse().getResponseCode())), requestId) + .entity(pfme.getErrorResponse()).build(); + } } /** - * Deletes all versions of a particular guard policy. + * Deletes the specified version of a particular guard policy. * * @param policyId the ID of specified policy + * @param policyVersion the version of specified policy * * @return the Response object containing the results of the API operation */ @DELETE - @Path("/policytypes/onap.policy.controlloop.guard/versions/1.0.0/policies/{policyId}") - @ApiOperation(value = "Delete all versions of a guard policy", + @Path("/policytypes/onap.policy.controlloop.guard/versions/1.0.0/policies/{policyId}/versions/{policyVersion}") + @Produces("application/json; vnd.onap.guard") + @ApiOperation(value = "Delete a particular version of a guard policy", notes = "Rule: the version that has been deployed in PDP group(s) cannot be deleted", authorizations = @Authorization(value = "basicAuth"), tags = { "Legacy Guard Policy", }, - extensions = { - @Extension(name = "interface info", properties = { - @ExtensionProperty(name = "api-version", value = "1.0.0"), - @ExtensionProperty(name = "last-mod-release", value = "Dublin") - }) - }) - @ApiResponses(value = { - @ApiResponse(code = 204, message = "Resources successfully deleted, no content returned", + response = LegacyGuardPolicyOutput.class, responseContainer = "Map", responseHeaders = { @ResponseHeader(name = "X-MinorVersion", description = "Used to request or communicate a MINOR version back from the client" @@ -299,34 +332,7 @@ public class LegacyApiRestController { @ResponseHeader(name = "X-ONAP-RequestID", description = "Used to track REST transactions for logging purpose", response = UUID.class) - }), - @ApiResponse(code = 401, message = "Authentication Error"), - @ApiResponse(code = 403, message = "Authorization Error"), - @ApiResponse(code = 404, message = "Resource Not Found"), - @ApiResponse(code = 409, message = "Delete Conflict, Rule Violation"), - @ApiResponse(code = 500, message = "Internal Server Error") - }) - public Response deleteAllVersionsOfGuardPolicy( - @PathParam("policyId") @ApiParam(value = "ID of policy", required = true) String policyId, - @HeaderParam("X-ONAP-RequestID") @ApiParam("RequestID for http transaction") UUID requestId) { - return addLoggingHeaders(addVersionControlHeaders(Response.status(Response.Status.OK)), requestId) - .entity(new LegacyGuardPolicyProvider().deleteGuardPolicies(policyId, null)).build(); - } - - /** - * Deletes the specified version of a particular guard policy. - * - * @param policyId the ID of specified policy - * @param policyVersion the version of specified policy - * - * @return the Response object containing the results of the API operation - */ - @DELETE - @Path("/policytypes/onap.policy.controlloop.guard/versions/1.0.0/policies/{policyId}/versions/{policyVersion}") - @ApiOperation(value = "Delete a particular version of a guard policy", - notes = "Rule: the version that has been deployed in PDP group(s) cannot be deleted", - authorizations = @Authorization(value = "basicAuth"), - tags = { "Legacy Guard Policy", }, + }, extensions = { @Extension(name = "interface info", properties = { @ExtensionProperty(name = "api-version", value = "1.0.0"), @@ -334,24 +340,6 @@ public class LegacyApiRestController { }) }) @ApiResponses(value = { - @ApiResponse(code = 204, message = "Resource successfully deleted, no content returned", - responseHeaders = { - @ResponseHeader(name = "X-MinorVersion", - description = "Used to request or communicate a MINOR version back from the client" - + " to the server, and from the server back to the client", - response = String.class), - @ResponseHeader(name = "X-PatchVersion", - description = "Used only to communicate a PATCH version in a response for" - + " troubleshooting purposes only, and will not be provided by" - + " the client on request", - response = String.class), - @ResponseHeader(name = "X-LatestVersion", - description = "Used only to communicate an API's latest version", - response = String.class), - @ResponseHeader(name = "X-ONAP-RequestID", - description = "Used to track REST transactions for logging purpose", - response = UUID.class) - }), @ApiResponse(code = 401, message = "Authentication Error"), @ApiResponse(code = 403, message = "Authorization Error"), @ApiResponse(code = 404, message = "Resource Not Found"), @@ -362,8 +350,17 @@ public class LegacyApiRestController { @PathParam("policyId") @ApiParam(value = "ID of policy", required = true) String policyId, @PathParam("policyVersion") @ApiParam(value = "Version of policy", required = true) String policyVersion, @HeaderParam("X-ONAP-RequestID") @ApiParam("RequestID for http transaction") UUID requestId) { - return addLoggingHeaders(addVersionControlHeaders(Response.status(Response.Status.OK)), requestId) - .entity(new LegacyGuardPolicyProvider().deleteGuardPolicies(policyId, policyVersion)).build(); + + try { + Map<String, LegacyGuardPolicyOutput> policies = new LegacyGuardPolicyProvider() + .deleteGuardPolicies(policyId, policyVersion); + return addLoggingHeaders(addVersionControlHeaders(Response.status(Response.Status.OK)), requestId) + .entity(policies).build(); + } catch (PfModelException | PfModelRuntimeException pfme) { + return addLoggingHeaders(addVersionControlHeaders( + Response.status(pfme.getErrorResponse().getResponseCode())), requestId) + .entity(pfme.getErrorResponse()).build(); + } } /** @@ -376,7 +373,7 @@ public class LegacyApiRestController { @Produces("application/json; vnd.onap.operational") @ApiOperation(value = "Retrieve all versions of operational policies", notes = "Returns a list of all versions of operational policies", - response = ToscaServiceTemplate.class, + response = LegacyOperationalPolicy.class, responseHeaders = { @ResponseHeader(name = "X-MinorVersion", description = "Used to request or communicate a MINOR version back from the client" @@ -409,8 +406,17 @@ public class LegacyApiRestController { }) public Response getAllOperationalPolicies( @HeaderParam("X-ONAP-RequestID") @ApiParam("RequestID for http transaction") UUID requestId) { - return addLoggingHeaders(addVersionControlHeaders(Response.status(Response.Status.OK)), requestId) - .entity(new LegacyOperationalPolicyProvider().fetchOperationalPolicies(null, null)).build(); + + try { + LegacyOperationalPolicy policy = new LegacyOperationalPolicyProvider() + .fetchOperationalPolicies(null, null); + return addLoggingHeaders(addVersionControlHeaders(Response.status(Response.Status.OK)), requestId) + .entity(policy).build(); + } catch (PfModelException | PfModelRuntimeException pfme) { + return addLoggingHeaders(addVersionControlHeaders( + Response.status(pfme.getErrorResponse().getResponseCode())), requestId) + .entity(pfme.getErrorResponse()).build(); + } } /** @@ -425,7 +431,7 @@ public class LegacyApiRestController { @Produces("application/json; vnd.onap.operational") @ApiOperation(value = "Retrieve all versions of a particular operational policy", notes = "Returns a list of all versions of the specified operational policy", - response = ToscaServiceTemplate.class, + response = LegacyOperationalPolicy.class, responseHeaders = { @ResponseHeader(name = "X-MinorVersion", description = "Used to request or communicate a MINOR version back from the client" @@ -460,8 +466,17 @@ public class LegacyApiRestController { public Response getAllVersionsOfOperationalPolicy( @PathParam("policyId") @ApiParam(value = "ID of policy", required = true) String policyId, @HeaderParam("X-ONAP-RequestID") @ApiParam("RequestID for http transaction") UUID requestId) { - return addLoggingHeaders(addVersionControlHeaders(Response.status(Response.Status.OK)), requestId) - .entity(new LegacyOperationalPolicyProvider().fetchOperationalPolicies(policyId, null)).build(); + + try { + LegacyOperationalPolicy policy = new LegacyOperationalPolicyProvider() + .fetchOperationalPolicies(policyId, null); + return addLoggingHeaders(addVersionControlHeaders(Response.status(Response.Status.OK)), requestId) + .entity(policy).build(); + } catch (PfModelException | PfModelRuntimeException pfme) { + return addLoggingHeaders(addVersionControlHeaders( + Response.status(pfme.getErrorResponse().getResponseCode())), requestId) + .entity(pfme.getErrorResponse()).build(); + } } /** @@ -478,7 +493,7 @@ public class LegacyApiRestController { @Produces("application/json; vnd.onap.operational") @ApiOperation(value = "Retrieve one version of a particular operational policy", notes = "Returns a particular version of a specified operational policy", - response = ToscaServiceTemplate.class, + response = LegacyOperationalPolicy.class, responseHeaders = { @ResponseHeader(name = "X-MinorVersion", description = "Used to request or communicate a MINOR version back from the client" @@ -514,8 +529,17 @@ public class LegacyApiRestController { @PathParam("policyId") @ApiParam(value = "ID of policy", required = true) String policyId, @PathParam("policyVersion") @ApiParam(value = "Version of policy", required = true) String policyVersion, @HeaderParam("X-ONAP-RequestID") @ApiParam("RequestID for http transaction") UUID requestId) { - return addLoggingHeaders(addVersionControlHeaders(Response.status(Response.Status.OK)), requestId) - .entity(new LegacyOperationalPolicyProvider().fetchOperationalPolicies(policyId, policyVersion)).build(); + + try { + LegacyOperationalPolicy policy = new LegacyOperationalPolicyProvider() + .fetchOperationalPolicies(policyId, policyVersion); + return addLoggingHeaders(addVersionControlHeaders(Response.status(Response.Status.OK)), requestId) + .entity(policy).build(); + } catch (PfModelException | PfModelRuntimeException pfme) { + return addLoggingHeaders(addVersionControlHeaders( + Response.status(pfme.getErrorResponse().getResponseCode())), requestId) + .entity(pfme.getErrorResponse()).build(); + } } /** @@ -533,7 +557,7 @@ public class LegacyApiRestController { notes = "Client should provide entity body of the new operational policy", authorizations = @Authorization(value = "basicAuth"), tags = { "Legacy Operational Policy", }, - response = ToscaServiceTemplate.class, + response = LegacyOperationalPolicy.class, responseHeaders = { @ResponseHeader(name = "X-MinorVersion", description = "Used to request or communicate a MINOR version back from the client" @@ -566,31 +590,36 @@ public class LegacyApiRestController { public Response createOperationalPolicy( @HeaderParam("X-ONAP-RequestID") @ApiParam("RequestID for http transaction") UUID requestId, @ApiParam(value = "Entity body of policy", required = true) LegacyOperationalPolicy body) { - return addLoggingHeaders(addVersionControlHeaders(Response.status(Response.Status.OK)), requestId) - .entity(new LegacyOperationalPolicyProvider().createOperationalPolicy(body)).build(); + + try { + LegacyOperationalPolicy policy = new LegacyOperationalPolicyProvider() + .createOperationalPolicy(body); + return addLoggingHeaders(addVersionControlHeaders(Response.status(Response.Status.OK)), requestId) + .entity(policy).build(); + } catch (PfModelException | PfModelRuntimeException pfme) { + return addLoggingHeaders(addVersionControlHeaders( + Response.status(pfme.getErrorResponse().getResponseCode())), requestId) + .entity(pfme.getErrorResponse()).build(); + } } /** - * Deletes all versions of a particular operational policy. + * Deletes the specified version of a particular operational policy. * * @param policyId the ID of specified policy + * @param policyVersion the version of specified policy * * @return the Response object containing the results of the API operation */ @DELETE - @Path("/policytypes/onap.policy.controlloop.operational/versions/1.0.0/policies/{policyId}") - @ApiOperation(value = "Delete all versions of a operational policy", + @Path("/policytypes/onap.policy.controlloop.operational/versions/1.0.0/" + + "policies/{policyId}/versions/{policyVersion}") + @Produces("application/json; vnd.onap.operational") + @ApiOperation(value = "Delete a particular version of a specified operational policy", notes = "Rule: the version that has been deployed in PDP group(s) cannot be deleted", authorizations = @Authorization(value = "basicAuth"), tags = { "Legacy Operational Policy", }, - extensions = { - @Extension(name = "interface info", properties = { - @ExtensionProperty(name = "api-version", value = "1.0.0"), - @ExtensionProperty(name = "last-mod-release", value = "Dublin") - }) - }) - @ApiResponses(value = { - @ApiResponse(code = 204, message = "Resources successfully deleted, no content returned", + response = LegacyOperationalPolicy.class, responseHeaders = { @ResponseHeader(name = "X-MinorVersion", description = "Used to request or communicate a MINOR version back from the client" @@ -607,35 +636,7 @@ public class LegacyApiRestController { @ResponseHeader(name = "X-ONAP-RequestID", description = "Used to track REST transactions for logging purpose", response = UUID.class) - }), - @ApiResponse(code = 401, message = "Authentication Error"), - @ApiResponse(code = 403, message = "Authorization Error"), - @ApiResponse(code = 404, message = "Resource Not Found"), - @ApiResponse(code = 409, message = "Delete Conflict, Rule Violation"), - @ApiResponse(code = 500, message = "Internal Server Error") - }) - public Response deleteAllVersionsOfOperationalPolicy( - @PathParam("policyId") @ApiParam(value = "ID of policy", required = true) String policyId, - @HeaderParam("X-ONAP-RequestID") @ApiParam("RequestID for http transaction") UUID requestId) { - return addLoggingHeaders(addVersionControlHeaders(Response.status(Response.Status.OK)), requestId) - .entity(new LegacyOperationalPolicyProvider().deleteOperationalPolicies(policyId, null)).build(); - } - - /** - * Deletes the specified version of a particular operational policy. - * - * @param policyId the ID of specified policy - * @param policyVersion the version of specified policy - * - * @return the Response object containing the results of the API operation - */ - @DELETE - @Path("/policytypes/onap.policy.controlloop.operational/versions/1.0.0/" - + "policies/{policyId}/versions/{policyVersion}") - @ApiOperation(value = "Delete a particular version of a specified operational policy", - notes = "Rule: the version that has been deployed in PDP group(s) cannot be deleted", - authorizations = @Authorization(value = "basicAuth"), - tags = { "Legacy Operational Policy", }, + }, extensions = { @Extension(name = "interface info", properties = { @ExtensionProperty(name = "api-version", value = "1.0.0"), @@ -643,24 +644,6 @@ public class LegacyApiRestController { }) }) @ApiResponses(value = { - @ApiResponse(code = 204, message = "Resource successfully deleted, no content returned", - responseHeaders = { - @ResponseHeader(name = "X-MinorVersion", - description = "Used to request or communicate a MINOR version back from the client" - + " to the server, and from the server back to the client", - response = String.class), - @ResponseHeader(name = "X-PatchVersion", - description = "Used only to communicate a PATCH version in a response for" - + " troubleshooting purposes only, and will not be provided by" - + " the client on request", - response = String.class), - @ResponseHeader(name = "X-LatestVersion", - description = "Used only to communicate an API's latest version", - response = String.class), - @ResponseHeader(name = "X-ONAP-RequestID", - description = "Used to track REST transactions for logging purpose", - response = UUID.class) - }), @ApiResponse(code = 401, message = "Authentication Error"), @ApiResponse(code = 403, message = "Authorization Error"), @ApiResponse(code = 404, message = "Resource Not Found"), @@ -671,8 +654,17 @@ public class LegacyApiRestController { @PathParam("policyId") @ApiParam(value = "ID of policy", required = true) String policyId, @PathParam("policyVersion") @ApiParam(value = "Version of policy", required = true) String policyVersion, @HeaderParam("X-ONAP-RequestID") @ApiParam("RequestID for http transaction") UUID requestId) { - return addLoggingHeaders(addVersionControlHeaders(Response.status(Response.Status.OK)), requestId) - .entity(new LegacyOperationalPolicyProvider().deleteOperationalPolicies(policyId, policyVersion)).build(); + + try { + LegacyOperationalPolicy policy = new LegacyOperationalPolicyProvider() + .deleteOperationalPolicies(policyId, policyVersion); + return addLoggingHeaders(addVersionControlHeaders(Response.status(Response.Status.OK)), requestId) + .entity(policy).build(); + } catch (PfModelException | PfModelRuntimeException pfme) { + return addLoggingHeaders(addVersionControlHeaders( + Response.status(pfme.getErrorResponse().getResponseCode())), requestId) + .entity(pfme.getErrorResponse()).build(); + } } private ResponseBuilder addVersionControlHeaders(ResponseBuilder rb) { diff --git a/main/src/main/java/org/onap/policy/api/main/rest/provider/LegacyGuardPolicyProvider.java b/main/src/main/java/org/onap/policy/api/main/rest/provider/LegacyGuardPolicyProvider.java index f627493c..60d1b1f2 100644 --- a/main/src/main/java/org/onap/policy/api/main/rest/provider/LegacyGuardPolicyProvider.java +++ b/main/src/main/java/org/onap/policy/api/main/rest/provider/LegacyGuardPolicyProvider.java @@ -22,8 +22,16 @@ package org.onap.policy.api.main.rest.provider; -import org.onap.policy.models.tosca.legacy.concepts.LegacyGuardPolicy; -import org.onap.policy.models.tosca.simple.concepts.ToscaServiceTemplate; +import java.util.Map; +import javax.ws.rs.core.Response; +import org.onap.policy.api.main.parameters.ApiParameterGroup; +import org.onap.policy.common.parameters.ParameterService; +import org.onap.policy.models.base.PfModelException; +import org.onap.policy.models.provider.PolicyModelsProvider; +import org.onap.policy.models.provider.PolicyModelsProviderFactory; +import org.onap.policy.models.provider.PolicyModelsProviderParameters; +import org.onap.policy.models.tosca.legacy.concepts.LegacyGuardPolicyInput; +import org.onap.policy.models.tosca.legacy.concepts.LegacyGuardPolicyOutput; /** * Class to provide all kinds of legacy guard policy operations. @@ -32,7 +40,18 @@ import org.onap.policy.models.tosca.simple.concepts.ToscaServiceTemplate; */ public class LegacyGuardPolicyProvider { - private static final String DELETE_OK = "Successfully deleted"; + private PolicyModelsProvider modelsProvider; + + /** + * Default constructor. + */ + public LegacyGuardPolicyProvider() throws PfModelException { + + ApiParameterGroup parameterGroup = ParameterService.get("ApiGroup"); + PolicyModelsProviderParameters providerParameters = parameterGroup.getDatabaseProviderParameters(); + modelsProvider = new PolicyModelsProviderFactory().createPolicyModelsProvider(providerParameters); + modelsProvider.init(); + } /** * Retrieves a list of guard policies matching specified ID and version. @@ -40,11 +59,14 @@ public class LegacyGuardPolicyProvider { * @param policyId the ID of policy * @param policyVersion the version of policy * - * @return the ToscaServiceTemplate object + * @return the map of LegacyGuardPolicyOutput objects */ - public ToscaServiceTemplate fetchGuardPolicies(String policyId, String policyVersion) { - // placeholder - return new ToscaServiceTemplate(); + public Map<String, LegacyGuardPolicyOutput> fetchGuardPolicies(String policyId, String policyVersion) + throws PfModelException { + + Map<String, LegacyGuardPolicyOutput> guardPolicies = modelsProvider.getGuardPolicy(policyId); + close(); + return guardPolicies; } /** @@ -52,11 +74,12 @@ public class LegacyGuardPolicyProvider { * * @param body the entity body of policy * - * @return the ToscaServiceTemplate object + * @return the map of LegacyGuardPolicyOutput objectst */ - public ToscaServiceTemplate createGuardPolicy(LegacyGuardPolicy body) { - // placeholder - return new ToscaServiceTemplate(); + public Map<String, LegacyGuardPolicyOutput> createGuardPolicy(LegacyGuardPolicyInput body) throws PfModelException { + Map<String, LegacyGuardPolicyOutput> guardPolicies = modelsProvider.createGuardPolicy(body); + close(); + return guardPolicies; } /** @@ -65,10 +88,27 @@ public class LegacyGuardPolicyProvider { * @param policyId the ID of policy * @param policyVersion the version of policy * - * @return a string message indicating the operation results + * @return the map of LegacyGuardPolicyOutput objects + */ + public Map<String, LegacyGuardPolicyOutput> deleteGuardPolicies(String policyId, String policyVersion) + throws PfModelException { + + Map<String, LegacyGuardPolicyOutput> guardPolicies = modelsProvider.deleteGuardPolicy(policyId); + close(); + return guardPolicies; + } + + /** + * Closes the connection to database. + * + * @throws PfModelException the PfModel parsing exception */ - public String deleteGuardPolicies(String policyId, String policyVersion) { - // placeholder - return DELETE_OK; + private void close() throws PfModelException { + try { + modelsProvider.close(); + } catch (Exception e) { + throw new PfModelException( + Response.Status.INTERNAL_SERVER_ERROR, "error closing connection to database", e); + } } }
\ No newline at end of file diff --git a/main/src/main/java/org/onap/policy/api/main/rest/provider/LegacyOperationalPolicyProvider.java b/main/src/main/java/org/onap/policy/api/main/rest/provider/LegacyOperationalPolicyProvider.java index 7d3e1875..2f0b127a 100644 --- a/main/src/main/java/org/onap/policy/api/main/rest/provider/LegacyOperationalPolicyProvider.java +++ b/main/src/main/java/org/onap/policy/api/main/rest/provider/LegacyOperationalPolicyProvider.java @@ -22,8 +22,14 @@ package org.onap.policy.api.main.rest.provider; +import javax.ws.rs.core.Response; +import org.onap.policy.api.main.parameters.ApiParameterGroup; +import org.onap.policy.common.parameters.ParameterService; +import org.onap.policy.models.base.PfModelException; +import org.onap.policy.models.provider.PolicyModelsProvider; +import org.onap.policy.models.provider.PolicyModelsProviderFactory; +import org.onap.policy.models.provider.PolicyModelsProviderParameters; import org.onap.policy.models.tosca.legacy.concepts.LegacyOperationalPolicy; -import org.onap.policy.models.tosca.simple.concepts.ToscaServiceTemplate; /** * Class to provide all kinds of legacy operational policy operations. @@ -32,7 +38,18 @@ import org.onap.policy.models.tosca.simple.concepts.ToscaServiceTemplate; */ public class LegacyOperationalPolicyProvider { - private static final String DELETE_OK = "Successfully deleted"; + private PolicyModelsProvider modelsProvider; + + /** + * Default constructor. + */ + public LegacyOperationalPolicyProvider() throws PfModelException { + + ApiParameterGroup parameterGroup = ParameterService.get("ApiGroup"); + PolicyModelsProviderParameters providerParameters = parameterGroup.getDatabaseProviderParameters(); + modelsProvider = new PolicyModelsProviderFactory().createPolicyModelsProvider(providerParameters); + modelsProvider.init(); + } /** * Retrieves a list of operational policies matching specified ID and version. @@ -40,11 +57,14 @@ public class LegacyOperationalPolicyProvider { * @param policyId the ID of policy * @param policyVersion the version of policy * - * @return the ToscaServiceTemplate object + * @return the LegacyOperationalPolicy object */ - public ToscaServiceTemplate fetchOperationalPolicies(String policyId, String policyVersion) { - // placeholder - return new ToscaServiceTemplate(); + public LegacyOperationalPolicy fetchOperationalPolicies(String policyId, String policyVersion) + throws PfModelException { + + LegacyOperationalPolicy operationalPolicy = modelsProvider.getOperationalPolicy(policyId); + close(); + return operationalPolicy; } /** @@ -54,9 +74,11 @@ public class LegacyOperationalPolicyProvider { * * @return the LegacyOperationalPolicy object */ - public LegacyOperationalPolicy createOperationalPolicy(LegacyOperationalPolicy body) { - // placeholder - return new LegacyOperationalPolicy(); + public LegacyOperationalPolicy createOperationalPolicy(LegacyOperationalPolicy body) throws PfModelException { + + LegacyOperationalPolicy operationalPolicy = modelsProvider.createOperationalPolicy(body); + close(); + return operationalPolicy; } /** @@ -65,10 +87,27 @@ public class LegacyOperationalPolicyProvider { * @param policyId the ID of policy * @param policyVersion the version of policy * - * @return a string message indicating the operation results + * @return the LegacyOperationalPolicy object + */ + public LegacyOperationalPolicy deleteOperationalPolicies(String policyId, String policyVersion) + throws PfModelException { + + LegacyOperationalPolicy operationalPolicy = modelsProvider.deleteOperationalPolicy(policyId); + close(); + return operationalPolicy; + } + + /** + * Closes the connection to database. + * + * @throws PfModelException the PfModel parsing exception */ - public String deleteOperationalPolicies(String policyId, String policyVersion) { - // placeholder - return DELETE_OK; + private void close() throws PfModelException { + try { + modelsProvider.close(); + } catch (Exception e) { + throw new PfModelException( + Response.Status.INTERNAL_SERVER_ERROR, "error closing connection to database", e); + } } }
\ No newline at end of file diff --git a/main/src/main/java/org/onap/policy/api/main/rest/provider/PolicyProvider.java b/main/src/main/java/org/onap/policy/api/main/rest/provider/PolicyProvider.java index 690bdbd0..8ce9a499 100644 --- a/main/src/main/java/org/onap/policy/api/main/rest/provider/PolicyProvider.java +++ b/main/src/main/java/org/onap/policy/api/main/rest/provider/PolicyProvider.java @@ -22,7 +22,18 @@ package org.onap.policy.api.main.rest.provider;
-import org.onap.policy.models.tosca.simple.concepts.ToscaServiceTemplate;
+import java.util.List;
+import java.util.Map;
+import javax.ws.rs.core.Response;
+import org.apache.commons.lang3.tuple.Pair;
+import org.onap.policy.api.main.parameters.ApiParameterGroup;
+import org.onap.policy.common.parameters.ParameterService;
+import org.onap.policy.models.base.PfModelException;
+import org.onap.policy.models.provider.PolicyModelsProvider;
+import org.onap.policy.models.provider.PolicyModelsProviderFactory;
+import org.onap.policy.models.provider.PolicyModelsProviderParameters;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
/**
* Class to provide all kinds of policy operations.
@@ -31,7 +42,18 @@ import org.onap.policy.models.tosca.simple.concepts.ToscaServiceTemplate; */
public class PolicyProvider {
- private static final String DELETE_OK = "Successfully deleted";
+ private PolicyModelsProvider modelsProvider;
+
+ /**
+ * Default constructor.
+ */
+ public PolicyProvider() throws PfModelException {
+
+ ApiParameterGroup parameterGroup = ParameterService.get("ApiGroup");
+ PolicyModelsProviderParameters providerParameters = parameterGroup.getDatabaseProviderParameters();
+ modelsProvider = new PolicyModelsProviderFactory().createPolicyModelsProvider(providerParameters);
+ modelsProvider.init();
+ }
/**
* Retrieves a list of policies matching specified ID and version of both policy type and policy.
@@ -42,11 +64,61 @@ public class PolicyProvider { * @param policyVersion the version of policy
*
* @return the ToscaServiceTemplate object
+ *
+ * @throws PfModelException the PfModel parsing exception
*/
public ToscaServiceTemplate fetchPolicies(String policyTypeId, String policyTypeVersion,
- String policyId, String policyVersion) {
- // placeholder
- return new ToscaServiceTemplate();
+ String policyId, String policyVersion) throws PfModelException {
+
+ validatePathParam(policyTypeId, policyTypeVersion);
+ ToscaServiceTemplate serviceTemplate;
+ if (policyId == null) {
+ serviceTemplate = modelsProvider.getPolicies4PolicyType(policyTypeId, policyTypeVersion);
+ } else {
+ serviceTemplate = modelsProvider.getPolicies(policyId, policyVersion);
+ }
+ close();
+ return serviceTemplate;
+ }
+
+ /**
+ * Retrieves a list of policies with the latest versions that match specified policy type id and version.
+ *
+ * @param policyTypeId the ID of policy type
+ * @param policyTypeVersion the version of policy type
+ * @param policyId the ID of the policy
+ *
+ * @return the ToscaServiceTemplate object
+ *
+ * @throws PfModelException the PfModel parsing exception
+ */
+ public ToscaServiceTemplate fetchLatestPolicies(String policyTypeId, String policyTypeVersion,
+ String policyId) throws PfModelException {
+
+ validatePathParam(policyTypeId, policyTypeVersion);
+ ToscaServiceTemplate serviceTemplate = modelsProvider.getLatestPolicies(policyId);
+ close();
+ return serviceTemplate;
+ }
+
+ /**
+ * Retrieves a list of deployed policies in each pdp group.
+ *
+ * @param policyTypeId the ID of policy type
+ * @param policyTypeVersion the version of policy type
+ * @param policyId the ID of the policy
+ *
+ * @return a list of deployed policies in each pdp group
+ *
+ * @throws PfModelException the PfModel parsing exception
+ */
+ public Map<Pair<String, String>, List<ToscaPolicy>> fetchDeployedPolicies(
+ String policyTypeId, String policyTypeVersion, String policyId) throws PfModelException {
+
+ validatePathParam(policyTypeId, policyTypeVersion);
+ Map<Pair<String, String>, List<ToscaPolicy>> deployedPolicies = modelsProvider.getDeployedPolicyList(policyId);
+ close();
+ return deployedPolicies;
}
/**
@@ -57,26 +129,93 @@ public class PolicyProvider { * @param body the entity body of policy
*
* @return the ToscaServiceTemplate object
+ *
+ * @throws PfModelException the PfModel parsing exception
*/
public ToscaServiceTemplate createPolicy(String policyTypeId, String policyTypeVersion,
- ToscaServiceTemplate body) {
- // placeholder
- return new ToscaServiceTemplate();
+ ToscaServiceTemplate body) throws PfModelException {
+
+ validatePathParam(policyTypeId, policyTypeVersion);
+ validatePolicyTypeMatch(policyTypeId, policyTypeVersion, body);
+ ToscaServiceTemplate serviceTemplate = modelsProvider.createPolicies(body);
+ close();
+ return serviceTemplate;
}
/**
- * Deletes the policies matching specified ID and version of both policy type and policy.
+ * Deletes the policy matching specified ID and version of both policy type and policy.
*
* @param policyTypeId the ID of policy type
* @param policyTypeVersion the version of policy type
* @param policyId the ID of policy
* @param policyVersion the version of policy
*
- * @return a string message indicating the operation results
+ * @return the ToscaServiceTemplate object
+ *
+ * @throws PfModelException the PfModel parsing exception
+ */
+ public ToscaServiceTemplate deletePolicy(String policyTypeId, String policyTypeVersion,
+ String policyId, String policyVersion) throws PfModelException {
+
+ validatePathParam(policyTypeId, policyTypeVersion);
+ ToscaServiceTemplate serviceTemplate = modelsProvider.deletePolicy(policyId, policyVersion);
+ close();
+ return serviceTemplate;
+ }
+
+ /**
+ * Checks the validation of policy type info passed in as path param.
+ *
+ * @param policyTypeId the ID of policy type
+ * @param policyTypeVersion the version of policy type
+ *
+ * @throws PfModelException the PfModel parsing exception
+ */
+ private void validatePathParam(String policyTypeId, String policyTypeVersion) throws PfModelException {
+
+ // Check policy type existence
+ try {
+ modelsProvider.getPolicyTypes(policyTypeId, policyTypeVersion);
+ } catch (Exception e) {
+ throw new PfModelException(Response.Status.NOT_FOUND, "specified policy type does not exist", e);
+ }
+ }
+
+ /**
+ * Validates the match between policy type specified in path param and the one specified in type of policy.
+ *
+ * @param body the ToscaServiceTemplate to create
+ *
+ * @throws PfModelException the PfModel parsing exception
+ */
+ private void validatePolicyTypeMatch(String policyTypeId, String policyTypeVersion, ToscaServiceTemplate body)
+ throws PfModelException {
+
+ List<Map<String, ToscaPolicy>> policies = body.getToscaTopologyTemplate().getPolicies();
+ for (Map<String, ToscaPolicy> policy : policies) {
+ if (policy.size() != 1) {
+ throw new PfModelException(Response.Status.BAD_REQUEST,
+ "one policy block contains more than one policies");
+ }
+ ToscaPolicy policyContent = policy.values().iterator().next();
+ if (!policyTypeId.equalsIgnoreCase(policyContent.getType())
+ || !policyTypeVersion.equalsIgnoreCase(policyContent.getVersion())) {
+ throw new PfModelException(Response.Status.BAD_REQUEST, "policy type info does not match");
+ }
+ }
+ }
+
+ /**
+ * Closes the connection to database.
+ *
+ * @throws PfModelException the PfModel parsing exception
*/
- public String deletePolicies(String policyTypeId, String policyTypeVersion,
- String policyId, String policyVersion) {
- // placeholder
- return DELETE_OK;
+ private void close() throws PfModelException {
+ try {
+ modelsProvider.close();
+ } catch (Exception e) {
+ throw new PfModelException(
+ Response.Status.INTERNAL_SERVER_ERROR, "error closing connection to database", e);
+ }
}
}
\ No newline at end of file diff --git a/main/src/main/java/org/onap/policy/api/main/rest/provider/PolicyTypeProvider.java b/main/src/main/java/org/onap/policy/api/main/rest/provider/PolicyTypeProvider.java index 5038e315..04d8a725 100644 --- a/main/src/main/java/org/onap/policy/api/main/rest/provider/PolicyTypeProvider.java +++ b/main/src/main/java/org/onap/policy/api/main/rest/provider/PolicyTypeProvider.java @@ -22,7 +22,14 @@ package org.onap.policy.api.main.rest.provider;
-import org.onap.policy.models.tosca.simple.concepts.ToscaServiceTemplate;
+import javax.ws.rs.core.Response;
+import org.onap.policy.api.main.parameters.ApiParameterGroup;
+import org.onap.policy.common.parameters.ParameterService;
+import org.onap.policy.models.base.PfModelException;
+import org.onap.policy.models.provider.PolicyModelsProvider;
+import org.onap.policy.models.provider.PolicyModelsProviderFactory;
+import org.onap.policy.models.provider.PolicyModelsProviderParameters;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
/**
* Class to provide all kinds of policy type operations.
@@ -31,7 +38,18 @@ import org.onap.policy.models.tosca.simple.concepts.ToscaServiceTemplate; */
public class PolicyTypeProvider {
- private static final String DELETE_OK = "Successfully deleted";
+ private PolicyModelsProvider modelsProvider;
+
+ /**
+ * Default constructor.
+ */
+ public PolicyTypeProvider() throws PfModelException {
+
+ ApiParameterGroup parameterGroup = ParameterService.get("ApiGroup");
+ PolicyModelsProviderParameters providerParameters = parameterGroup.getDatabaseProviderParameters();
+ modelsProvider = new PolicyModelsProviderFactory().createPolicyModelsProvider(providerParameters);
+ modelsProvider.init();
+ }
/**
* Retrieves a list of policy types matching specified policy type ID and version.
@@ -40,10 +58,31 @@ public class PolicyTypeProvider { * @param policyTypeVersion the version of policy type
*
* @return the ToscaServiceTemplate object
+ *
+ * @throws PfModelException the PfModel parsing exception
*/
- public ToscaServiceTemplate fetchPolicyTypes(String policyTypeId, String policyTypeVersion) {
- // placeholder
- return new ToscaServiceTemplate();
+ public ToscaServiceTemplate fetchPolicyTypes(String policyTypeId, String policyTypeVersion)
+ throws PfModelException {
+
+ ToscaServiceTemplate serviceTemplate = modelsProvider.getPolicyTypes(policyTypeId, policyTypeVersion);
+ close();
+ return serviceTemplate;
+ }
+
+ /**
+ * Retrieves a list of policy types with the latest versions.
+ *
+ * @param policyTypeId the ID of policy type
+ *
+ * @return the ToscaServiceTemplate object
+ *
+ * @throws PfModelException the PfModel parsing exception
+ */
+ public ToscaServiceTemplate fetchLatestPolicyTypes(String policyTypeId) throws PfModelException {
+
+ ToscaServiceTemplate serviceTemplate = modelsProvider.getLatestPolicyTypes(policyTypeId);
+ close();
+ return serviceTemplate;
}
/**
@@ -51,23 +90,45 @@ public class PolicyTypeProvider { *
* @param body the entity body of policy type
*
- * @return the ToscaServiceTemplate objects
+ * @return the ToscaServiceTemplate object
+ * @throws PfModelException the PfModel parsing exception
*/
- public ToscaServiceTemplate createPolicyType(ToscaServiceTemplate body) {
- // placeholder
- return new ToscaServiceTemplate();
+ public ToscaServiceTemplate createPolicyType(ToscaServiceTemplate body) throws PfModelException {
+
+ ToscaServiceTemplate serviceTemplate = modelsProvider.createPolicyTypes(body);
+ close();
+ return serviceTemplate;
}
/**
- * Delete the policy types matching specified policy type ID and version.
+ * Delete the policy type matching specified policy type ID and version.
*
* @param policyTypeId the ID of policy type
* @param policyTypeVersion the version of policy type
*
- * @return a string message indicating the operation results
+ * @return the ToscaServiceTemplate object
+ *
+ * @throws PfModelException the PfModel parsing exception
+ */
+ public ToscaServiceTemplate deletePolicyType(String policyTypeId, String policyTypeVersion)
+ throws PfModelException {
+
+ ToscaServiceTemplate serviceTemplate = modelsProvider.deletePolicyType(policyTypeId, policyTypeVersion);
+ close();
+ return serviceTemplate;
+ }
+
+ /**
+ * Closes the connection to database.
+ *
+ * @throws PfModelException the PfModel parsing exception
*/
- public String deletePolicyTypes(String policyTypeId, String policyTypeVersion) {
- // placeholder
- return DELETE_OK;
+ private void close() throws PfModelException {
+ try {
+ modelsProvider.close();
+ } catch (Exception e) {
+ throw new PfModelException(
+ Response.Status.INTERNAL_SERVER_ERROR, "error closing connection to database", e);
+ }
}
}
diff --git a/main/src/main/resources/META-INF/persistence.xml b/main/src/main/resources/META-INF/persistence.xml new file mode 100644 index 00000000..81be3db9 --- /dev/null +++ b/main/src/main/resources/META-INF/persistence.xml @@ -0,0 +1,75 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ============LICENSE_START======================================================= + Copyright (C) 2019 Nordix Foundation. + ================================================================================ + 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. + + SPDX-License-Identifier: Apache-2.0 + ============LICENSE_END========================================================= +--> + +<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0"> + <persistence-unit name="ToscaConceptTest" transaction-type="RESOURCE_LOCAL"> + <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> + + <class>org.onap.policy.models.dao.converters.CDataConditioner</class> + <class>org.onap.policy.models.dao.converters.Uuid2String</class> + <class>org.onap.policy.models.base.PfConceptKey</class> + <class>org.onap.policy.models.tosca.simple.concepts.JpaToscaPolicyType</class> + <class>org.onap.policy.models.tosca.simple.concepts.JpaToscaPolicy</class> + + <properties> + <property name="javax.persistence.jdbc.driver" value="org.h2.Driver" /> + <property name="javax.persistence.jdbc.url" value="jdbc:h2:mem:testdb" /> + <property name="javax.persistence.jdbc.user" value="policy" /> + <property name="javax.persistence.jdbc.password" value="P01icY" /> + <property name="eclipselink.ddl-generation" value="drop-and-create-tables" /> + <property name="eclipselink.ddl-generation.output-mode" value="database" /> + <property name="eclipselink.logging.level" value="INFO" /> + </properties> + </persistence-unit> + + <persistence-unit name="ToscaConceptMariaDBTest" transaction-type="RESOURCE_LOCAL"> + <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> + + <class>org.onap.policy.models.dao.converters.CDataConditioner</class> + <class>org.onap.policy.models.dao.converters.Uuid2String</class> + <class>org.onap.policy.models.base.PfConceptKey</class> + <class>org.onap.policy.models.tosca.simple.concepts.JpaToscaPolicyType</class> + <class>org.onap.policy.models.tosca.simple.concepts.JpaToscaPolicy</class> + + <properties> + <property name="javax.persistence.jdbc.driver" value="org.mariadb.jdbc.Driver" /> + <property name="javax.persistence.jdbc.url" value="jdbc:mariadb://localhost:3306/policy" /> + <property name="javax.persistence.jdbc.user" value="policy" /> + <property name="javax.persistence.jdbc.password" value="P01icY" /> + <property name="javax.persistence.schema-generation.database.action" value="create" /> + + <!-- property name="eclipselink.logging.level" value="ALL" /> + <property name="eclipselink.logging.level.jpa" value="ALL" /> + <property name="eclipselink.logging.level.ddl" value="ALL" /> + <property name="eclipselink.logging.level.connection" value="ALL" /> + <property name="eclipselink.logging.level.sql" value="ALL" /> + <property name="eclipselink.logging.level.transaction" value="ALL" /> + <property name="eclipselink.logging.level.sequencing" value="ALL" /> + <property name="eclipselink.logging.level.server" value="ALL" /> + <property name="eclipselink.logging.level.query" value="ALL" /> + <property name="eclipselink.logging.level.properties" value="ALL" /--> + + <property name="eclipselink.ddl-generation" value="drop-and-create-tables" /> + <property name="eclipselink.ddl-generation.output-mode" value="database" /> + <property name="eclipselink.logging.level" value="INFO" /> + </properties> + </persistence-unit> +</persistence> diff --git a/main/src/test/java/org/onap/policy/api/main/parameters/CommonTestData.java b/main/src/test/java/org/onap/policy/api/main/parameters/CommonTestData.java index 8ff2f98e..f0f971d4 100644 --- a/main/src/test/java/org/onap/policy/api/main/parameters/CommonTestData.java +++ b/main/src/test/java/org/onap/policy/api/main/parameters/CommonTestData.java @@ -1,7 +1,7 @@ /*- * ============LICENSE_START======================================================= - * ONAP Policy API - * ================================================================================ + * ONAP Policy API + * ================================================================================ * Copyright (C) 2018 Samsung Electronics Co., Ltd. All rights reserved. * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved. * ================================================================================ @@ -23,19 +23,29 @@ package org.onap.policy.api.main.parameters; +import org.onap.policy.models.provider.PolicyModelsProviderParameters; + /** * Class to hold/create all parameters for test cases. * */ public class CommonTestData { + public static final String API_GROUP_NAME = "ApiGroup"; + private static final String REST_SERVER_PASSWORD = "zb!XztG34"; private static final String REST_SERVER_USER = "healthcheck"; private static final int REST_SERVER_PORT = 6969; private static final String REST_SERVER_HOST = "0.0.0.0"; private static final boolean REST_SERVER_HTTPS = false; private static final boolean REST_SERVER_AAF = false; - public static final String API_GROUP_NAME = "ApiGroup"; + + private static final String PROVIDER_GROUP_NAME = "PolicyProviderParameterGroup"; + private static final String PROVIDER_IMPL = "org.onap.policy.models.provider.impl.DatabasePolicyModelsProviderImpl"; + private static final String DATABASE_URL = "jdbc:h2:mem:testdb"; + private static final String DATABASE_USER = "policy"; + private static final String DATABASE_PASSWORD = "P01icY"; + private static final String PERSISTENCE_UNIT = "ToscaConceptTest"; /** * Returns an instance of RestServerParameters for test cases. @@ -54,4 +64,25 @@ public class CommonTestData { return restServerParameters; } + /** + * Returns an instance of PolicyModelsProviderParameters for test cases. + * + * @param isEmpty boolean value to represent that object created should be empty or not + * @return the PolicyModelsProviderParameters object + */ + public PolicyModelsProviderParameters getDatabaseProviderParameters(final boolean isEmpty) { + final PolicyModelsProviderParameters databaseProviderParameters; + if (!isEmpty) { + databaseProviderParameters = new PolicyModelsProviderParameters(); + databaseProviderParameters.setName(PROVIDER_GROUP_NAME); + databaseProviderParameters.setImplementation(PROVIDER_IMPL); + databaseProviderParameters.setDatabaseUrl(DATABASE_URL); + databaseProviderParameters.setDatabaseUser(DATABASE_USER); + databaseProviderParameters.setDatabasePassword(DATABASE_PASSWORD); + databaseProviderParameters.setPersistenceUnit(PERSISTENCE_UNIT); + } else { + databaseProviderParameters = new PolicyModelsProviderParameters(); + } + return databaseProviderParameters; + } } diff --git a/main/src/test/java/org/onap/policy/api/main/parameters/TestApiParameterGroup.java b/main/src/test/java/org/onap/policy/api/main/parameters/TestApiParameterGroup.java index 184f242b..8be52455 100644 --- a/main/src/test/java/org/onap/policy/api/main/parameters/TestApiParameterGroup.java +++ b/main/src/test/java/org/onap/policy/api/main/parameters/TestApiParameterGroup.java @@ -1,16 +1,15 @@ /*- * ============LICENSE_START======================================================= - * ONAP Policy API - * ================================================================================ + * ONAP Policy API + * ================================================================================ * Copyright (C) 2018 Samsung Electronics Co., Ltd. All rights reserved. * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved. - * Modifications Copyright (C) 2019 IBM. * ================================================================================ * 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 + * 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, @@ -30,6 +29,7 @@ import static org.junit.Assert.assertTrue; import org.junit.Test; import org.onap.policy.common.parameters.GroupValidationResult; +import org.onap.policy.models.provider.PolicyModelsProviderParameters; /** * Class to perform unit test of ApiParameterGroup. @@ -41,14 +41,18 @@ public class TestApiParameterGroup { @Test public void testApiParameterGroup() { final RestServerParameters restServerParameters = commonTestData.getRestServerParameters(false); - final ApiParameterGroup apiParameters = new ApiParameterGroup(CommonTestData.API_GROUP_NAME, - restServerParameters); + final PolicyModelsProviderParameters databaseProviderParameters = + commonTestData.getDatabaseProviderParameters(false); + final ApiParameterGroup apiParameters = new ApiParameterGroup( + CommonTestData.API_GROUP_NAME, restServerParameters, databaseProviderParameters); final GroupValidationResult validationResult = apiParameters.validate(); assertTrue(validationResult.isValid()); assertEquals(restServerParameters.getHost(), apiParameters.getRestServerParameters().getHost()); assertEquals(restServerParameters.getPort(), apiParameters.getRestServerParameters().getPort()); - assertEquals(restServerParameters.getUserName(), apiParameters.getRestServerParameters().getUserName()); - assertEquals(restServerParameters.getPassword(), apiParameters.getRestServerParameters().getPassword()); + assertEquals(restServerParameters.getUserName(), + apiParameters.getRestServerParameters().getUserName()); + assertEquals(restServerParameters.getPassword(), + apiParameters.getRestServerParameters().getPassword()); assertEquals(restServerParameters.isHttps(), apiParameters.getRestServerParameters().isHttps()); assertEquals(restServerParameters.isAaf(), apiParameters.getRestServerParameters().isAaf()); assertEquals(CommonTestData.API_GROUP_NAME, apiParameters.getName()); @@ -57,52 +61,57 @@ public class TestApiParameterGroup { @Test public void testApiParameterGroup_NullName() { final RestServerParameters restServerParameters = commonTestData.getRestServerParameters(false); - final ApiParameterGroup apiParameters = new ApiParameterGroup(null, restServerParameters); + final PolicyModelsProviderParameters databaseProviderParameters = + commonTestData.getDatabaseProviderParameters(false); + final ApiParameterGroup apiParameters = new ApiParameterGroup(null, + restServerParameters, databaseProviderParameters); final GroupValidationResult validationResult = apiParameters.validate(); assertFalse(validationResult.isValid()); assertEquals(null, apiParameters.getName()); - assertTrue(validationResult.getResult().contains( - "field \"name\" type \"java.lang.String\" value \"null\" INVALID, " + "must be a non-blank string")); + assertTrue(validationResult.getResult() + .contains("field \"name\" type \"java.lang.String\" value \"null\" INVALID, " + + "must be a non-blank string")); } @Test public void testApiParameterGroup_EmptyName() { final RestServerParameters restServerParameters = commonTestData.getRestServerParameters(false); - - final ApiParameterGroup apiParameters = new ApiParameterGroup("", restServerParameters); + final PolicyModelsProviderParameters databaseProviderParameters = + commonTestData.getDatabaseProviderParameters(false); + final ApiParameterGroup apiParameters = new ApiParameterGroup("", + restServerParameters, databaseProviderParameters); final GroupValidationResult validationResult = apiParameters.validate(); assertFalse(validationResult.isValid()); assertEquals("", apiParameters.getName()); - assertTrue(validationResult.getResult().contains( - "field \"name\" type \"java.lang.String\" value \"\" INVALID, " + "must be a non-blank string")); + assertTrue(validationResult.getResult().contains("field \"name\" type \"java.lang.String\" value \"\" INVALID, " + + "must be a non-blank string")); } @Test public void testApiParameterGroup_EmptyRestServerParameters() { final RestServerParameters restServerParameters = commonTestData.getRestServerParameters(true); - - final ApiParameterGroup apiParameters = new ApiParameterGroup(CommonTestData.API_GROUP_NAME, - restServerParameters); + final PolicyModelsProviderParameters databaseProviderParameters = + commonTestData.getDatabaseProviderParameters(false); + final ApiParameterGroup apiParameters = new ApiParameterGroup( + CommonTestData.API_GROUP_NAME, restServerParameters, databaseProviderParameters); final GroupValidationResult validationResult = apiParameters.validate(); assertFalse(validationResult.isValid()); assertTrue(validationResult.getResult() - .contains("\"org.onap.policy.api.main.parameters.RestServerParameters\" INVALID, " - + "parameter group has status INVALID")); + .contains("\"org.onap.policy.api.main.parameters.RestServerParameters\" INVALID, " + + "parameter group has status INVALID")); } @Test - public void testName() { + public void testApiParameterGroup_EmptyDatabaseProviderParameters() { final RestServerParameters restServerParameters = commonTestData.getRestServerParameters(false); - - final ApiParameterGroup apiParameters = new ApiParameterGroup("", restServerParameters); - apiParameters.setName("name"); - assertEquals("name", apiParameters.getName()); - } - - @Test - public void testVaildateForNullRestServiceParameters() { - final ApiParameterGroup apiParameters = new ApiParameterGroup(CommonTestData.API_GROUP_NAME, null); + final PolicyModelsProviderParameters databaseProviderParameters = + commonTestData.getDatabaseProviderParameters(true); + final ApiParameterGroup apiParameters = new ApiParameterGroup( + CommonTestData.API_GROUP_NAME, restServerParameters, databaseProviderParameters); final GroupValidationResult validationResult = apiParameters.validate(); - assertTrue(validationResult.getResult().contains("parameter group has status INVALID")); + assertFalse(validationResult.isValid()); + assertTrue(validationResult.getResult() + .contains("\"org.onap.policy.models.provider.PolicyModelsProviderParameters\" INVALID, " + + "parameter group has status INVALID")); } } diff --git a/main/src/test/java/org/onap/policy/api/main/parameters/TestApiParameterHandler.java b/main/src/test/java/org/onap/policy/api/main/parameters/TestApiParameterHandler.java index 71d8c357..480a5d8a 100644 --- a/main/src/test/java/org/onap/policy/api/main/parameters/TestApiParameterHandler.java +++ b/main/src/test/java/org/onap/policy/api/main/parameters/TestApiParameterHandler.java @@ -28,7 +28,6 @@ import static org.junit.Assert.fail; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Paths; - import org.junit.Test; import org.onap.policy.api.main.exception.PolicyApiException; import org.onap.policy.api.main.startstop.ApiCommandLineArguments; @@ -153,7 +152,7 @@ public class TestApiParameterHandler { @Test public void testApiParameterGroup_InvalidRestServerParameters() throws PolicyApiException, IOException { - final String[] apiConfigParameters = + final String[] apiConfigParameters = { "-c", "parameters/ApiConfigParameters_InvalidRestServerParameters.json" }; final ApiCommandLineArguments arguments = new ApiCommandLineArguments(); arguments.parse(apiConfigParameters); diff --git a/main/src/test/java/org/onap/policy/api/main/rest/TestApiRestServer.java b/main/src/test/java/org/onap/policy/api/main/rest/TestApiRestServer.java index 3c8b251d..4fb588c2 100644 --- a/main/src/test/java/org/onap/policy/api/main/rest/TestApiRestServer.java +++ b/main/src/test/java/org/onap/policy/api/main/rest/TestApiRestServer.java @@ -140,11 +140,11 @@ public class TestApiRestServer { main = startApiService(true); Invocation.Builder invocationBuilder = sendHttpRequest(STATISTICS_ENDPOINT); StatisticsReport report = invocationBuilder.get(StatisticsReport.class); - validateStatisticsReport(report, 0, 200); + validateStatisticsReport(report, 200); updateApiStatistics(); invocationBuilder = sendHttpRequest(STATISTICS_ENDPOINT); report = invocationBuilder.get(StatisticsReport.class); - validateStatisticsReport(report, 1, 200); + validateStatisticsReport(report, 200); ApiStatisticsManager.resetAllStatistics(); } catch (final Exception exp) { LOGGER.error("testApiStatistics_200 failed", exp); @@ -161,7 +161,7 @@ public class TestApiRestServer { restServer.start(); final Invocation.Builder invocationBuilder = sendHttpRequest(STATISTICS_ENDPOINT); final StatisticsReport report = invocationBuilder.get(StatisticsReport.class); - validateStatisticsReport(report, 0, 500); + validateStatisticsReport(report, 500); ApiStatisticsManager.resetAllStatistics(); } catch (final Exception exp) { LOGGER.error("testApiStatistics_500 failed", exp); @@ -175,7 +175,7 @@ public class TestApiRestServer { main = startApiService(false); final Invocation.Builder invocationBuilder = sendHttpsRequest(STATISTICS_ENDPOINT); final StatisticsReport report = invocationBuilder.get(StatisticsReport.class); - validateStatisticsReport(report, 0, 200); + validateStatisticsReport(report, 200); } catch (final Exception exp) { LOGGER.error("testHttpsApiStatistics failed", exp); fail("Test should not throw an exception"); @@ -283,23 +283,8 @@ public class TestApiRestServer { ApiStatisticsManager.updatePolicyTypePostFailureCount(); } - private void validateStatisticsReport(final StatisticsReport report, final int count, final int code) { + private void validateStatisticsReport(final StatisticsReport report, final int code) { assertEquals(code, report.getCode()); - assertEquals(count, report.getTotalApiCallCount()); - assertEquals(count, report.getApiCallSuccessCount()); - assertEquals(count, report.getApiCallFailureCount()); - assertEquals(count, report.getTotalPolicyGetCount()); - assertEquals(count, report.getTotalPolicyPostCount()); - assertEquals(count, report.getTotalPolicyTypeGetCount()); - assertEquals(count, report.getTotalPolicyTypePostCount()); - assertEquals(count, report.getPolicyGetSuccessCount()); - assertEquals(count, report.getPolicyGetFailureCount()); - assertEquals(count, report.getPolicyPostSuccessCount()); - assertEquals(count, report.getPolicyPostFailureCount()); - assertEquals(count, report.getPolicyTypeGetSuccessCount()); - assertEquals(count, report.getPolicyTypeGetFailureCount()); - assertEquals(count, report.getPolicyTypePostSuccessCount()); - assertEquals(count, report.getPolicyTypePostFailureCount()); } private void validateHealthCheckReport(final String name, final String url, final boolean healthy, final int code, diff --git a/main/src/test/java/org/onap/policy/api/main/exception/PolicyApiRuntimeExceptionTest.java b/main/src/test/java/org/onap/policy/api/main/rest/provider/TestLegacyGuardPolicyProvider.java index f6770b1e..8f4f9aed 100644 --- a/main/src/test/java/org/onap/policy/api/main/exception/PolicyApiRuntimeExceptionTest.java +++ b/main/src/test/java/org/onap/policy/api/main/rest/provider/TestLegacyGuardPolicyProvider.java @@ -1,6 +1,8 @@ /*- * ============LICENSE_START======================================================= - * Copyright (C) 2019 IBM. + * ONAP Policy API + * ================================================================================ + * 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. @@ -18,26 +20,7 @@ * ============LICENSE_END========================================================= */ -package org.onap.policy.api.main.exception; - -import static org.junit.Assert.assertEquals; - -import org.junit.Before; -import org.junit.Test; -public class PolicyApiRuntimeExceptionTest { +package org.onap.policy.api.main.rest.provider; - private PolicyApiRuntimeException policyApiRuntimeException; - private String message = "test exception message"; - - @Before - public void setUp() { - policyApiRuntimeException = new PolicyApiRuntimeException(message); - } - - @Test - public void testContructor() { - policyApiRuntimeException = new PolicyApiRuntimeException(message, new Exception()); - assertEquals(message, policyApiRuntimeException.getMessage()); - } -} +public class TestLegacyGuardPolicyProvider {} diff --git a/main/src/test/java/org/onap/policy/api/main/rest/provider/TestLegacyOperationalPolicyProvider.java b/main/src/test/java/org/onap/policy/api/main/rest/provider/TestLegacyOperationalPolicyProvider.java new file mode 100644 index 00000000..de12fca0 --- /dev/null +++ b/main/src/test/java/org/onap/policy/api/main/rest/provider/TestLegacyOperationalPolicyProvider.java @@ -0,0 +1,26 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP Policy API + * ================================================================================ + * 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. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + + +package org.onap.policy.api.main.rest.provider; + +public class TestLegacyOperationalPolicyProvider {} diff --git a/main/src/test/java/org/onap/policy/api/main/rest/provider/TestPolicyProvider.java b/main/src/test/java/org/onap/policy/api/main/rest/provider/TestPolicyProvider.java new file mode 100644 index 00000000..11d7e404 --- /dev/null +++ b/main/src/test/java/org/onap/policy/api/main/rest/provider/TestPolicyProvider.java @@ -0,0 +1,25 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP Policy API + * ================================================================================ + * 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. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.api.main.rest.provider; + +public class TestPolicyProvider {} diff --git a/main/src/test/java/org/onap/policy/api/main/rest/provider/TestPolicyTypeProvider.java b/main/src/test/java/org/onap/policy/api/main/rest/provider/TestPolicyTypeProvider.java new file mode 100644 index 00000000..d60dc2e5 --- /dev/null +++ b/main/src/test/java/org/onap/policy/api/main/rest/provider/TestPolicyTypeProvider.java @@ -0,0 +1,25 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP Policy API + * ================================================================================ + * 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. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.api.main.rest.provider; + +public class TestPolicyTypeProvider {} diff --git a/main/src/test/resources/META-INF/persistence.xml b/main/src/test/resources/META-INF/persistence.xml new file mode 100644 index 00000000..23e8567f --- /dev/null +++ b/main/src/test/resources/META-INF/persistence.xml @@ -0,0 +1,74 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ============LICENSE_START======================================================= + Copyright (C) 2019 Nordix Foundation. + ================================================================================ + 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. + + SPDX-License-Identifier: Apache-2.0 + ============LICENSE_END========================================================= +--> + +<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0"> + <persistence-unit name="ToscaConceptTest" transaction-type="RESOURCE_LOCAL"> + <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> + + <class>org.onap.policy.models.dao.converters.CDataConditioner</class> + <class>org.onap.policy.models.dao.converters.Uuid2String</class> + <class>org.onap.policy.models.base.PfConceptKey</class> + <class>org.onap.policy.models.tosca.simple.concepts.JpaToscaPolicyType</class> + <class>org.onap.policy.models.tosca.simple.concepts.JpaToscaPolicy</class> + + <properties> + <property name="javax.persistence.jdbc.driver" value="org.h2.Driver" /> + <property name="javax.persistence.jdbc.url" value="jdbc:h2:mem:testdb" /> + <property name="javax.persistence.jdbc.user" value="policy" /> + <property name="javax.persistence.jdbc.password" value="P01icY" /> + <property name="eclipselink.ddl-generation" value="drop-and-create-tables" /> + <property name="eclipselink.ddl-generation.output-mode" value="database" /> + <property name="eclipselink.logging.level" value="INFO" /> + </properties> + </persistence-unit> + + <persistence-unit name="ToscaConceptMariaDBTest" transaction-type="RESOURCE_LOCAL"> + <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> + + <class>org.onap.policy.models.dao.converters.CDataConditioner</class> + <class>org.onap.policy.models.dao.converters.Uuid2String</class> + <class>org.onap.policy.models.base.PfConceptKey</class> + <class>org.onap.policy.models.tosca.simple.concepts.JpaToscaPolicy</class> + + <properties> + <property name="javax.persistence.jdbc.driver" value="org.mariadb.jdbc.Driver" /> + <property name="javax.persistence.jdbc.url" value="jdbc:mariadb://localhost:3306/policy" /> + <property name="javax.persistence.jdbc.user" value="policy" /> + <property name="javax.persistence.jdbc.password" value="P01icY" /> + <property name="javax.persistence.schema-generation.database.action" value="create" /> + + <!-- property name="eclipselink.logging.level" value="ALL" /> + <property name="eclipselink.logging.level.jpa" value="ALL" /> + <property name="eclipselink.logging.level.ddl" value="ALL" /> + <property name="eclipselink.logging.level.connection" value="ALL" /> + <property name="eclipselink.logging.level.sql" value="ALL" /> + <property name="eclipselink.logging.level.transaction" value="ALL" /> + <property name="eclipselink.logging.level.sequencing" value="ALL" /> + <property name="eclipselink.logging.level.server" value="ALL" /> + <property name="eclipselink.logging.level.query" value="ALL" /> + <property name="eclipselink.logging.level.properties" value="ALL" /--> + + <property name="eclipselink.ddl-generation" value="drop-and-create-tables" /> + <property name="eclipselink.ddl-generation.output-mode" value="database" /> + <property name="eclipselink.logging.level" value="INFO" /> + </properties> + </persistence-unit> +</persistence> diff --git a/main/src/test/resources/parameters/ApiConfigParameters.json b/main/src/test/resources/parameters/ApiConfigParameters.json index 8fae1238..c64271c7 100644 --- a/main/src/test/resources/parameters/ApiConfigParameters.json +++ b/main/src/test/resources/parameters/ApiConfigParameters.json @@ -5,5 +5,13 @@ "port":6969, "userName":"healthcheck", "password":"zb!XztG34" + }, + "databaseProviderParameters": { + "name": "PolicyProviderParameterGroup", + "implementation": "org.onap.policy.models.provider.impl.DatabasePolicyModelsProviderImpl", + "databaseUrl": "jdbc:mariadb://localhost:3306/policy", + "databaseUser": "policy", + "databasePassword": "UDAxaWNZ", + "persistenceUnit": "ToscaConceptMariaDBTest" } } diff --git a/main/src/test/resources/parameters/ApiConfigParameters_Https.json b/main/src/test/resources/parameters/ApiConfigParameters_Https.json index ec732132..878dc1ff 100644 --- a/main/src/test/resources/parameters/ApiConfigParameters_Https.json +++ b/main/src/test/resources/parameters/ApiConfigParameters_Https.json @@ -6,5 +6,13 @@ "userName":"healthcheck", "password":"zb!XztG34", "https":true + }, + "databaseProviderParameters": { + "name": "PolicyProviderParameterGroup", + "implementation": "org.onap.policy.models.provider.impl.DatabasePolicyModelsProviderImpl", + "databaseUrl": "jdbc:h2:mem:testdb", + "databaseUser": "policy", + "databasePassword": "UDAxaWNZ", + "persistenceUnit": "ToscaConceptTest" } } diff --git a/main/src/test/resources/parameters/ApiConfigParameters_InvalidRestServerParameters.json b/main/src/test/resources/parameters/ApiConfigParameters_InvalidRestServerParameters.json index 2d394fbc..67e461e0 100644 --- a/main/src/test/resources/parameters/ApiConfigParameters_InvalidRestServerParameters.json +++ b/main/src/test/resources/parameters/ApiConfigParameters_InvalidRestServerParameters.json @@ -5,5 +5,13 @@ "port":-1, "userName":"", "password":"" + }, + "databaseProviderParameters": { + "name": "PolicyProviderParameterGroup", + "implementation": "org.onap.policy.models.provider.impl.DatabasePolicyModelsProviderImpl", + "databaseUrl": "jdbc:h2:mem:testdb", + "databaseUser": "policy", + "databasePassword": "UDAxaWNZ", + "persistenceUnit": "ToscaConceptTest" } } diff --git a/main/src/test/resources/parameters/MinimumParameters.json b/main/src/test/resources/parameters/MinimumParameters.json index 61c6c869..2600d20f 100644 --- a/main/src/test/resources/parameters/MinimumParameters.json +++ b/main/src/test/resources/parameters/MinimumParameters.json @@ -5,5 +5,13 @@ "port":6969, "userName":"healthcheck", "password":"zb!XztG34" + }, + "databaseProviderParameters": { + "name": "PolicyProviderParameterGroup", + "implementation": "org.onap.policy.models.provider.impl.DatabasePolicyModelsProviderImpl", + "databaseUrl": "jdbc:h2:mem:testdb", + "databaseUser": "policy", + "databasePassword": "UDAxaWNZ", + "persistenceUnit": "ToscaConceptTest" } } diff --git a/main/src/test/resources/parameters/NoParameters.json b/main/src/test/resources/parameters/NoParameters.json index 6b0805d3..ed2fbde2 100644 --- a/main/src/test/resources/parameters/NoParameters.json +++ b/main/src/test/resources/parameters/NoParameters.json @@ -4,5 +4,13 @@ "port":6969, "userName":"healthcheck", "password":"zb!XztG34" + }, + "databaseProviderParameters": { + "name": "PolicyProviderParameterGroup", + "implementation": "org.onap.policy.models.provider.impl.DatabasePolicyModelsProviderImpl", + "databaseUrl": "jdbc:h2:mem:testdb", + "databaseUser": "policy", + "databasePassword": "UDAxaWNZ", + "persistenceUnit": "ToscaConceptTest" } }
\ No newline at end of file diff --git a/main/src/test/resources/policies/vDNS.policy.guard.minmax.input.json b/main/src/test/resources/policies/vDNS.policy.guard.minmax.input.json index c62a229a..2dbfe8ce 100644 --- a/main/src/test/resources/policies/vDNS.policy.guard.minmax.input.json +++ b/main/src/test/resources/policies/vDNS.policy.guard.minmax.input.json @@ -1,5 +1,4 @@ { -{ "policy-id" : "guard.minmax.scaleout", "contents" : { "actor": "SO", diff --git a/main/src/test/resources/policytypes/onap.policies.monitoring.dcaegen2.collectors.datafile.datafile-app-server.json b/main/src/test/resources/policytypes/onap.policies.monitoring.dcaegen2.collectors.datafile.datafile-app-server.json new file mode 100644 index 00000000..26f4c021 --- /dev/null +++ b/main/src/test/resources/policytypes/onap.policies.monitoring.dcaegen2.collectors.datafile.datafile-app-server.json @@ -0,0 +1,28 @@ +{ + "tosca_definitions_version": "tosca_simple_yaml_1_0_0", + "policy_types": [ + { + "onap.policies.Monitoring": { + "derived_from": "tosca.policies.Root", + "description": "a base policy type for all policies that govern monitoring provision", + "version": "1.0.0" + } + }, + { + "onap.policies.monitoring.dcaegen2.collectors.datafile.datafile-app-server": { + "derived_from": "policy.nodes.Root", + "version": "1.0.0", + "properties": { + "buscontroller_feed_publishing_endpoint": { + "type": "string", + "description": "DMAAP Bus Controller feed endpoint" + }, + "datafile.policy": { + "type": "string", + "description": "datafile Policy JSON as string" + } + } + } + } + ] +}
\ No newline at end of file diff --git a/main/src/test/resources/policytypes/onap.policies.monitoring.dcaegen2.collectors.datafile.datafile-app-server.yaml b/main/src/test/resources/policytypes/onap.policies.monitoring.dcaegen2.collectors.datafile.datafile-app-server.yaml index 5a093ddb..63796fa3 100644 --- a/main/src/test/resources/policytypes/onap.policies.monitoring.dcaegen2.collectors.datafile.datafile-app-server.yaml +++ b/main/src/test/resources/policytypes/onap.policies.monitoring.dcaegen2.collectors.datafile.datafile-app-server.yaml @@ -1,17 +1,18 @@ tosca_definitions_version: tosca_simple_yaml_1_0_0 policy_types: - version: 1.0.0 - onap.policies.Monitoring: - derived_from: tosca.policies.Root - description: a base policy type for all policies that govern monitoring provision - version: 1.0.0 - onap.policies.monitoring.dcaegen2.collectors.datafile.datafile-app-server: - derived_from: policy.nodes.Root - version: 1.0.0 - properties: - buscontroller_feed_publishing_endpoint: - type: string - description: DMAAP Bus Controller feed endpoint - datafile.policy: - type: string - description: datafile Policy JSON as string + - + onap.policies.Monitoring: + derived_from: tosca.policies.Root + description: a base policy type for all policies that govern monitoring provision + version: 1.0.0 + - + onap.policies.monitoring.dcaegen2.collectors.datafile.datafile-app-server: + derived_from: policy.nodes.Root + version: 1.0.0 + properties: + buscontroller_feed_publishing_endpoint: + type: string + description: DMAAP Bus Controller feed endpoint + datafile.policy: + type: string + description: datafile Policy JSON as string
\ No newline at end of file diff --git a/main/src/test/resources/policytypes/onap.policy.monitoring.cdap.tca.hi.lo.app.json b/main/src/test/resources/policytypes/onap.policy.monitoring.cdap.tca.hi.lo.app.json new file mode 100644 index 00000000..95d7a53b --- /dev/null +++ b/main/src/test/resources/policytypes/onap.policy.monitoring.cdap.tca.hi.lo.app.json @@ -0,0 +1,223 @@ +{ + "tosca_definitions_version": "tosca_simple_yaml_1_0_0", + "policy_types": [ + { + "onap.policies.Monitoring": { + "derived_from": "tosca.policies.Root", + "description": "a base policy type for all policies that governs monitoring provisioning" + } + }, + { + "onap.policy.monitoring.cdap.tca.hi.lo.app": { + "derived_from": "onap.policies.Monitoring", + "version": "1.0.0", + "properties": { + "tca_policy": { + "type": "map", + "description": "TCA Policy JSON", + "entry_schema": { + "type": "onap.datatypes.monitoring.tca_policy" + } + } + } + } + } + ], + "data_types": [ + { + "onap.datatypes.monitoring.metricsPerEventName": { + "derived_from": "tosca.datatypes.Root", + "properties": { + "controlLoopSchemaType": { + "type": "string", + "required": true, + "description": "Specifies Control Loop Schema Type for the event Name e.g. VNF, VM", + "constraints": [ + { + "valid_values": [ + "VM", + "VNF" + ] + } + ] + }, + "eventName": { + "type": "string", + "required": true, + "description": "Event name to which thresholds need to be applied" + }, + "policyName": { + "type": "string", + "required": true, + "description": "TCA Policy Scope Name" + }, + "policyScope": { + "type": "string", + "required": true, + "description": "TCA Policy Scope" + }, + "policyVersion": { + "type": "string", + "required": true, + "description": "TCA Policy Scope Version" + }, + "thresholds": { + "type": "list", + "required": true, + "description": "Thresholds associated with eventName", + "entry_schema": { + "type": "onap.datatypes.monitoring.thresholds" + } + } + } + } + }, + { + "onap.datatypes.monitoring.tca_policy": { + "derived_from": "tosca.datatypes.Root", + "properties": { + "domain": { + "type": "string", + "required": true, + "description": "Domain name to which TCA needs to be applied", + "default": "measurementsForVfScaling", + "constraints": [ + { + "equal": "measurementsForVfScaling" + } + ] + }, + "metricsPerEventName": { + "type": "list", + "required": true, + "description": "Contains eventName and threshold details that need to be applied to given eventName", + "entry_schema": { + "type": "onap.datatypes.monitoring.metricsPerEventName" + } + } + } + } + }, + { + "onap.datatypes.monitoring.thresholds": { + "derived_from": "tosca.datatypes.Root", + "properties": { + "closedLoopControlName": { + "type": "string", + "required": true, + "description": "Closed Loop Control Name associated with the threshold" + }, + "closedLoopEventStatus": { + "type": "string", + "required": true, + "description": "Closed Loop Event Status of the threshold", + "constraints": [ + { + "valid_values": [ + "ONSET", + "ABATED" + ] + } + ] + }, + "direction": { + "type": "string", + "required": true, + "description": "Direction of the threshold", + "constraints": [ + { + "valid_values": [ + "LESS", + "LESS_OR_EQUAL", + "GREATER", + "GREATER_OR_EQUAL", + "EQUAL" + ] + } + ] + }, + "fieldPath": { + "type": "string", + "required": true, + "description": "Json field Path as per CEF message which needs to be analyzed for TCA", + "constraints": [ + { + "valid_values": [ + "$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta", + "$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsDelta", + "$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsDelta", + "$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsDelta", + "$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsDelta", + "$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsDelta", + "$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsDelta", + "$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsAccumulated", + "$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsAccumulated", + "$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsAccumulated", + "$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsAccumulated", + "$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated", + "$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsAccumulated", + "$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsAccumulated", + "$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsDelta", + "$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsDelta", + "$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsDelta", + "$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsDelta", + "$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsDelta", + "$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsDelta", + "$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsDelta", + "$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsAccumulated", + "$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsAccumulated", + "$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsAccumulated", + "$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsAccumulated", + "$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsAccumulated", + "$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsAccumulated", + "$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsAccumulated", + "$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuIdle", + "$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageInterrupt", + "$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageNice", + "$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSoftIrq", + "$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSteal", + "$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSystem", + "$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuWait", + "$.event.measurementsForVfScalingFields.cpuUsageArray[*].percentUsage", + "$.event.measurementsForVfScalingFields.meanRequestLatency", + "$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryBuffered", + "$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryCached", + "$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryConfigured", + "$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryFree", + "$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryUsed", + "$.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value" + ] + } + ] + }, + "severity": { + "type": "string", + "required": true, + "description": "Threshold Event Severity", + "constraints": [ + { + "valid_values": [ + "CRITICAL", + "MAJOR", + "MINOR", + "WARNING", + "NORMAL" + ] + } + ] + }, + "thresholdValue": { + "type": "integer", + "required": true, + "description": "Threshold value for the field Path inside CEF message" + }, + "version": { + "type": "string", + "required": true, + "description": "Version number associated with the threshold" + } + } + } + } + ] +}
\ No newline at end of file diff --git a/main/src/test/resources/policytypes/onap.policy.monitoring.cdap.tca.hi.lo.app.yaml b/main/src/test/resources/policytypes/onap.policy.monitoring.cdap.tca.hi.lo.app.yaml index 699cffd7..f8e9b752 100644 --- a/main/src/test/resources/policytypes/onap.policy.monitoring.cdap.tca.hi.lo.app.yaml +++ b/main/src/test/resources/policytypes/onap.policy.monitoring.cdap.tca.hi.lo.app.yaml @@ -1,8 +1,10 @@ tosca_definitions_version: tosca_simple_yaml_1_0_0 policy_types: + - onap.policies.Monitoring: derived_from: tosca.policies.Root description: a base policy type for all policies that governs monitoring provisioning + - onap.policy.monitoring.cdap.tca.hi.lo.app: derived_from: onap.policies.Monitoring version: 1.0.0 @@ -13,6 +15,7 @@ policy_types: entry_schema: type: onap.datatypes.monitoring.tca_policy data_types: + - onap.datatypes.monitoring.metricsPerEventName: derived_from: tosca.datatypes.Root properties: @@ -46,6 +49,7 @@ data_types: description: Thresholds associated with eventName entry_schema: type: onap.datatypes.monitoring.thresholds + - onap.datatypes.monitoring.tca_policy: derived_from: tosca.datatypes.Root properties: @@ -62,6 +66,7 @@ data_types: description: Contains eventName and threshold details that need to be applied to given eventName entry_schema: type: onap.datatypes.monitoring.metricsPerEventName + - onap.datatypes.monitoring.thresholds: derived_from: tosca.datatypes.Root properties: @@ -155,4 +160,4 @@ data_types: version: type: string required: true - description: Version number associated with the threshold + description: Version number associated with the threshold
\ No newline at end of file diff --git a/packages/policy-api-tarball/src/main/resources/etc/defaultConfig.json b/packages/policy-api-tarball/src/main/resources/etc/defaultConfig.json index f7aaf393..260fac52 100644 --- a/packages/policy-api-tarball/src/main/resources/etc/defaultConfig.json +++ b/packages/policy-api-tarball/src/main/resources/etc/defaultConfig.json @@ -7,5 +7,13 @@ "password": "zb!XztG34", "https": true, "aaf": false + }, + "databaseProviderParameters": { + "name": "PolicyProviderParameterGroup", + "implementation": "org.onap.policy.models.provider.impl.DatabasePolicyModelsProviderImpl", + "databaseUrl": "jdbc:mariadb://localhost:3306/policy", + "databaseUser": "policy", + "databasePassword": "UDAxaWNZ", + "persistenceUnit": "ToscaConceptMariaDBTest" } } diff --git a/packages/policy-api-tarball/src/main/resources/etc/s3pConfig.json b/packages/policy-api-tarball/src/main/resources/etc/s3pConfig.json index 6df43f77..e0ed3fb9 100644 --- a/packages/policy-api-tarball/src/main/resources/etc/s3pConfig.json +++ b/packages/policy-api-tarball/src/main/resources/etc/s3pConfig.json @@ -7,5 +7,13 @@ "password": "zb!XztG34", "https": true, "aaf": false + }, + "databaseProviderParameters": { + "name": "PolicyProviderParameterGroup", + "implementation": "org.onap.policy.models.provider.impl.DatabasePolicyModelsProviderImpl", + "databaseUrl": "jdbc:mariadb://localhost:3306/policy", + "databaseUser": "policy", + "databasePassword": "UDAxaWNZ", + "persistenceUnit": "ToscaConceptMariaDBTest" } }
\ No newline at end of file |