diff --git a/src/main/java/org/etsi/osl/tmf/sim638/api/ServiceApiRouteBuilder.java b/src/main/java/org/etsi/osl/tmf/sim638/api/ServiceApiRouteBuilder.java index 55e38b6687ada1511b065fadd1fb68c4d99f290c..93afc976d554ffe86976320a3e0d56fd7b591191 100644 --- a/src/main/java/org/etsi/osl/tmf/sim638/api/ServiceApiRouteBuilder.java +++ b/src/main/java/org/etsi/osl/tmf/sim638/api/ServiceApiRouteBuilder.java @@ -20,12 +20,15 @@ package org.etsi.osl.tmf.sim638.api; import java.io.IOException; - +import java.util.Date; +import java.util.Map; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.databind.ObjectMapper; - +import org.apache.camel.Exchange; import org.apache.camel.LoggingLevel; +import org.apache.camel.Processor; import org.apache.camel.ProducerTemplate; +import org.apache.camel.RuntimeCamelException; import org.apache.camel.builder.RouteBuilder; import org.apache.camel.model.dataformat.JsonLibrary; import org.apache.commons.logging.Log; @@ -44,6 +47,11 @@ import org.springframework.context.annotation.Configuration; import org.springframework.stereotype.Component; import org.etsi.osl.model.nfv.DeploymentDescriptor; +import org.etsi.osl.model.nfv.ExperimentMetadata; +import org.etsi.osl.model.nfv.Product; +import org.etsi.osl.model.nfv.ValidationJob; +import org.etsi.osl.model.nfv.ValidationStatus; +import org.etsi.osl.model.nfv.VxFMetadata; @Configuration //@RefreshScope @@ -111,6 +119,9 @@ public class ServiceApiRouteBuilder extends RouteBuilder { @Override public void configure() throws Exception { + + + from( CATALOG_ADD_SERVICE ) .log(LoggingLevel.INFO, log, CATALOG_ADD_SERVICE + " message received and will be processed for service inventory!") .to("log:DEBUG?showBody=true&showHeaders=true") @@ -188,8 +199,7 @@ public class ServiceApiRouteBuilder extends RouteBuilder { .unmarshal().json( JsonLibrary.Jackson, DeploymentDescriptor.class, true) .bean( serviceRepoService, "nfvCatalogNSResourceChanged(${body})"); - - + from( EVENT_RESOURCE_STATE_CHANGED ) .log(LoggingLevel.INFO, log, EVENT_RESOURCE_STATE_CHANGED + " message received and will be processed for service inventory!") @@ -199,6 +209,13 @@ public class ServiceApiRouteBuilder extends RouteBuilder { from( EVENT_RESOURCE_CREATE ) + .errorHandler(deadLetterChannel("direct:retriesDeadLetters") + .maximumRedeliveries(5) + .redeliveryDelay(1000).useOriginalMessage() + .logExhausted(true) + .logHandled(true) + .retriesExhaustedLogLevel(LoggingLevel.ERROR) + .retryAttemptedLogLevel(LoggingLevel.ERROR)) .log(LoggingLevel.INFO, log, EVENT_RESOURCE_CREATE + " message received and will be processed for service inventory!") .to("log:DEBUG?showBody=true&showHeaders=true") .unmarshal().json( JsonLibrary.Jackson, ResourceCreateNotification.class, true) @@ -208,15 +225,33 @@ public class ServiceApiRouteBuilder extends RouteBuilder { from( EVENT_RESOURCE_ATTRIBUTE_VALUE_CHANGED ) + .errorHandler(deadLetterChannel("direct:retriesDeadLetters") + .maximumRedeliveries(5) + .redeliveryDelay(1000).useOriginalMessage() + .logExhausted(true) + .logHandled(true) + .retriesExhaustedLogLevel(LoggingLevel.ERROR) + .retryAttemptedLogLevel(LoggingLevel.ERROR)) + .log(LoggingLevel.INFO, log, EVENT_RESOURCE_ATTRIBUTE_VALUE_CHANGED + " message received and will be processed for service inventory!") .to("log:DEBUG?showBody=true&showHeaders=true") .unmarshal().json( JsonLibrary.Jackson, ResourceAttributeValueChangeNotification.class, true) .bean( serviceRepoService, "resourceAttrChangedEvent(${body})"); + + /** + * dead Letter Queue msgs if everything fails to connect + */ + from("direct:retriesDeadLetters") + //.setBody() + //.body(String.class) + //.process( ErroneousValidationProcessor ) + .to("log:DEBUG?showBody=true&showHeaders=true") + .to("stream:out"); } - + static String toJsonString(Object object) throws IOException { ObjectMapper mapper = new ObjectMapper(); mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); diff --git a/src/main/java/org/etsi/osl/tmf/sim638/service/ServiceRepoService.java b/src/main/java/org/etsi/osl/tmf/sim638/service/ServiceRepoService.java index d38b8ad4523385261576bd1e06fdc3c03025d4bb..eaf0609a083947ceee28114efacb3f886ee9b9f2 100644 --- a/src/main/java/org/etsi/osl/tmf/sim638/service/ServiceRepoService.java +++ b/src/main/java/org/etsi/osl/tmf/sim638/service/ServiceRepoService.java @@ -818,6 +818,7 @@ public class ServiceRepoService { // this.updateService( parentServiceId, servUpd, false, null, childService); // } + @Transactional public String getServiceEagerAsString(String id) throws JsonProcessingException { Service s = this.getServiceEager(id); ObjectMapper mapper = new ObjectMapper(); @@ -837,7 +838,8 @@ public class ServiceRepoService { return res; } - + + @Transactional public Service getServiceEager(String id) { if ( id == null || id.equals("")) { return null; @@ -904,6 +906,7 @@ public class ServiceRepoService { /** * @return */ + @Transactional public List<ServiceActionQueueItem> findAllServiceActionQueueItems() { return (List<ServiceActionQueueItem>) this.serviceActionQueueRepo.findFirst10ByOrderByInsertedDate(); @@ -934,6 +937,7 @@ public class ServiceRepoService { * @param id * @return */ + @Transactional public Void deleteServiceActionQueueItemByUuid(String id) { Optional<ServiceActionQueueItem> optso = this.serviceActionQueueRepo.findByUuid(id); @@ -1077,40 +1081,46 @@ public class ServiceRepoService { @Transactional public void resourceAttrChangedEvent(@Valid ResourceAttributeValueChangeNotification resNotif) { + try { + + logger.debug("ResourceAttributeValueChangeNotification"); + 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) { + + Service aService = findByUuid(as.getId()); + + //if ( aService.getState().equals( ServiceStateType.ACTIVE ) ) { + + + ServiceUpdate supd = new ServiceUpdate(); + + //copy characteristics from resource to service + + for (org.etsi.osl.tmf.ri639.model.Characteristic rChar : res.getResourceCharacteristic()) { + Characteristic cNew = new Characteristic(); + cNew.setName( rChar.getName()); + cNew.value( new Any( rChar.getValue() )); + supd.addServiceCharacteristicItem( cNew ); + } + + + Note n = new Note(); + n.setText("Supporting Resource Attribute Changed with id: " + res.getId()); + 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 + //} + } - logger.debug("ResourceAttributeValueChangeNotification"); - 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) { - - Service aService = findByUuid(as.getId()); - - //if ( aService.getState().equals( ServiceStateType.ACTIVE ) ) { - - ServiceUpdate supd = new ServiceUpdate(); - - //copy characteristics from resource to service - - for (org.etsi.osl.tmf.ri639.model.Characteristic rChar : res.getResourceCharacteristic()) { - Characteristic cNew = new Characteristic(); - cNew.setName( rChar.getName()); - cNew.value( new Any( rChar.getValue() )); - supd.addServiceCharacteristicItem( cNew ); - } - - - Note n = new Note(); - n.setText("Supporting Resource Attribute Changed with id: " + res.getId()); - 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 - //} + }catch (Exception e) { + e.printStackTrace(); } } @@ -1118,20 +1128,32 @@ public class ServiceRepoService { @Transactional public void resourceCreatedEvent(@Valid ResourceCreateNotification resNotif) { - Resource res = resNotif.getEvent().getEvent().getResource(); - logger.debug("resourceCreatedEvent for: " + res.getName()); - updateServiceFromresourceChange(res); + try { + Resource res = resNotif.getEvent().getEvent().getResource(); + logger.debug("resourceCreatedEvent for: " + res.getName()); + updateServiceFromresourceChange(res); + }catch (Exception e) { + e.printStackTrace(); + } + } @Transactional public void resourceStateChangedEvent(@Valid ResourceStateChangeNotification resNotif) { + try { + + Resource res = resNotif.getEvent().getEvent().getResource(); + logger.debug("resourceStateChangedEvent for: " + res.getName()); + updateServiceFromresourceChange(res); - Resource res = resNotif.getEvent().getEvent().getResource(); - logger.debug("resourceStateChangedEvent for: " + res.getName()); - updateServiceFromresourceChange(res); + }catch (Exception e) { + e.printStackTrace(); + } + } - + + @Transactional private void updateServiceFromresourceChange(Resource res) { logger.info("Will update services related to this resource with id = " + res.getId() ); @@ -1172,6 +1194,7 @@ public class ServiceRepoService { } + @Transactional private void updateResourceFromKubernetesLabel(Resource res) { logger.debug("updateResourceFromKubernetesLabel for: " + res.getName());