Loading src/main/java/org/etsi/osl/osom/lcm/ChatClient.java 0 → 100644 +66 −0 Original line number Diff line number Diff line package org.etsi.osl.osom.lcm; import org.springframework.stereotype.Service; import lombok.extern.slf4j.Slf4j; import org.apache.camel.CamelExecutionException; import org.apache.camel.ExchangeTimedOutException; import org.apache.camel.ProducerTemplate; @Service @Slf4j public class ChatClient { private static final int MAX_ATTEMPTS = 3; private final ProducerTemplate producerTemplate; public ChatClient(ProducerTemplate producerTemplate) { this.producerTemplate = producerTemplate; } /** * Sends a String message to ActiveMQ and waits for a String reply. * Retries up to 3 times in case of timeout. * * @param payload the request payload * @return the response String, or "" if all attempts time out or fail */ public String ask(String agentName, String payload, String defaultText, Integer timeOut) { for (int attempt = 1; attempt <= MAX_ATTEMPTS; attempt++) { try { String ENDPOINT_URI = "jms:queue:agents/" + agentName + "?exchangePattern=InOut" + "&requestTimeout=" + timeOut ; // x milliseconds timeout per attempt String response = producerTemplate.requestBody( ENDPOINT_URI, payload, String.class); // If response is non-null, return it if (response != null) { return response; } } catch (CamelExecutionException ex) { // Check if the underlying cause is a timeout if (ex.getCause() instanceof ExchangeTimedOutException) { log.warn("Timeout on attempt {} for payload {}", attempt, payload, ex); } else { // Non-timeout error; break or handle differently log.error("Non-timeout error on attempt {}", attempt, ex); break; } } catch (Exception ex) { log.error("Unexpected error on attempt {}", attempt, ex); break; } } // All attempts failed or timed out return ""; } } src/main/java/org/etsi/osl/osom/lcm/LcmBaseExecutor.java +15 −0 Original line number Diff line number Diff line Loading @@ -44,6 +44,7 @@ import org.etsi.osl.tmf.so641.model.ServiceOrder; import org.etsi.osl.tmf.so641.model.ServiceOrderCreate; import org.etsi.osl.tmf.so641.model.ServiceOrderItemRelationship; import org.etsi.osl.tmf.so641.model.ServiceOrderStateType; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.ParameterizedTypeReference; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatusCode; Loading Loading @@ -1157,6 +1158,18 @@ public abstract class LcmBaseExecutor { return ""; } public String askAgent(String agentName,String payload, String defaultText, Integer timeOut) { ChatClient chatClient = this.vars.getServiceOrderManager().getChatClient(agentName); if ( chatClient !=null ) { if (timeOut == null) { timeOut = 60000; } return chatClient.ask(agentName, payload, defaultText, timeOut); }else { return defaultText; } } static <T> T toJsonObj(String content, TypeReference<T> typeReference) throws IOException { ObjectMapper mapper = new ObjectMapper(); mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); Loading @@ -1168,4 +1181,6 @@ public abstract class LcmBaseExecutor { mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); return mapper.writeValueAsString(object); } } src/main/java/org/etsi/osl/osom/management/ServiceOrderManager.java +9 −0 Original line number Diff line number Diff line Loading @@ -34,6 +34,7 @@ import org.apache.commons.logging.LogFactory; import org.etsi.osl.model.nfv.DeploymentDescriptor; import org.etsi.osl.model.nfv.NetworkServiceDescriptor; import org.etsi.osl.model.nfv.ScaleDescriptor; import org.etsi.osl.osom.lcm.ChatClient; import org.etsi.osl.osom.serviceactions.NSActionRequestPayload; import org.etsi.osl.tmf.pm628.model.MeasurementCollectionJob; import org.etsi.osl.tmf.pm628.model.MeasurementCollectionJobFVO; Loading Loading @@ -204,6 +205,9 @@ public class ServiceOrderManager { @Value("${PM_MEASUREMENT_COLLECTION_JOB_UPDATE}") private String PM_MEASUREMENT_COLLECTION_JOB_UPDATE; @Autowired private ChatClient chatClient; @Transactional public void processOrder(ServiceOrder serviceOrder) { Loading Loading @@ -1204,6 +1208,11 @@ public class ServiceOrderManager { return null; } public ChatClient getChatClient(String agentName) { return chatClient; } Loading src/main/java/org/etsi/osl/osom/serviceactions/AutomaticallyHandleAction.java +7 −4 Original line number Diff line number Diff line Loading @@ -67,7 +67,10 @@ public class AutomaticallyHandleAction implements JavaDelegate { ResourceRef rr = aService.getSupportingResource().stream().findFirst().get(); Resource relatedResource = serviceOrderManager.retrieveResource( rr.getId() ); if ( relatedResource == null ) { serviceOrderManager.deleteServiceActionQueueItem( item ); return; } ResourceUpdate aResourceUpdate = resourceToResourceUpdate(relatedResource); //pass characteristic values from services to resource Loading Loading @@ -118,7 +121,7 @@ public class AutomaticallyHandleAction implements JavaDelegate { } } else { //metric deletion arrives here also response = createNewResourceDeleteRequest(aService, relatedResource, aResourceUpdate, serviceOrderID ); Loading Loading @@ -156,11 +159,11 @@ public class AutomaticallyHandleAction implements JavaDelegate { private ResourceUpdate resourceToResourceUpdate(Resource source) { ResourceUpdate resourceUpdate = new ResourceUpdate(); if ( source == null ) { return null; return resourceUpdate; } ResourceUpdate resourceUpdate = new ResourceUpdate(); resourceUpdate.setCategory( source.getCategory() ); resourceUpdate.setDescription( source.getDescription() ); Loading Loading
src/main/java/org/etsi/osl/osom/lcm/ChatClient.java 0 → 100644 +66 −0 Original line number Diff line number Diff line package org.etsi.osl.osom.lcm; import org.springframework.stereotype.Service; import lombok.extern.slf4j.Slf4j; import org.apache.camel.CamelExecutionException; import org.apache.camel.ExchangeTimedOutException; import org.apache.camel.ProducerTemplate; @Service @Slf4j public class ChatClient { private static final int MAX_ATTEMPTS = 3; private final ProducerTemplate producerTemplate; public ChatClient(ProducerTemplate producerTemplate) { this.producerTemplate = producerTemplate; } /** * Sends a String message to ActiveMQ and waits for a String reply. * Retries up to 3 times in case of timeout. * * @param payload the request payload * @return the response String, or "" if all attempts time out or fail */ public String ask(String agentName, String payload, String defaultText, Integer timeOut) { for (int attempt = 1; attempt <= MAX_ATTEMPTS; attempt++) { try { String ENDPOINT_URI = "jms:queue:agents/" + agentName + "?exchangePattern=InOut" + "&requestTimeout=" + timeOut ; // x milliseconds timeout per attempt String response = producerTemplate.requestBody( ENDPOINT_URI, payload, String.class); // If response is non-null, return it if (response != null) { return response; } } catch (CamelExecutionException ex) { // Check if the underlying cause is a timeout if (ex.getCause() instanceof ExchangeTimedOutException) { log.warn("Timeout on attempt {} for payload {}", attempt, payload, ex); } else { // Non-timeout error; break or handle differently log.error("Non-timeout error on attempt {}", attempt, ex); break; } } catch (Exception ex) { log.error("Unexpected error on attempt {}", attempt, ex); break; } } // All attempts failed or timed out return ""; } }
src/main/java/org/etsi/osl/osom/lcm/LcmBaseExecutor.java +15 −0 Original line number Diff line number Diff line Loading @@ -44,6 +44,7 @@ import org.etsi.osl.tmf.so641.model.ServiceOrder; import org.etsi.osl.tmf.so641.model.ServiceOrderCreate; import org.etsi.osl.tmf.so641.model.ServiceOrderItemRelationship; import org.etsi.osl.tmf.so641.model.ServiceOrderStateType; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.ParameterizedTypeReference; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatusCode; Loading Loading @@ -1157,6 +1158,18 @@ public abstract class LcmBaseExecutor { return ""; } public String askAgent(String agentName,String payload, String defaultText, Integer timeOut) { ChatClient chatClient = this.vars.getServiceOrderManager().getChatClient(agentName); if ( chatClient !=null ) { if (timeOut == null) { timeOut = 60000; } return chatClient.ask(agentName, payload, defaultText, timeOut); }else { return defaultText; } } static <T> T toJsonObj(String content, TypeReference<T> typeReference) throws IOException { ObjectMapper mapper = new ObjectMapper(); mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); Loading @@ -1168,4 +1181,6 @@ public abstract class LcmBaseExecutor { mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); return mapper.writeValueAsString(object); } }
src/main/java/org/etsi/osl/osom/management/ServiceOrderManager.java +9 −0 Original line number Diff line number Diff line Loading @@ -34,6 +34,7 @@ import org.apache.commons.logging.LogFactory; import org.etsi.osl.model.nfv.DeploymentDescriptor; import org.etsi.osl.model.nfv.NetworkServiceDescriptor; import org.etsi.osl.model.nfv.ScaleDescriptor; import org.etsi.osl.osom.lcm.ChatClient; import org.etsi.osl.osom.serviceactions.NSActionRequestPayload; import org.etsi.osl.tmf.pm628.model.MeasurementCollectionJob; import org.etsi.osl.tmf.pm628.model.MeasurementCollectionJobFVO; Loading Loading @@ -204,6 +205,9 @@ public class ServiceOrderManager { @Value("${PM_MEASUREMENT_COLLECTION_JOB_UPDATE}") private String PM_MEASUREMENT_COLLECTION_JOB_UPDATE; @Autowired private ChatClient chatClient; @Transactional public void processOrder(ServiceOrder serviceOrder) { Loading Loading @@ -1204,6 +1208,11 @@ public class ServiceOrderManager { return null; } public ChatClient getChatClient(String agentName) { return chatClient; } Loading
src/main/java/org/etsi/osl/osom/serviceactions/AutomaticallyHandleAction.java +7 −4 Original line number Diff line number Diff line Loading @@ -67,7 +67,10 @@ public class AutomaticallyHandleAction implements JavaDelegate { ResourceRef rr = aService.getSupportingResource().stream().findFirst().get(); Resource relatedResource = serviceOrderManager.retrieveResource( rr.getId() ); if ( relatedResource == null ) { serviceOrderManager.deleteServiceActionQueueItem( item ); return; } ResourceUpdate aResourceUpdate = resourceToResourceUpdate(relatedResource); //pass characteristic values from services to resource Loading Loading @@ -118,7 +121,7 @@ public class AutomaticallyHandleAction implements JavaDelegate { } } else { //metric deletion arrives here also response = createNewResourceDeleteRequest(aService, relatedResource, aResourceUpdate, serviceOrderID ); Loading Loading @@ -156,11 +159,11 @@ public class AutomaticallyHandleAction implements JavaDelegate { private ResourceUpdate resourceToResourceUpdate(Resource source) { ResourceUpdate resourceUpdate = new ResourceUpdate(); if ( source == null ) { return null; return resourceUpdate; } ResourceUpdate resourceUpdate = new ResourceUpdate(); resourceUpdate.setCategory( source.getCategory() ); resourceUpdate.setDescription( source.getDescription() ); Loading