Handle expection in REST handler 70/83770/3
authorAlexis de Talhouët <adetalhouet89@gmail.com>
Fri, 29 Mar 2019 19:28:17 +0000 (15:28 -0400)
committerAlexis de Talhouët <adetalhouet89@gmail.com>
Tue, 2 Apr 2019 16:10:49 +0000 (16:10 +0000)
Change-Id: Iacd46791b276266e19898b187d1ffbe8afa9156c
Issue-ID: CCSDK-1120
Signed-off-by: Alexis de Talhouët <adetalhouet89@gmail.com>
ms/blueprintsprocessor/modules/commons/processor-core/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/core/api/data/BlueprintProcessorData.kt
ms/blueprintsprocessor/modules/inbounds/selfservice-api/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/selfservice/api/ExecutionServiceHandler.kt
ms/blueprintsprocessor/modules/services/execution-service/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/services/execution/AbstractComponentFunction.kt

index fb6a083..badd700 100644 (file)
@@ -86,7 +86,7 @@ open class Status {
     @get:ApiModelProperty(required = true)
     var code: Int = 200
     @get:ApiModelProperty(required = true)
-    var eventType: String = "EVENT-ACTION-RESPONSE"
+    var eventType: String = ""
     @get:ApiModelProperty(required = true, example = "2012-04-23T18:25:43.511Z")
     @get:JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")
     var timestamp: Date = Date()
index 2743469..1e09bee 100644 (file)
@@ -62,7 +62,7 @@ class ExecutionServiceHandler(private val bluePrintPathConfiguration: BluePrintP
             return bluePrintCatalogService.saveToDatabase(saveId, compressedFile, true)
         } catch (e: IOException) {
             throw BluePrintException(ErrorCode.IO_FILE_INTERRUPT.value,
-                    "Error in Upload CBA: ${e.message}", e)
+                "Error in Upload CBA: ${e.message}", e)
         } finally {
             deleteNBDir(blueprintArchive)
             deleteNBDir(blueprintWorking)
@@ -90,41 +90,42 @@ class ExecutionServiceHandler(private val bluePrintPathConfiguration: BluePrintP
                 responseObserver.onCompleted()
             }
             else -> responseObserver.onNext(response(executionServiceInput,
-                    "Failed to process request, 'actionIdentifiers.mode' not specified. Valid value are: 'sync' or 'async'.",
-                    true).toProto());
+                "Failed to process request, 'actionIdentifiers.mode' not specified. Valid value are: 'sync' or 'async'.",
+                true).toProto());
         }
     }
 
     suspend fun doProcess(executionServiceInput: ExecutionServiceInput): ExecutionServiceOutput {
         val requestId = executionServiceInput.commonHeader.requestId
         log.info("processing request id $requestId")
-
         val actionIdentifiers = executionServiceInput.actionIdentifiers
-
         val blueprintName = actionIdentifiers.blueprintName
         val blueprintVersion = actionIdentifiers.blueprintVersion
+        try {
+            val basePath = bluePrintCatalogService.getFromDatabase(blueprintName, blueprintVersion)
+            log.info("blueprint base path $basePath")
 
-        val basePath = bluePrintCatalogService.getFromDatabase(blueprintName, blueprintVersion)
-        log.info("blueprint base path $basePath")
-
-        val blueprintRuntimeService = BluePrintMetadataUtils.getBluePrintRuntime(requestId, basePath.toString())
+            val blueprintRuntimeService = BluePrintMetadataUtils.getBluePrintRuntime(requestId, basePath.toString())
 
-        val output = bluePrintWorkflowExecutionService.executeBluePrintWorkflow(blueprintRuntimeService,
+            val output = bluePrintWorkflowExecutionService.executeBluePrintWorkflow(blueprintRuntimeService,
                 executionServiceInput, hashMapOf())
 
-        val errors = blueprintRuntimeService.getBluePrintError().errors
-        if (errors.isNotEmpty()) {
-            val errorMessage = errors.stream().map { it.toString() }.collect(Collectors.joining(", "))
-            setErrorStatus(errorMessage, output.status)
+            val errors = blueprintRuntimeService.getBluePrintError().errors
+            if (errors.isNotEmpty()) {
+                val errorMessage = errors.stream().map { it.toString() }.collect(Collectors.joining(", "))
+                setErrorStatus(errorMessage, output.status)
+            }
+            return output
+        } catch (e: Exception) {
+            log.error("fail processing request id $requestId", e)
+            return response(executionServiceInput, e.localizedMessage, true)
         }
-
-        return output
     }
 
     private suspend fun copyFromFilePart(filePart: FilePart, targetFile: File): File {
         return filePart.transferTo(targetFile)
-                .thenReturn(targetFile)
-                .awaitSingle()
+            .thenReturn(targetFile)
+            .awaitSingle()
     }
 
     private fun setErrorStatus(errorMessage: String, status: Status) {
@@ -139,10 +140,10 @@ class ExecutionServiceHandler(private val bluePrintPathConfiguration: BluePrintP
         val executionServiceOutput = ExecutionServiceOutput()
         executionServiceOutput.commonHeader = executionServiceInput.commonHeader
         executionServiceOutput.actionIdentifiers = executionServiceInput.actionIdentifiers
-        executionServiceOutput.payload = JsonNodeFactory.instance.objectNode()
 
         val status = Status()
         if (failure) {
+            executionServiceOutput.payload = JsonNodeFactory.instance.objectNode()
             setErrorStatus(errorMessage, status)
         } else {
             status.eventType = EventType.EVENT_COMPONENT_PROCESSING.name
index e78e875..14feb28 100644 (file)
@@ -22,6 +22,7 @@ import com.fasterxml.jackson.databind.JsonNode
 import org.onap.ccsdk.cds.blueprintsprocessor.core.api.data.ExecutionServiceInput
 import org.onap.ccsdk.cds.blueprintsprocessor.core.api.data.ExecutionServiceOutput
 import org.onap.ccsdk.cds.blueprintsprocessor.core.api.data.Status
+import org.onap.ccsdk.cds.controllerblueprints.common.api.EventType
 import org.onap.ccsdk.cds.controllerblueprints.core.BluePrintConstants
 import org.onap.ccsdk.cds.controllerblueprints.core.BluePrintProcessorException
 import org.onap.ccsdk.cds.controllerblueprints.core.asObjectNode
@@ -97,7 +98,7 @@ abstract class AbstractComponentFunction : BlueprintFunctionNode<ExecutionServic
         log.info("Preparing Response...")
         executionServiceOutput.commonHeader = executionServiceInput.commonHeader
         executionServiceOutput.actionIdentifiers = executionServiceInput.actionIdentifiers
-        var status: Status?
+        var status = Status()
         try {
             // Resolve the Output Expression
             val stepOutputs = bluePrintRuntimeService
@@ -105,12 +106,12 @@ abstract class AbstractComponentFunction : BlueprintFunctionNode<ExecutionServic
 
             bluePrintRuntimeService.put("$stepName-step-outputs", stepOutputs.asObjectNode())
             // Set the Default Step Status
-            status = Status()
+            status.eventType = EventType.EVENT_COMPONENT_EXECUTED.name
         } catch (e: Exception) {
-            status = Status()
             status.message = BluePrintConstants.STATUS_FAILURE
+            status.eventType = EventType.EVENT_COMPONENT_FAILURE.name
         }
-        executionServiceOutput.status = status!!
+        executionServiceOutput.status = status
         return this.executionServiceOutput
     }