REST error codes
[nonrtric.git] / policy-agent / src / main / java / org / oransc / policyagent / controllers / ServiceController.java
index 3f775a5..35348c7 100644 (file)
@@ -23,6 +23,7 @@ package org.oransc.policyagent.controllers;
 import com.google.gson.Gson;
 import com.google.gson.GsonBuilder;
 
+import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiResponse;
 import io.swagger.annotations.ApiResponses;
@@ -31,6 +32,7 @@ import java.time.Duration;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
+
 import org.oransc.policyagent.exceptions.ServiceException;
 import org.oransc.policyagent.repository.Policies;
 import org.oransc.policyagent.repository.Policy;
@@ -48,6 +50,7 @@ import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
 @RestController
+@Api(tags = "Service registry and supervision")
 public class ServiceController {
 
     private final Services services;
@@ -66,9 +69,15 @@ public class ServiceController {
     @GetMapping("/services")
     @ApiOperation(value = "Returns service information")
     @ApiResponses(
-        value = {@ApiResponse(code = 200, message = "OK", response = ServiceStatus.class, responseContainer = "List")})
+        value = { //
+            @ApiResponse(code = 200, message = "OK", response = ServiceStatus.class, responseContainer = "List"), //
+            @ApiResponse(code = 404, message = "Service is not found", response = String.class)})
     public ResponseEntity<String> getServices(//
-        @RequestParam(name = "serviceName", required = false) String name) {
+        @RequestParam(name = "name", required = false) String name) {
+
+        if (name != null && this.services.get(name) == null) {
+            return new ResponseEntity<>("Service not found", HttpStatus.NOT_FOUND);
+        }
 
         Collection<ServiceStatus> servicesStatus = new ArrayList<>();
         synchronized (this.services) {
@@ -84,11 +93,15 @@ public class ServiceController {
     }
 
     private ServiceStatus toServiceStatus(Service s) {
-        return new ServiceStatus(s.getName(), s.getKeepAliveInterval().toSeconds(), s.timeSinceLastPing().toSeconds());
+        return new ServiceStatus(s.getName(), s.getKeepAliveInterval().toSeconds(), s.timeSinceLastPing().toSeconds(),
+            s.getCallbackUrl());
     }
 
     @ApiOperation(value = "Register a service")
-    @ApiResponses(value = {@ApiResponse(code = 200, message = "OK", response = String.class)})
+    @ApiResponses(
+        value = { //
+            @ApiResponse(code = 200, message = "OK", response = String.class),
+            @ApiResponse(code = 400, message = "Cannot parse the ServiceRegistrationInfo", response = String.class)})
     @PutMapping("/service")
     public ResponseEntity<String> putService(//
         @RequestBody ServiceRegistrationInfo registrationInfo) {
@@ -96,15 +109,18 @@ public class ServiceController {
             this.services.put(toService(registrationInfo));
             return new ResponseEntity<>("OK", HttpStatus.OK);
         } catch (Exception e) {
-            return new ResponseEntity<>(e.getMessage(), HttpStatus.NO_CONTENT);
+            return new ResponseEntity<>(e.getMessage(), HttpStatus.BAD_REQUEST);
         }
     }
 
     @ApiOperation(value = "Delete a service")
-    @ApiResponses(value = {@ApiResponse(code = 200, message = "OK")})
+    @ApiResponses(
+        value = { //
+            @ApiResponse(code = 204, message = "OK"),
+            @ApiResponse(code = 404, message = "Service not found", response = String.class)})
     @DeleteMapping("/services")
     public ResponseEntity<String> deleteService(//
-        @RequestParam(name = "serviceName", required = true) String serviceName) {
+        @RequestParam(name = "name", required = true) String serviceName) {
         try {
             Service service = removeService(serviceName);
             // Remove the policies from the repo and let the consistency monitoring
@@ -112,17 +128,18 @@ public class ServiceController {
             removePolicies(service);
             return new ResponseEntity<>("OK", HttpStatus.NO_CONTENT);
         } catch (Exception e) {
-            return new ResponseEntity<>(e.getMessage(), HttpStatus.NO_CONTENT);
+            return new ResponseEntity<>(e.getMessage(), HttpStatus.NOT_FOUND);
         }
     }
 
-    @ApiOperation(value = "Keep the poilicies alive for a service")
+    @ApiOperation(value = "Keep the policies alive for a service")
     @ApiResponses(
-        value = {@ApiResponse(code = 200, message = "Policies timeout supervision refreshed"),
+        value = { //
+            @ApiResponse(code = 200, message = "Policies timeout supervision refreshed"),
             @ApiResponse(code = 404, message = "The service is not found, needs re-registration")})
     @PostMapping("/services/keepalive")
     public ResponseEntity<String> keepAliveService(//
-        @RequestParam(name = "serviceName", required = true) String serviceName) {
+        @RequestParam(name = "name", required = true) String serviceName) {
         try {
             services.getService(serviceName).ping();
             return new ResponseEntity<>("OK", HttpStatus.OK);