diff options
Diffstat (limited to 'vnfm-simulator/vnfm-service/src/main/java/org/onap/svnfm/simulator/services/SvnfmService.java')
-rw-r--r-- | vnfm-simulator/vnfm-service/src/main/java/org/onap/svnfm/simulator/services/SvnfmService.java | 167 |
1 files changed, 99 insertions, 68 deletions
diff --git a/vnfm-simulator/vnfm-service/src/main/java/org/onap/svnfm/simulator/services/SvnfmService.java b/vnfm-simulator/vnfm-service/src/main/java/org/onap/svnfm/simulator/services/SvnfmService.java index f7f4eaa4a2..21bb00dba7 100644 --- a/vnfm-simulator/vnfm-service/src/main/java/org/onap/svnfm/simulator/services/SvnfmService.java +++ b/vnfm-simulator/vnfm-service/src/main/java/org/onap/svnfm/simulator/services/SvnfmService.java @@ -21,22 +21,39 @@ package org.onap.svnfm.simulator.services; import java.lang.reflect.InvocationTargetException; -import java.util.Optional; +import java.util.List; +import java.util.UUID; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import org.modelmapper.ModelMapper; +import org.onap.so.adapters.vnfmadapter.extclients.vnfm.model.CreateVnfRequest; +import org.onap.so.adapters.vnfmadapter.extclients.vnfm.model.InlineResponse200; +import org.onap.so.adapters.vnfmadapter.extclients.vnfm.model.InlineResponse201; +import org.onap.so.adapters.vnfmadapter.extclients.vnfm.model.InlineResponse201.InstantiationStateEnum; +import org.onap.so.adapters.vnfmadapter.extclients.vnfm.model.InlineResponse201InstantiatedVnfInfo; +import org.onap.so.adapters.vnfmadapter.extclients.vnfm.model.InlineResponse201VimConnectionInfo; +import org.onap.so.adapters.vnfmadapter.extclients.vnfm.model.InstantiateVnfRequest; +import org.onap.so.adapters.vnfmadapter.extclients.vnfm.model.LccnSubscriptionRequest; +import org.onap.svnfm.simulator.config.ApplicationConfig; +import org.onap.svnfm.simulator.constants.Constant; import org.onap.svnfm.simulator.model.VnfInstance; -import org.onap.svnfm.simulator.model.VnfJob; +import org.onap.svnfm.simulator.model.VnfOperation; +import org.onap.svnfm.simulator.model.Vnfds; import org.onap.svnfm.simulator.notifications.VnfInstantiationNotification; import org.onap.svnfm.simulator.notifications.VnfmAdapterCreationNotification; -import org.onap.svnfm.simulator.repository.VnfJobRepository; +import org.onap.svnfm.simulator.repository.VnfOperationRepository; import org.onap.svnfm.simulator.repository.VnfmRepository; -import org.onap.vnfm.v1.model.CreateVnfRequest; -import org.onap.vnfm.v1.model.InlineResponse201; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cache.Cache; +import org.springframework.cache.CacheManager; +import org.springframework.cache.annotation.CachePut; +import org.springframework.cache.support.SimpleValueWrapper; import org.springframework.stereotype.Service; /** - * + * * @author Lathishbabu Ganesan (lathishbabu.ganesan@est.tech) * @author Ronan Kenny (ronan.kenny@est.tech) */ @@ -47,122 +64,136 @@ public class SvnfmService { VnfmRepository vnfmRepository; @Autowired - VnfJobRepository vnfJobRepository; + VnfOperationRepository vnfOperationRepository; @Autowired private VnfmHelper vnfmHelper; + @Autowired + ApplicationConfig applicationConfig; + + @Autowired + CacheManager cacheManager; + + @Autowired + Vnfds vnfds; + + @Autowired + SubscriptionService subscriptionService; + + private final ExecutorService executor = Executors.newCachedThreadPool(); + private static final Logger LOGGER = LoggerFactory.getLogger(SvnfmService.class); /** - * + * * @param createVNFRequest * @return inlineResponse201 */ - public InlineResponse201 createVnf(final CreateVnfRequest createVNFRequest) { + public InlineResponse201 createVnf(final CreateVnfRequest createVNFRequest, final String id) { InlineResponse201 inlineResponse201 = null; try { - final VnfInstance vnfInstance = vnfmHelper.createVnfInstance(createVNFRequest); + final VnfInstance vnfInstance = vnfmHelper.createVnfInstance(createVNFRequest, id); vnfmRepository.save(vnfInstance); final Thread creationNotification = new Thread(new VnfmAdapterCreationNotification()); creationNotification.start(); inlineResponse201 = vnfmHelper.getInlineResponse201(vnfInstance); - LOGGER.debug("Response from Create VNF", inlineResponse201); + LOGGER.debug("Response from Create VNF {}", inlineResponse201); } catch (IllegalAccessException | InvocationTargetException e) { LOGGER.error("Failed in Create Vnf", e); } return inlineResponse201; } + @CachePut(value = Constant.IN_LINE_RESPONSE_201_CACHE, key = "#id") + public InlineResponse201 updateVnf(final InstantiationStateEnum instantiationState, + final InlineResponse201InstantiatedVnfInfo instantiatedVnfInfo, final String id, + final List<InlineResponse201VimConnectionInfo> vimConnectionInfo) { + final InlineResponse201 vnf = getVnf(id); + vnf.setInstantiatedVnfInfo(instantiatedVnfInfo); + vnf.setInstantiationState(instantiationState); + vnf.setVimConnectionInfo(vimConnectionInfo); + return vnf; + } + /** - * + * * @param vnfId - * @param instantiateJobId + * @param instantiateVNFRequest + * @param operationId * @throws InterruptedException */ - public Object instatiateVnf(final String vnfId, final String instantiateJobId) throws InterruptedException { - final VnfJob vnfJob = buildVnfInstantiation(vnfId, instantiateJobId); - vnfJobRepository.save(vnfJob); - getJobStatus(vnfJob.getJobId()); - return null; + public String instantiateVnf(final String vnfId, final InstantiateVnfRequest instantiateVNFRequest) { + final VnfOperation vnfOperation = buildVnfOperation(InlineResponse200.OperationEnum.INSTANTIATE, vnfId); + vnfOperationRepository.save(vnfOperation); + executor.submit(new InstantiateOperationProgressor(vnfOperation, this, vnfOperationRepository, + applicationConfig, vnfds, subscriptionService)); + return vnfOperation.getId(); } /** - * + * vnfOperationRepository + * * @param vnfId - * @param instantiateJobId + * @param instantiateOperationId */ - public VnfJob buildVnfInstantiation(final String vnfId, final String instantiateJobId) { - final VnfJob vnfJob = new VnfJob(); - final Optional<VnfInstance> vnfInstance = vnfmRepository.findById(vnfId); - - if (vnfInstance.isPresent()) { - vnfJob.setJobId(instantiateJobId); - for (final VnfInstance instance : vnfmRepository.findAll()) { - if (instance.getId().equals(vnfId)) { - vnfJob.setVnfInstanceId(instance.getVnfInstanceDescription()); - } - } - vnfJob.setVnfId(vnfId); - vnfJob.setStatus("STARTING"); - } - return vnfJob; + public VnfOperation buildVnfOperation(final InlineResponse200.OperationEnum operation, final String vnfId) { + final VnfOperation vnfOperation = new VnfOperation(); + vnfOperation.setId(UUID.randomUUID().toString()); + vnfOperation.setOperation(operation); + vnfOperation.setOperationState(InlineResponse200.OperationStateEnum.STARTING); + vnfOperation.setVnfInstanceId(vnfId); + return vnfOperation; } /** - * - * @param jobId + * + * @param operationId * @throws InterruptedException */ - public Object getJobStatus(final String jobId) throws InterruptedException { - LOGGER.info("Getting job status with id: " + jobId); - for (int i = 0; i < 5; i++) { - LOGGER.info("Instantiation status: RUNNING"); - Thread.sleep(5000); - for (final VnfJob job : vnfJobRepository.findAll()) { - if (job.getJobId().equals(jobId)) { - job.setStatus("RUNNING"); - vnfJobRepository.save(job); - } - } - } + public InlineResponse200 getOperationStatus(final String operationId) { + LOGGER.info("Getting operation status with id: {}", operationId); final Thread instantiationNotification = new Thread(new VnfInstantiationNotification()); instantiationNotification.start(); - for (final VnfJob job : vnfJobRepository.findAll()) { - if (job.getJobId().equals(jobId)) { - job.setStatus("COMPLETE"); - vnfJobRepository.save(job); + for (final VnfOperation operation : vnfOperationRepository.findAll()) { + LOGGER.info("Operation found: {}", operation); + if (operation.getId().equals(operationId)) { + final ModelMapper modelMapper = new ModelMapper(); + return modelMapper.map(operation, InlineResponse200.class); } } return null; } /** - * + * * @param vnfId * @return inlineResponse201 */ public InlineResponse201 getVnf(final String vnfId) { - InlineResponse201 inlineResponse201 = null; - - final Optional<VnfInstance> vnfInstance = vnfmRepository.findById(vnfId); - try { - if (vnfInstance.isPresent()) { - inlineResponse201 = vnfmHelper.getInlineResponse201(vnfInstance.get()); - LOGGER.debug("Response from get VNF", inlineResponse201); - } - } catch (IllegalAccessException | InvocationTargetException e) { - LOGGER.error("Failed in get Vnf", e); + final Cache ca = cacheManager.getCache(Constant.IN_LINE_RESPONSE_201_CACHE); + final SimpleValueWrapper wrapper = (SimpleValueWrapper) ca.get(vnfId); + final InlineResponse201 inlineResponse201 = (InlineResponse201) wrapper.get(); + if (inlineResponse201 != null) { + LOGGER.info("Cache Read Successful"); + return inlineResponse201; } - return inlineResponse201; + return null; } /** * @param vnfId * @return */ - public Object terminateVnf(String vnfId) { - // TODO - return null; + public String terminateVnf(final String vnfId) { + final VnfOperation vnfOperation = buildVnfOperation(InlineResponse200.OperationEnum.TERMINATE, vnfId); + vnfOperationRepository.save(vnfOperation); + executor.submit(new TerminateOperationProgressor(vnfOperation, this, vnfOperationRepository, applicationConfig, + vnfds, subscriptionService)); + return vnfOperation.getId(); + } + + public void registerSubscription(final LccnSubscriptionRequest subscription) { + subscriptionService.registerSubscription(subscription); } } |