From 13a84cadc80b9d1219ac04aa19cbde5352418760 Mon Sep 17 00:00:00 2001 From: Shadi Haidar Date: Fri, 15 Feb 2019 20:28:32 -0500 Subject: Add health and service endpoints Added two new APIs to chcek internal health and to check dependencies/external interfaces, which is postgres like existing /dcae-service-types does Issue-ID: DCAEGEN2-1134 Change-Id: If0d3bf8ed0cfa7cb8870e91ef32060ffa844f93a Signed-off-by: Shadi Haidar --- pom.xml | 2 +- src/gen/java/io/swagger/api/HealthCheckApi.java | 35 ++++++ .../java/io/swagger/api/ServiceHealthCheckApi.java | 138 +++++++++++++++++++++ .../onap/dcae/inventory/InventoryApplication.java | 4 + swagger_inventory.yaml | 27 +++- version.properties | 22 ++-- 6 files changed, 215 insertions(+), 13 deletions(-) create mode 100644 src/gen/java/io/swagger/api/HealthCheckApi.java create mode 100644 src/gen/java/io/swagger/api/ServiceHealthCheckApi.java diff --git a/pom.xml b/pom.xml index 594a846..f416b91 100644 --- a/pom.xml +++ b/pom.xml @@ -29,7 +29,7 @@ ECOMP is a trademark and service mark of AT&T Intellectual Property. org.onap.dcaegen2.platform inventory-api - 3.1.1 + 3.2.0 dcaegen2-platform-inventory-api diff --git a/src/gen/java/io/swagger/api/HealthCheckApi.java b/src/gen/java/io/swagger/api/HealthCheckApi.java new file mode 100644 index 0000000..54b2b9e --- /dev/null +++ b/src/gen/java/io/swagger/api/HealthCheckApi.java @@ -0,0 +1,35 @@ +/*- + * ============LICENSE_START======================================================= + * dcae-inventory + * ================================================================================ + * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ + +package io.swagger.api; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; +import javax.ws.rs.*; + +@Path("/healthcheck") +public class HealthCheckApi { + + @GET + @Path("/") + public Response dcaeServiceTypesGet() throws NotFoundException { + return Response.ok("OK", MediaType.TEXT_PLAIN).build(); + } + +} diff --git a/src/gen/java/io/swagger/api/ServiceHealthCheckApi.java b/src/gen/java/io/swagger/api/ServiceHealthCheckApi.java new file mode 100644 index 0000000..fc82ace --- /dev/null +++ b/src/gen/java/io/swagger/api/ServiceHealthCheckApi.java @@ -0,0 +1,138 @@ +/*- + * ============LICENSE_START======================================================= + * dcae-inventory + * ================================================================================ + * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ + +package io.swagger.api; + +import io.swagger.api.factories.DcaeServiceTypesApiServiceFactory; + +import io.swagger.annotations.ApiParam; + +import io.swagger.model.InlineResponse200; +import io.swagger.model.DCAEServiceType; +import io.swagger.model.DCAEServiceTypeRequest; + +import javax.validation.Valid; +import javax.ws.rs.core.*; +import javax.ws.rs.*; + +@Path("/servicehealth") +@Consumes({"application/json", "application/vnd.dcae.inventory.v1+json"}) +@Produces({"application/json", "application/vnd.dcae.inventory.v1+json"}) +@io.swagger.annotations.Api(description = "the dcae-service-types API") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaJerseyServerCodegen", date = "2016-04-18T20:16:22.119Z") +public class ServiceHealthCheckApi { + private final DcaeServiceTypesApiService delegate = DcaeServiceTypesApiServiceFactory.getDcaeServiceTypesApi(); + + @Context + UriInfo uriInfo; + + public static Link buildLinkForGet(UriInfo uriInfo, String rel, String typeName, Boolean onlyLatest, Boolean onlyActive, + String vnfType, String serviceId, String serviceLocation, String asdcServiceId, + String asdcResourceId, Integer offset, String application, String component, String owner) { + UriBuilder ub = uriInfo.getBaseUriBuilder().path(ServiceHealthCheckApi.class) + .path(ServiceHealthCheckApi.class, "dcaeServiceTypesGet"); + + if (typeName != null) { + ub.queryParam("typeName", typeName); + } + if (onlyLatest != null) { + ub.queryParam("onlyLatest", onlyLatest); + } + if (onlyActive != null) { + ub.queryParam("onlyActive", onlyActive); + } + if (vnfType != null) { + ub.queryParam("vnfType", vnfType); + } + if (serviceId != null) { + ub.queryParam("serviceId", serviceId); + } + if (serviceLocation != null) { + ub.queryParam("serviceLocation", serviceLocation); + } + if (asdcServiceId != null) { + ub.queryParam("asdcServiceId", asdcServiceId); + } + if (asdcResourceId != null) { + ub.queryParam("asdcResourceId", asdcResourceId); + } + if (offset != null) { + ub.queryParam("offset", offset); + } + if (application != null) { + ub.queryParam("application", application); + } + if (component != null) { + ub.queryParam("component", component); + } + if (owner != null) { + ub.queryParam("owner", owner); + } + + Link.Builder lb = Link.fromUri(ub.build()); + lb.rel(rel); + return lb.build(); + } + + @GET + @Path("/") + @Consumes({"application/json", "application/vnd.dcae.inventory.v1+json"}) + @Produces({"application/json", "application/vnd.dcae.inventory.v1+json"}) + @io.swagger.annotations.ApiOperation(value = "", notes = "Get a list of `DCAEServiceType` objects.", response = InlineResponse200.class, tags = {}) + @io.swagger.annotations.ApiResponses(value = { + @io.swagger.annotations.ApiResponse(code = 200, message = "List of `DCAEServiceType` objects", response = InlineResponse200.class)}) + public Response dcaeServiceTypesGet( + @ApiParam(value = "Filter by service type name. Wildcards matches with asterick(s) allowed.") @QueryParam("typeName") String typeName, + @ApiParam(value = "If set to true, query returns just the latest versions of DCAE service types. If set to false, then all versions are returned. Default is true") + @DefaultValue("true") @QueryParam("onlyLatest") Boolean onlyLatest, + @ApiParam(value = "If set to true, query returns only *active* DCAE service types. If set to false, then all DCAE service types are returned. Default is true") + @DefaultValue("true") @QueryParam("onlyActive") Boolean onlyActive, + @ApiParam(value = "Filter by associated vnf type. No wildcards, matches are explicit. This field is treated case insensitive.") + @QueryParam("vnfType") String vnfType, + @ApiParam(value = "Filter by assocaited service id. Instances with service id null or empty is always returned.") + @QueryParam("serviceId") String serviceId, + @ApiParam(value = "Filter by associated service location. Instances with service location null or empty is always returned.") + @QueryParam("serviceLocation") String serviceLocation, + @ApiParam(value = "Filter by associated asdc design service id. Setting this to `NONE` will return instances that have asdc service id set to null") + @QueryParam("asdcServiceId") String asdcServiceId, + @ApiParam(value = "Filter by associated asdc design resource id. Setting this to `NONE` will return instances that have asdc resource id set to null") + @QueryParam("asdcResourceId") String asdcResourceId, + @ApiParam(value = "Query resultset offset used for pagination (zero-based)") @QueryParam("offset") Integer offset, + @Context SecurityContext securityContext, + @ApiParam(value = "Filter by associated application.") @QueryParam("application") String application, + @ApiParam(value = "Filter by associated component or sub-application module.") @QueryParam("component") String component, + @ApiParam(value = "Filter by associated owner.") @QueryParam("owner") String owner + ) + throws NotFoundException { + return delegate.dcaeServiceTypesGet(typeName, onlyLatest, onlyActive, vnfType, serviceId, serviceLocation, + asdcServiceId, asdcResourceId, offset, uriInfo, securityContext, application, component, owner); + } + + public static Link buildLinkForGet(UriInfo uriInfo, String rel, String typeId) { + // This same method can be used for PUTs as well + + UriBuilder ub = uriInfo.getBaseUriBuilder().path(ServiceHealthCheckApi.class) + .path(ServiceHealthCheckApi.class, "dcaeServiceTypesTypeIdGet"); + Link.Builder lb = Link.fromUri(ub.build(typeId)); + lb.rel(rel); + return lb.build(); + } + +} diff --git a/src/main/java/org/onap/dcae/inventory/InventoryApplication.java b/src/main/java/org/onap/dcae/inventory/InventoryApplication.java index 259ce93..173d66b 100644 --- a/src/main/java/org/onap/dcae/inventory/InventoryApplication.java +++ b/src/main/java/org/onap/dcae/inventory/InventoryApplication.java @@ -37,6 +37,8 @@ import io.dropwizard.setup.Environment; import io.swagger.api.DcaeServiceTypesApi; import io.swagger.api.DcaeServicesApi; import io.swagger.api.DcaeServicesGroupbyApi; +import io.swagger.api.HealthCheckApi; +import io.swagger.api.ServiceHealthCheckApi; import io.swagger.api.factories.DcaeServicesApiServiceFactory; import io.swagger.jaxrs.config.BeanConfig; import io.swagger.jaxrs.listing.ApiListingResource; @@ -178,6 +180,8 @@ public class InventoryApplication extends Application { environment.jersey().register(new DcaeServicesApi()); environment.jersey().register(new DcaeServiceTypesApi()); environment.jersey().register(new DcaeServicesGroupbyApi()); + environment.jersey().register(new HealthCheckApi()); + environment.jersey().register(new ServiceHealthCheckApi()); // https://github.com/swagger-api/swagger-core/wiki/Swagger-Core-Jersey-2.X-Project-Setup-1.5 environment.jersey().register(new ApiListingResource()); diff --git a/swagger_inventory.yaml b/swagger_inventory.yaml index c06368d..f8de1dd 100644 --- a/swagger_inventory.yaml +++ b/swagger_inventory.yaml @@ -17,7 +17,7 @@ # ECOMP is a trademark and service mark of AT&T Intellectual Property. swagger: '2.0' info: - version: "3.1.1" + version: "3.2.0" title: DCAE Inventory API description: | DCAE Inventory is a web service that provides the following: @@ -356,6 +356,31 @@ paths: description: "Unknown DCAE service" schema: $ref: "#/definitions/ApiResponseMessage" + /servicehealth: + get: + summary: "Check for external dependencies for inventory." + description: "Get a list of `DCAEServiceType` objects." + operationId: "dcaeServiceTypesGet" + consumes: + - "application/json" + - "application/vnd.dcae.inventory.v1+json" + produces: + - "application/json" + - "application/vnd.dcae.inventory.v1+json" + responses: + 200: + description: "List of `DCAEServiceType` objects" + schema: + $ref: "#/definitions/InlineResponse200" + /healthcheck: + get: + summary: "" + description: "Basic test to check inventory internals, that process and web api are running." + produces: + - "text/plain" + responses: + 200: + description: "OK response to indicate success" definitions: DCAEServiceTypeRequest: type: "object" diff --git a/version.properties b/version.properties index 2f59e59..8eed1b7 100644 --- a/version.properties +++ b/version.properties @@ -1,11 +1,11 @@ -# Versioning variables -# Note that these variables cannot be structured (e.g. : version.release or version.snapshot etc... ) -# because they are used in Jenkins, whose plug-in doesn't support -major=3 -minor=1 -patch=1 -base_version=${major}.${minor}.${patch} -# Release must be completed with git revision # in Jenkins - -release_version=${base_version} -snapshot_version=${base_version}-SNAPSHOT +# Versioning variables +# Note that these variables cannot be structured (e.g. : version.release or version.snapshot etc... ) +# because they are used in Jenkins, whose plug-in doesn't support +major=3 +minor=2 +patch=0 +base_version=${major}.${minor}.${patch} +# Release must be completed with git revision # in Jenkins + +release_version=${base_version} +snapshot_version=${base_version}-SNAPSHOT -- cgit 1.2.3-korg