summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormicdzied <michal.1.dziedzic@nokia.com>2018-05-07 08:42:44 +0200
committermicdzied <michal.1.dziedzic@nokia.com>2018-05-07 12:43:40 +0200
commit7e7aa0c165665f74b628ba5c95fb3cdae72f4449 (patch)
tree737fe8068a44e7e297c305af1ff699b1f53a7c5e
parentee36c363b3c90055d9b10059775a9d54a76f767a (diff)
creating swagger documentation
Change-Id: I8ca3faf2e6afb7add2785add2ac9096ded98f591 Issue-ID: DCAEGEN2-468 Signed-off-by: micdzied <michal.1.dziedzic@nokia.com>
-rw-r--r--pom.xml12
-rw-r--r--prh-app-server/pom.xml21
-rw-r--r--prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/configuration/SwaggerConfig.java77
-rw-r--r--prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/controllers/HeartbeatController.java13
-rw-r--r--prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/controllers/ScheduleController.java8
-rw-r--r--swagger.yaml76
6 files changed, 195 insertions, 12 deletions
diff --git a/pom.xml b/pom.xml
index ccbf9aea..37c742ff 100644
--- a/pom.xml
+++ b/pom.xml
@@ -546,6 +546,18 @@
<scope>test</scope>
</dependency>
+ <!--REQUIRED TO GENERATE DOCUMENTATION -->
+ <dependency>
+ <groupId>io.springfox</groupId>
+ <artifactId>springfox-swagger2</artifactId>
+ <version>2.8.0</version>
+ </dependency>
+ <dependency>
+ <groupId>io.springfox</groupId>
+ <artifactId>springfox-swagger-ui</artifactId>
+ <version>2.8.0</version>
+ </dependency>
+
<!-- ONLY REQUIRED TO RUN TESTS IN AN IDE THAT BUNDLES AN OLDER VERSION -->
<dependency>
<groupId>org.junit.platform</groupId>
diff --git a/prh-app-server/pom.xml b/prh-app-server/pom.xml
index cb85db11..668b729a 100644
--- a/prh-app-server/pom.xml
+++ b/prh-app-server/pom.xml
@@ -108,22 +108,10 @@
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
- <exclusions>
- <exclusion>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-json</artifactId>
- </exclusion>
- </exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
- <exclusions>
- <exclusion>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-json</artifactId>
- </exclusion>
- </exclusions>
</dependency>
<dependency>
<groupId>com.spotify</groupId>
@@ -237,6 +225,15 @@
<artifactId>prh-aai-client</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>
+ <!--REQUIRED TO GENERATE DOCUMENTATION -->
+ <dependency>
+ <groupId>io.springfox</groupId>
+ <artifactId>springfox-swagger2</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>io.springfox</groupId>
+ <artifactId>springfox-swagger-ui</artifactId>
+ </dependency>
</dependencies>
<dependencyManagement>
diff --git a/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/configuration/SwaggerConfig.java b/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/configuration/SwaggerConfig.java
new file mode 100644
index 00000000..ffa6b465
--- /dev/null
+++ b/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/configuration/SwaggerConfig.java
@@ -0,0 +1,77 @@
+/*
+ * ============LICENSE_START=======================================================
+ * PNF-REGISTRATION-HANDLER
+ * ================================================================================
+ * Copyright (C) 2018 NOKIA Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+package org.onap.dcaegen2.services.prh.configuration;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Profile;
+import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
+import springfox.documentation.builders.ApiInfoBuilder;
+import springfox.documentation.builders.PathSelectors;
+import springfox.documentation.builders.RequestHandlerSelectors;
+import springfox.documentation.service.ApiInfo;
+import springfox.documentation.spi.DocumentationType;
+import springfox.documentation.spring.web.plugins.Docket;
+import springfox.documentation.swagger2.annotations.EnableSwagger2;
+
+
+@EnableSwagger2
+@Configuration
+@Profile("prod")
+public class SwaggerConfig extends WebMvcConfigurationSupport {
+
+ public static final String PACKAGE_PATH = "org.onap.dcaegen2.services.prh";
+ public static final String API_TITLE = "PRH app server";
+ public static final String DESCRIPTION = "This page lists all the rest apis for PRH app server.";
+ public static final String VERSION = "1.0";
+ public static final String RESOURCES_PATH = "classpath:/META-INF/resources/";
+ public static final String WEBJARS_PATH = RESOURCES_PATH + "webjars/";
+ public static final String SWAGGER_UI = "swagger-ui.html";
+ public static final String WEBJARS = "/webjars/**";
+
+ @Bean
+ public Docket api() {
+ return new Docket(DocumentationType.SWAGGER_2)
+ .apiInfo(apiInfo())
+ .select()
+ .apis(RequestHandlerSelectors.basePackage(PACKAGE_PATH))
+ .paths(PathSelectors.any())
+ .build();
+ }
+
+ private ApiInfo apiInfo() {
+ return new ApiInfoBuilder()
+ .title(API_TITLE)
+ .description(DESCRIPTION)
+ .version(VERSION)
+ .build();
+ }
+
+
+ @Override
+ protected void addResourceHandlers(ResourceHandlerRegistry registry) {
+ registry.addResourceHandler(SWAGGER_UI)
+ .addResourceLocations(RESOURCES_PATH);
+
+ registry.addResourceHandler(WEBJARS)
+ .addResourceLocations(WEBJARS_PATH);
+ }
+} \ No newline at end of file
diff --git a/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/controllers/HeartbeatController.java b/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/controllers/HeartbeatController.java
index b91b56c5..05b91840 100644
--- a/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/controllers/HeartbeatController.java
+++ b/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/controllers/HeartbeatController.java
@@ -19,6 +19,10 @@
*/
package org.onap.dcaegen2.services.prh.controllers;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiResponse;
+import io.swagger.annotations.ApiResponses;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
@@ -36,12 +40,21 @@ import reactor.core.publisher.Mono;
* @author <a href="mailto:przemyslaw.wasala@nokia.com">Przemysław Wąsala</a> on 4/19/18
*/
@RestController
+@Api(value = "HeartbeatController", description = "Check liveness of PRH service")
public class HeartbeatController {
private static final Logger logger = LoggerFactory.getLogger(PrhAppConfig.class);
private static final DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("HH:mm:ss");
@RequestMapping(value = "heartbeat", method = RequestMethod.GET)
+ @ApiOperation(value = "Returns liveness of PRH service")
+ @ApiResponses(value = {
+ @ApiResponse(code = 200, message = "PRH sevice is living"),
+ @ApiResponse(code = 401, message = "You are not authorized to view the resource"),
+ @ApiResponse(code = 403, message = "Accessing the resource you were trying to reach is forbidden"),
+ @ApiResponse(code = 404, message = "The resource you were trying to reach is not found")
+ }
+ )
public Mono<ResponseEntity<String>> heartbeat() {
logger.debug("Receiving request on on thread={} , time={} ", Thread.currentThread().getName(),
dateTimeFormatter.format(
diff --git a/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/controllers/ScheduleController.java b/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/controllers/ScheduleController.java
index 733b7dfc..60572cb3 100644
--- a/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/controllers/ScheduleController.java
+++ b/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/controllers/ScheduleController.java
@@ -19,6 +19,8 @@
*/
package org.onap.dcaegen2.services.prh.controllers;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
@@ -44,6 +46,7 @@ import reactor.core.publisher.Mono;
*/
@RestController
@Component
+@Api(value = "ScheduleController", description = "Schedule Controller")
public class ScheduleController {
private static final Logger logger = LoggerFactory.getLogger(PrhAppConfig.class);
@@ -62,17 +65,20 @@ public class ScheduleController {
}
@RequestMapping(value = "start", method = RequestMethod.GET)
+ @ApiOperation(value = "Start scheduling worker request")
public Mono<ResponseEntity<String>> startTasks() {
logDebug("Starting scheduling worker request on on thread={} , time={} ");
return Mono.fromSupplier(this::tryToStartTask).map(this::createStartTaskResponse);
}
@RequestMapping(value = "stopPrh", method = RequestMethod.GET)
+ @ApiOperation(value = "Stop scheduling worker request")
public Mono<ResponseEntity<String>> stopTask() {
logDebug("Stopping scheduling worker request on on thread={} , time={} ");
return getResponseFromCancellationOfTasks();
}
+ @ApiOperation(value = "Get response on stopping task execution")
private synchronized Mono<ResponseEntity<String>> getResponseFromCancellationOfTasks() {
scheduledFutureList.forEach(x -> x.cancel(false));
scheduledFutureList.clear();
@@ -82,6 +88,7 @@ public class ScheduleController {
});
}
+ @ApiOperation(value = "Start task if possible")
private synchronized boolean tryToStartTask() {
if (scheduledFutureList.isEmpty()) {
scheduledFutureList.add(taskScheduler
@@ -93,6 +100,7 @@ public class ScheduleController {
}
+ @ApiOperation(value = "Sends success or error response on starting task execution")
private ResponseEntity<String> createStartTaskResponse(boolean wasScheduled) {
if (wasScheduled) {
logDebug("Sending success response on starting task execution thread={} , time={} ");
diff --git a/swagger.yaml b/swagger.yaml
new file mode 100644
index 00000000..37040bc8
--- /dev/null
+++ b/swagger.yaml
@@ -0,0 +1,76 @@
+---
+swagger: '2.0'
+info:
+ description: This page lists all the rest apis for PRH app server.
+ version: '1.0'
+ title: PRH app server
+host: localhost:8100
+basePath: "/"
+tags:
+- name: heartbeat-controller
+ description: Check liveness of PRH service
+- name: schedule-controller
+ description: Schedule Controller
+paths:
+ "/heartbeat":
+ get:
+ tags:
+ - heartbeat-controller
+ summary: Returns liveness of PRH service
+ operationId: heartbeatUsingGET
+ produces:
+ - "*/*"
+ responses:
+ '200':
+ description: PRH sevice is living
+ schema:
+ "$ref": "#/definitions/Mono«ResponseEntity«string»»"
+ '401':
+ description: You are not authorized to view the resource
+ '403':
+ description: Accessing the resource you were trying to reach is forbidden
+ '404':
+ description: The resource you were trying to reach is not found
+ "/start":
+ get:
+ tags:
+ - schedule-controller
+ summary: Start scheduling worker request
+ operationId: startTasksUsingGET
+ produces:
+ - "*/*"
+ responses:
+ '200':
+ description: OK
+ schema:
+ "$ref": "#/definitions/Mono«ResponseEntity«string»»"
+ '401':
+ description: Unauthorized
+ '403':
+ description: Forbidden
+ '404':
+ description: Not Found
+ "/stopPrh":
+ get:
+ tags:
+ - schedule-controller
+ summary: Stop scheduling worker request
+ operationId: stopTaskUsingGET
+ produces:
+ - "*/*"
+ responses:
+ '200':
+ description: OK
+ schema:
+ "$ref": "#/definitions/Mono«ResponseEntity«string»»"
+ '401':
+ description: Unauthorized
+ '403':
+ description: Forbidden
+ '404':
+ description: Not Found
+definitions:
+ Mono«ResponseEntity«string»»:
+ type: object
+ title: Mono«ResponseEntity«string»»
+