Commit 0f36ed91 authored by Christos Tranoris's avatar Christos Tranoris
Browse files

Merge branch...

Merge branch '14-modify-the-way-the-status-of-a-service-in-inventory-is-determined-when-a-supporting-resource' into 'develop'

Resolve "Modify the way the status of a Service in inventory is determined when a supporting resource changes status"

See merge request !9
parents d303f614 de756fbd
Loading
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -92,7 +92,7 @@ public class ResourceApiRouteBuilder extends RouteBuilder {
		.log(LoggingLevel.INFO, log, CATALOG_UPD_RESOURCE + " message received!")
		.to("log:DEBUG?showBody=true&showHeaders=true")
		.unmarshal().json( JsonLibrary.Jackson, ResourceUpdate.class, true)
		.bean( resourceRepoService, "updateResource(${header.resourceId}, ${body}, ${header.propagateToSO} )")
		.bean( resourceRepoService, "updateResource(${header.resourceId}, ${body}, ${header.triggerServiceActionQueue} )")
		.marshal().json( JsonLibrary.Jackson)
		.convertBodyTo( String.class );		

+49 −110
Original line number Diff line number Diff line
@@ -23,6 +23,7 @@ import java.io.UnsupportedEncodingException;
import java.time.OffsetDateTime;
import java.time.ZoneOffset;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
@@ -46,6 +47,7 @@ import org.etsi.osl.tmf.ri639.model.Resource;
import org.etsi.osl.tmf.ri639.model.ResourceAttributeValueChangeNotification;
import org.etsi.osl.tmf.ri639.model.ResourceCreateNotification;
import org.etsi.osl.tmf.ri639.model.ResourceStateChangeNotification;
import org.etsi.osl.tmf.ri639.repo.ResourceRepository;
import org.etsi.osl.tmf.scm633.reposervices.ServiceSpecificationRepoService;
import org.etsi.osl.tmf.sim638.api.ServiceApiRouteBuilderEvents;
import org.etsi.osl.tmf.sim638.model.Service;
@@ -88,6 +90,10 @@ public class ServiceRepoService {
	@Autowired
	ServiceRepository serviceRepo;
	

    @Autowired
    ResourceRepository resourceRepo;
	
	@Autowired
	ServiceActionQueueRepository serviceActionQueueRepo;

@@ -1006,63 +1012,9 @@ public class ServiceRepoService {
    
    @Transactional  
    public void  resourceCreatedEvent(@Valid ResourceCreateNotification resNotif) {      
      
      logger.debug("resourceCreatedEvent"); 
      Resource res = resNotif.getEvent().getEvent().getResource();
      logger.info("Will update services related to this resource with id = " + res.getId() );
      
      var aservices = findServicesHavingThisSupportingResourceID(  res.getId() );
      
      for (Service as : aservices) {
        ServiceUpdate supd = new ServiceUpdate();
          
          Service aService = findByUuid(as.getId()); 
          
          //if ( aService.getState().equals( ServiceStateType.ACTIVE )  ) {    
              if ( res.getResourceStatus() != null ) {
                switch (res.getResourceStatus()) {
                  case STANDBY: {
                    supd.setState( ServiceStateType.RESERVED);
                    break;
                  }
                  case SUSPENDED: {
                    supd.setState( ServiceStateType.INACTIVE);
                    break;
                  }
                  case RESERVED: {
                    supd.setState( ServiceStateType.RESERVED);
                    break;
                  }
                  case UNKNOWN: {
                    if (aService.getState().equals( ServiceStateType.ACTIVE  )) {
                      supd.setState( ServiceStateType.TERMINATED);              
                    }
                    break;
                  }
                  case ALARM: {
                    supd.setState( ServiceStateType.INACTIVE);
                    break;
                  }
                  default:
                    break;
                } 
              }
             
              
              Note n = new Note();
              n.setText("Supporting Resource "+ res.getId() + " State Changed with status: " +  res.getResourceStatus());
              n.setAuthor( "SIM638-API" );
              n.setDate( OffsetDateTime.now(ZoneOffset.UTC).toString() );
              supd.addNoteItem( n );                  
              
              this.updateService( aService.getId(), supd , true, null, null); //update the service            
          //}  //if ( aService.getState().equals( ServiceStateType.ACTIVE )  ) {
      }
      
      
      updateResourceFromKubernetesLabel( res );
      
      
      updateServiceFromresourceChange(res);
    }
    

@@ -1071,54 +1023,41 @@ public class ServiceRepoService {

      logger.debug("resourceStateChangedEvent");
      Resource res = resNotif.getEvent().getEvent().getResource();
      logger.info("Will update services related to this resource with id = " + res.getId() );
      updateServiceFromresourceChange(res);
    }
      
    private void updateServiceFromresourceChange(Resource res) {

      logger.info("Will update services related to this resource with id = " + res.getId() );
      var aservices = findServicesHavingThisSupportingResourceID(res.getId());

      for (Service as : aservices) {
        ServiceUpdate supd = new ServiceUpdate();

        Service aService = findByUuid(as.getId());

          //if ( aService.getState().equals( ServiceStateType.ACTIVE )  ) {    
              if ( res.getResourceStatus() != null ) {
                switch (res.getResourceStatus()) {
                  case STANDBY: {
                    supd.setState( ServiceStateType.RESERVED);
                    break;
                  }
                  case SUSPENDED: {
                    supd.setState( ServiceStateType.INACTIVE);
                    break;
                  }
                  case RESERVED: {
                    supd.setState( ServiceStateType.RESERVED);
                    break;
                  }
                  case UNKNOWN: {
                    if (aService.getState().equals( ServiceStateType.ACTIVE  )) {
                      supd.setState( ServiceStateType.TERMINATED);              
                    }
                    break;
                  }
                  case ALARM: {
                    supd.setState( ServiceStateType.INACTIVE);
                    break;
                  }
                  default:
                    break;

        List<Resource> rlist = new ArrayList<Resource>();
        for (ResourceRef rref : aService.getSupportingResource()) {
          Optional<Resource> result = resourceRepo.findByUuid(rref.getId());
          if (result.isPresent()) {
            rlist.add( result.get() );
          }
        }

        rlist.add(res); //add also this one
        
        ServiceStateType nextState = aService.findNextStateBasedOnSupportingResources(rlist);

        ServiceUpdate supd = new ServiceUpdate();
        supd.setState(nextState);
        Note n = new Note();
              n.setText("Supporting Resource "+ res.getId() + " State Changed with status: " +  res.getResourceStatus());
        n.setText("Supporting Resource " + res.getId() + " State Changed with status: "
            + res.getResourceStatus() + ".Next state is " + nextState);
        n.setAuthor("SIM638-API");
        n.setDate(OffsetDateTime.now(ZoneOffset.UTC).toString());
        supd.addNoteItem(n);

        this.updateService(aService.getId(), supd, true, null, null); // update the service
          //}  //if ( aService.getState().equals( ServiceStateType.ACTIVE )  ) {
      }