1 package org.onap.so.bpmn.infrastructure.scripts
3 import com.fasterxml.jackson.databind.ObjectMapper
4 import org.apache.commons.lang3.StringUtils
5 import org.camunda.bpm.engine.delegate.DelegateExecution
6 import org.onap.so.beans.nsmf.EsrInfo
7 import org.onap.so.beans.nsmf.JobStatusResponse
8 import org.onap.so.beans.nsmf.NssiResponse
9 import org.onap.so.beans.nsmf.NssmfAdapterNBIRequest
10 import org.onap.so.beans.nsmf.ResponseDescriptor
11 import org.onap.so.beans.nsmf.ServiceInfo
12 import org.onap.so.beans.nsmf.SliceTaskInfo
13 import org.onap.so.beans.nsmf.SliceTaskParamsAdapter
14 import org.onap.so.beans.nsmf.oof.SubnetType
15 import org.onap.so.bpmn.common.scripts.AbstractServiceTaskProcessor
16 import org.onap.so.bpmn.common.scripts.ExceptionUtil
17 import org.onap.so.bpmn.common.scripts.NssmfAdapterUtils
18 import org.onap.so.bpmn.core.json.JsonUtils
19 import org.slf4j.Logger
20 import org.slf4j.LoggerFactory
23 class DoAllocateNSSI extends AbstractServiceTaskProcessor {
25 private static final Logger logger = LoggerFactory.getLogger(DoAllocateNSSI.class);
27 ExceptionUtil exceptionUtil = new ExceptionUtil()
29 JsonUtils jsonUtil = new JsonUtils()
31 ObjectMapper objectMapper = new ObjectMapper()
33 private NssmfAdapterUtils nssmfAdapterUtils = new NssmfAdapterUtils(httpClientFactory, jsonUtil)
35 private static final NSSMF_ALLOCATE_URL = "/api/rest/provMns/v1/NSS/SliceProfiles"
37 private static final NSSMF_QUERY_JOB_STATUS_URL = "/api/rest/provMns/v1/NSS/jobs/%s"
40 void preProcessRequest(DelegateExecution execution) {
41 logger.trace("Enter preProcessRequest()")
43 NssmfAdapterNBIRequest nbiRequest = execution.getVariable("nbiRequest") as NssmfAdapterNBIRequest
45 execution.setVariable("currentCycle", 0)
46 boolean isNSIOptionAvailable = execution.getVariable("isNSIOptionAvailable") as Boolean
48 if (!isNSIOptionAvailable) {
49 nbiRequest.serviceInfo.setActionType("allocate")
50 } else if (StringUtils.isBlank(nbiRequest.serviceInfo.nssiId)){
51 nbiRequest.serviceInfo.setActionType("allocate")
53 nbiRequest.serviceInfo.setActionType("modify")
55 execution.setVariable("nbiRequest", nbiRequest)
56 logger.trace("Exit preProcessRequest")
60 * send Create Request NSSMF
63 void sendCreateRequestNSSMF(DelegateExecution execution) {
64 NssmfAdapterNBIRequest nbiRequest = execution.getVariable("nbiRequest") as NssmfAdapterNBIRequest
65 String nssmfRequest = objectMapper.writeValueAsString(nbiRequest)
66 logger.debug("sendCreateRequestNSSMF: " + nssmfRequest)
68 String response = nssmfAdapterUtils.sendPostRequestNSSMF(execution, NSSMF_ALLOCATE_URL, nssmfRequest)
70 if (response != null) {
71 NssiResponse nssiResponse = objectMapper.readValue(response, NssiResponse.class)
72 execution.setVariable("nssiAllocateResult", nssiResponse)
75 execution.setVariable("serviceInfo", nbiRequest.getServiceInfo())
76 execution.setVariable("esrInfo", nbiRequest.getEsrInfo())
80 * query nssi allocate status
83 void queryNSSIStatus(DelegateExecution execution) {
84 NssmfAdapterNBIRequest nbiRequest = new NssmfAdapterNBIRequest()
85 NssiResponse nssiAllocateResult = execution.getVariable("nssiAllocateResult") as NssiResponse
86 String jobId = nssiAllocateResult.getJobId()
87 String nssiId = nssiAllocateResult.getNssiId()
89 ServiceInfo serviceInfo = execution.getVariable("serviceInfo") as ServiceInfo
90 serviceInfo.setNssiId(nssiId)
91 EsrInfo esrInfo = execution.getVariable("esrInfo") as EsrInfo
93 //nbiRequest.setResponseId(jobId)
94 nbiRequest.setServiceInfo(serviceInfo)
95 nbiRequest.setEsrInfo(esrInfo)
97 String endpoint = String.format(NSSMF_QUERY_JOB_STATUS_URL, jobId)
100 nssmfAdapterUtils.sendPostRequestNSSMF(execution, endpoint, objectMapper.writeValueAsString(nbiRequest))
102 logger.debug("nssmf response nssiAllocateStatus:" + response)
104 if (response != null) {
105 JobStatusResponse jobStatusResponse = objectMapper.readValue(response, JobStatusResponse.class)
106 if (StringUtils.isBlank(nssiId)) {
107 nssiAllocateResult.setNssiId(jobStatusResponse.getResponseDescriptor().getNssiId())
108 execution.setVariable("nssiAllocateResult", nssiAllocateResult)
111 execution.setVariable("nssiAllocateStatus", jobStatusResponse)
112 if (jobStatusResponse.getResponseDescriptor().getProgress() == 100) {
113 if (nssiId == null) {
114 nssiAllocateResult.setNssiId(jobStatusResponse.getResponseDescriptor().getNssiId())
116 execution.setVariable("jobFinished", true)
121 void prepareUpdateOrchestrationTask(DelegateExecution execution) {
122 logger.debug("Start prepareUpdateOrchestrationTask progress")
123 String requestMethod = "PUT"
125 SliceTaskParamsAdapter sliceParams =
126 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
127 JobStatusResponse jobStatusResponse = execution.getVariable("nssiAllocateStatus") as JobStatusResponse
128 ResponseDescriptor response = jobStatusResponse.getResponseDescriptor()
129 SubnetType subnetType = execution.getVariable("subnetType") as SubnetType
131 SliceTaskInfo sliceTaskInfo = execution.getVariable("sliceTaskInfo") as SliceTaskInfo
132 sliceTaskInfo.progress = response.getProgress()
133 sliceTaskInfo.status = response.getStatus().toLowerCase()
134 sliceTaskInfo.statusDescription = response.getStatusDescription()
135 updateNssiResult(sliceParams, subnetType, sliceTaskInfo)
137 execution.setVariable("CSSOT_paramJson", objectMapper.writeValueAsString(sliceParams))
138 execution.setVariable("CSSOT_requestMethod", requestMethod)
140 execution.setVariable("sliceTaskParams", sliceParams)
141 execution.setVariable("sliceTaskInfo", sliceTaskInfo)
143 logger.debug("Finish prepareUpdateOrchestrationTask progress")
146 private void updateNssiResult(SliceTaskParamsAdapter sliceTaskParams, SubnetType subnetType,
147 SliceTaskInfo sliceTaskInfo) {
148 switch (subnetType) {
150 sliceTaskParams.cnSliceTaskInfo = sliceTaskInfo
153 sliceTaskParams.anSliceTaskInfo = sliceTaskInfo
155 case SubnetType.TN_BH:
156 sliceTaskParams.tnBHSliceTaskInfo = sliceTaskInfo
158 case SubnetType.TN_FH:
159 sliceTaskParams.tnFHSliceTaskInfo = sliceTaskInfo
161 case SubnetType.TN_MH:
162 sliceTaskParams.tnMHSliceTaskInfo = sliceTaskInfo
167 void timeDelay(DelegateExecution execution) {
168 logger.trace("Enter timeDelay in DoAllocateNSSI()")
171 int currentCycle = execution.getVariable("currentCycle") as Integer
172 currentCycle = currentCycle + 1
173 if(currentCycle > 60)
175 logger.trace("Completed all the retry times... but still nssmf havent completed the creation process...")
176 exceptionUtil.buildAndThrowWorkflowException(execution, 500, "NSSMF creation didnt complete by time...")
178 execution.setVariable("currentCycle", currentCycle)
179 } catch(InterruptedException e) {
180 logger.info("Time Delay exception" + e)
182 logger.trace("Exit timeDelay in DoAllocateNSSI()")