summaryrefslogtreecommitdiffstats
path: root/appc-dispatcher/appc-command-executor/appc-command-executor-core/src/main/java/org/onap/appc/executor/impl/CommandTask.java
diff options
context:
space:
mode:
Diffstat (limited to 'appc-dispatcher/appc-command-executor/appc-command-executor-core/src/main/java/org/onap/appc/executor/impl/CommandTask.java')
-rw-r--r--appc-dispatcher/appc-command-executor/appc-command-executor-core/src/main/java/org/onap/appc/executor/impl/CommandTask.java161
1 files changed, 138 insertions, 23 deletions
diff --git a/appc-dispatcher/appc-command-executor/appc-command-executor-core/src/main/java/org/onap/appc/executor/impl/CommandTask.java b/appc-dispatcher/appc-command-executor/appc-command-executor-core/src/main/java/org/onap/appc/executor/impl/CommandTask.java
index ca866575a..4a82ca6a8 100644
--- a/appc-dispatcher/appc-command-executor/appc-command-executor-core/src/main/java/org/onap/appc/executor/impl/CommandTask.java
+++ b/appc-dispatcher/appc-command-executor/appc-command-executor-core/src/main/java/org/onap/appc/executor/impl/CommandTask.java
@@ -24,59 +24,174 @@
package org.onap.appc.executor.impl;
-import org.onap.appc.executor.objects.CommandResponse;
+import org.onap.appc.domainmodel.lcm.Status;
+import org.onap.appc.domainmodel.lcm.VNFOperation;
+import org.onap.appc.executor.impl.objects.CommandRequest;
+import org.onap.appc.logging.LoggingConstants;
import org.onap.appc.requesthandler.RequestHandler;
import org.onap.appc.domainmodel.lcm.RuntimeContext;
import org.onap.appc.workflow.WorkFlowManager;
import org.onap.appc.workflow.objects.WorkflowRequest;
-import org.onap.appc.workflow.objects.WorkflowResponse;
import com.att.eelf.configuration.EELFLogger;
import com.att.eelf.configuration.EELFManager;
+import org.onap.ccsdk.sli.core.sli.SvcLogicContext;
+import org.onap.ccsdk.sli.core.sli.SvcLogicException;
+import org.onap.ccsdk.sli.core.sli.SvcLogicResource;
+import org.onap.ccsdk.sli.adaptors.aai.AAIService;
+import org.onap.ccsdk.sli.adaptors.aai.AAIServiceException;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.FrameworkUtil;
+import org.osgi.framework.ServiceReference;
+import org.slf4j.MDC;
+
+import java.net.InetAddress;
+
+import static com.att.eelf.configuration.Configuration.*;
+import static com.att.eelf.configuration.Configuration.MDC_SERVICE_INSTANCE_ID;
+import static com.att.eelf.configuration.Configuration.MDC_SERVICE_NAME;
/**
* This abstract class is base class for all Command tasks. All command task must inherit this class.
*/
-public abstract class CommandTask implements Runnable {
+public class CommandTask implements Runnable {
- protected final RequestHandler requestHandler;
- protected final WorkFlowManager workflowManager;
- protected final RuntimeContext commandRequest;
+ private RequestHandler requestHandler;
+ private WorkFlowManager workflowManager;
+ private CommandRequest commandRequest;
+ private AAIService aaiService;
- protected CommandTask(RuntimeContext commandRequest, RequestHandler requestHandler,
- WorkFlowManager workflowManager) {
- super();
+
+ public CommandRequest getCommandRequest() {
+ return commandRequest;
+ }
+
+ public void setCommandRequest(CommandRequest commandRequest) {
this.commandRequest = commandRequest;
- this.requestHandler = requestHandler;
- this.workflowManager = workflowManager;
}
- private static final EELFLogger logger = EELFManager.getInstance().getLogger(CommandTask.class);
+ private final EELFLogger logger = EELFManager.getInstance().getLogger(CommandTask.class);
- public void onRequestCompletion(CommandResponse response, boolean isAAIUpdated) {
- logger.debug("Entry: onRequestCompletion()");
- requestHandler.onRequestExecutionEnd(commandRequest, isAAIUpdated);
+ public void setWorkflowManager(WorkFlowManager workflowManager) {
+ this.workflowManager = workflowManager;
}
- public abstract void onRequestCompletion(CommandResponse response);
+ public void setRequestHandler(RequestHandler requestHandler) {
+ this.requestHandler = requestHandler;
+ }
- protected CommandResponse buildCommandResponse(WorkflowResponse response) {
+ public CommandTask(RequestHandler requestHandler,
+ WorkFlowManager workflowManager){
+ this.requestHandler = requestHandler;
+ this.workflowManager = workflowManager;
+ getAAIservice();
+ }
- return new CommandResponse(commandRequest);
+ private void getAAIservice() {
+ BundleContext bctx = FrameworkUtil.getBundle(AAIService.class).getBundleContext();
+ // Get AAIadapter reference
+ ServiceReference sref = bctx.getServiceReference(AAIService.class.getName());
+ if (sref != null) {
+ logger.info("AAIService from bundlecontext");
+ aaiService = (AAIService) bctx.getService(sref);
+ } else {
+ logger.info("AAIService error from bundlecontext");
+ logger.warn("Cannot find service reference for org.onap.ccsdk.sli.adaptors.aai.AAIService");
+
+ }
}
- public void execute() {
- final RuntimeContext runtimeContext = commandRequest;
+ @Override
+ public void run() {
+ logger.debug("Starting execution of command :"+ commandRequest);
+ setInitialLogProperties(commandRequest);
+ final RuntimeContext runtimeContext = commandRequest.getCommandExecutorInput().getRuntimeContext();
+
+
WorkflowRequest workflowRequest = new WorkflowRequest();
workflowRequest.setRequestContext(runtimeContext.getRequestContext());
workflowRequest.setResponseContext(runtimeContext.getResponseContext());
workflowRequest.setVnfContext(runtimeContext.getVnfContext());
+ logger.debug("Executing workflow :"+ workflowRequest);
+ workflowManager.executeWorkflow(workflowRequest);
+ logger.debug("Completed execution workflow with response:"+ commandRequest.getCommandExecutorInput().getRuntimeContext().getResponseContext());
+ try {
+ if (VNFOperation.Terminate == commandRequest.getCommandExecutorInput().getRuntimeContext().getRequestContext().getAction())
+ updateAAIForTerminate(commandRequest);
+ } catch (AAIServiceException e) {
+ logger.error("Exception = " + e);
+ // In case of any errors we are updating the response status code and message
+ Status updatedStatus = new Status();
+ updatedStatus.setCode(401);
+ updatedStatus.setMessage("Failed to update VNF status in A&AI");
+ commandRequest.getCommandExecutorInput().getRuntimeContext().getResponseContext().setStatus(updatedStatus);
+ throw new RuntimeException(e);
+ }finally {
+ requestHandler.onRequestExecutionEnd(commandRequest.getCommandExecutorInput().getRuntimeContext());
+ clearRequestLogProperties();
+ }
+ }
+
+ private void updateAAIForTerminate(CommandRequest commandRequest) throws AAIServiceException {
+ final int statusCode = commandRequest.getCommandExecutorInput().getRuntimeContext().getResponseContext().getStatus().getCode();
+
+ if (logger.isDebugEnabled()) {
+ logger.debug("Workflow Execution Status = "+ statusCode);
+ }
+ if (statusCode == 100 || statusCode == 400) {
+ SvcLogicContext ctx = new SvcLogicContext();
+ ctx = getVnfdata(commandRequest.getCommandExecutorInput().getRuntimeContext().getVnfContext().getId(), "vnf", ctx);
+ aaiService.deleteGenericVnfData(commandRequest.getCommandExecutorInput().getRuntimeContext().getVnfContext().getId(), ctx.getAttribute("vnf.resource-version"));
- WorkflowResponse response = workflowManager.executeWorkflow(workflowRequest);
+ }
+ }
- CommandResponse commandResponse = buildCommandResponse(response);
- this.onRequestCompletion(commandResponse);
+ private SvcLogicContext getVnfdata(String vnf_id, String prefix,SvcLogicContext ctx) {
+ String key="generic-vnf.vnf-id = '"+ vnf_id+"'"+" AND http-header.Real-Time = 'true'";
+ logger.debug("inside getVnfdata=== "+key);
+ try {
+ SvcLogicResource.QueryStatus response = aaiService.query("generic-vnf", false, null, key,prefix, null, ctx);
+ if(SvcLogicResource.QueryStatus.NOT_FOUND.equals(response)){
+ logger.warn("VNF " + vnf_id + " not found while updating A&AI");
+ throw new RuntimeException("VNF not found for vnf_id = "+ vnf_id);
+ }
+ else if(SvcLogicResource.QueryStatus.FAILURE.equals(response)){
+ throw new RuntimeException("Error Querying AAI with vnfID = " +vnf_id);
+ }
+ logger.info("AAIResponse: " + response.toString());
+ } catch (SvcLogicException e) {
+ logger.error("Error in getVnfdata "+ e);
+ throw new RuntimeException(e);
+ }
+ return ctx;
}
+
+ private void setInitialLogProperties(CommandRequest request) {
+ MDC.put(MDC_KEY_REQUEST_ID, request.getCommandExecutorInput().getRuntimeContext().getRequestContext().getCommonHeader().getRequestId());
+ if (request.getCommandExecutorInput().getRuntimeContext().getRequestContext().getActionIdentifiers().getServiceInstanceId() != null)
+ MDC.put(MDC_SERVICE_INSTANCE_ID, request.getCommandExecutorInput().getRuntimeContext().getRequestContext().getActionIdentifiers().getServiceInstanceId());
+ MDC.put(LoggingConstants.MDCKeys.PARTNER_NAME, request.getCommandExecutorInput().getRuntimeContext().getRequestContext().getCommonHeader().getOriginatorId());
+ MDC.put(MDC_SERVICE_NAME, request.getCommandExecutorInput().getRuntimeContext().getRequestContext().getAction().name());
+ try {
+ MDC.put(MDC_SERVER_FQDN, InetAddress.getLocalHost().getCanonicalHostName());
+ MDC.put(MDC_SERVER_IP_ADDRESS, InetAddress.getLocalHost().getHostAddress());
+ } catch (Exception e) {
+ logger.error(e.getMessage(),e);
+ }
+ MDC.put(MDC_INSTANCE_UUID, ""); // make instanse_UUID generation once during APPC-instanse deploying
+ }
+
+ private void clearRequestLogProperties()
+ {
+ try {
+ MDC.remove(MDC_KEY_REQUEST_ID);
+ MDC.remove(MDC_SERVICE_INSTANCE_ID);
+ MDC.remove(MDC_SERVICE_NAME);
+ MDC.remove(LoggingConstants.MDCKeys.PARTNER_NAME);
+ } catch (Exception e) {
+ logger.error(e.getMessage(),e);
+ }
+ }
}