diff --git a/src/main/java/org/etsi/osl/metrico/MetricoCommonMethods.java b/src/main/java/org/etsi/osl/metrico/MetricoCommonMethods.java index 0664b5ad40a42ad5b197c18769d2274fa1c801f0..b19467380f9450841aef0d07bb45a0a5988ce1f4 100644 --- a/src/main/java/org/etsi/osl/metrico/MetricoCommonMethods.java +++ b/src/main/java/org/etsi/osl/metrico/MetricoCommonMethods.java @@ -351,7 +351,7 @@ public class MetricoCommonMethods extends RouteBuilder { map.put("mcjid", mcjId); Object response = template.requestBodyAndHeaders(PM_MEASUREMENT_COLLECTION_JOB_UPDATE, JsonUtil.toJsonString(mcjMVO), map); - logger.info("JsonUtil.toJsonString(mcjMVO): \n{}", JsonUtil.toJsonString(mcjMVO)); + logger.debug("JsonUtil.toJsonString(mcjMVO): \n{}", JsonUtil.toJsonString(mcjMVO)); if (!(response instanceof String)) { logger.error("MeasurementCollectionJob object is wrong."); return null; @@ -383,4 +383,9 @@ public class MetricoCommonMethods extends RouteBuilder { } return null; } + + public boolean notNullOrEmpty(String str) { + return str != null && !str.isEmpty(); + } + } diff --git a/src/main/java/org/etsi/osl/metrico/mapper/DataAccessEndpointMapper.java b/src/main/java/org/etsi/osl/metrico/mapper/DataAccessEndpointMapper.java index ec9d152ba102c3d5f314f965b3714548908c9350..e2fc0ca888cc5580604a5eeaa749bde056cde914 100644 --- a/src/main/java/org/etsi/osl/metrico/mapper/DataAccessEndpointMapper.java +++ b/src/main/java/org/etsi/osl/metrico/mapper/DataAccessEndpointMapper.java @@ -3,7 +3,6 @@ package org.etsi.osl.metrico.mapper; import org.etsi.osl.tmf.pm628.model.DataAccessEndpoint; import org.etsi.osl.tmf.pm628.model.DataAccessEndpointFVO; import org.etsi.osl.tmf.pm628.model.DataAccessEndpointMVO; - import org.mapstruct.*; @Mapper( diff --git a/src/main/java/org/etsi/osl/metrico/mapper/MeasurementCollectionJobMapper.java b/src/main/java/org/etsi/osl/metrico/mapper/MeasurementCollectionJobMapper.java index 639f9ea87d6796ca5b7e472d62c3ae3b90530e91..acd02b8c9862cb0df7554fb048576a328847b9ce 100644 --- a/src/main/java/org/etsi/osl/metrico/mapper/MeasurementCollectionJobMapper.java +++ b/src/main/java/org/etsi/osl/metrico/mapper/MeasurementCollectionJobMapper.java @@ -1,22 +1,6 @@ package org.etsi.osl.metrico.mapper; -import org.etsi.osl.tmf.pm628.model.MeasurementCollectionJob; -import org.etsi.osl.tmf.pm628.model.MeasurementCollectionJobFVO; -import org.etsi.osl.tmf.pm628.model.MeasurementCollectionJobMVO; -import org.etsi.osl.tmf.pm628.model.PerformanceIndicatorSpecificationRefOrValueMapper; -import org.etsi.osl.tmf.pm628.model.DataAccessEndpoint; -import org.etsi.osl.tmf.pm628.model.PerformanceIndicatorGroupSpecification; -import org.etsi.osl.tmf.pm628.model.DataAccessEndpointMVO; -import org.etsi.osl.tmf.pm628.model.PerformanceIndicatorGroupSpecificationMVO; -import org.etsi.osl.tmf.pm628.model.PerformanceIndicatorSpecificationRefOrValueMVO; -import org.etsi.osl.tmf.pm628.model.TrackingRecordMVO; -import org.etsi.osl.tmf.pm628.model.PerformanceIndicatorSpecificationRefOrValue; -import org.etsi.osl.tmf.pm628.model.TrackingRecord; -import org.etsi.osl.tmf.pm628.model.ScheduleDefinitionMVO; -import org.etsi.osl.tmf.pm628.model.FileTransferDataMVO; -import org.etsi.osl.tmf.pm628.model.FileTransferData; -import org.etsi.osl.tmf.pm628.model.ScheduleDefinition; - +import org.etsi.osl.tmf.pm628.model.*; import org.mapstruct.*; import java.util.List; diff --git a/src/main/java/org/etsi/osl/metrico/mapper/ResourceRefOrValueMapper.java b/src/main/java/org/etsi/osl/metrico/mapper/ResourceRefOrValueMapper.java index 2c24dd0bdd7bb141e392e77b95d213a26b3557f5..3d3ec0fe5cdad2cb8f7b0e2e9935a690a08c343c 100644 --- a/src/main/java/org/etsi/osl/metrico/mapper/ResourceRefOrValueMapper.java +++ b/src/main/java/org/etsi/osl/metrico/mapper/ResourceRefOrValueMapper.java @@ -1,21 +1,6 @@ package org.etsi.osl.metrico.mapper; -import org.etsi.osl.tmf.pm628.model.DataAccessEndpoint; -import org.etsi.osl.tmf.pm628.model.DataAccessEndpointFVO; -import org.etsi.osl.tmf.pm628.model.LogicalResource; -import org.etsi.osl.tmf.pm628.model.LogicalResourceFVO; -import org.etsi.osl.tmf.pm628.model.ResourceFVO; -import org.etsi.osl.tmf.pm628.model.Resource; -import org.etsi.osl.tmf.pm628.model.ResourceRefFVO; -import org.etsi.osl.tmf.pm628.model.ResourceRefOrValue; -import org.etsi.osl.tmf.pm628.model.ResourceRef; -import org.etsi.osl.tmf.pm628.model.DataAccessEndpointMVO; -import org.etsi.osl.tmf.pm628.model.LogicalResourceMVO; -import org.etsi.osl.tmf.pm628.model.ResourceMVO; -import org.etsi.osl.tmf.pm628.model.ResourceRefMVO; -import org.etsi.osl.tmf.pm628.model.ResourceRefOrValueFVO; -import org.etsi.osl.tmf.pm628.model.ResourceRefOrValueMVO; - +import org.etsi.osl.tmf.pm628.model.*; import org.mapstruct.*; @Mapper( diff --git a/src/main/java/org/etsi/osl/metrico/prometheus/PrometheusQueries.java b/src/main/java/org/etsi/osl/metrico/prometheus/PrometheusQueries.java index 95491d7d8041e7060548353669bc8f13b4ca7673..985aec7c301c977be6603cf8fc997c4dd6f46948 100644 --- a/src/main/java/org/etsi/osl/metrico/prometheus/PrometheusQueries.java +++ b/src/main/java/org/etsi/osl/metrico/prometheus/PrometheusQueries.java @@ -19,7 +19,6 @@ import reactor.core.publisher.Mono; import java.time.Duration; import java.time.OffsetDateTime; -import java.time.ZoneOffset; import java.util.concurrent.TimeUnit; @Component diff --git a/src/main/java/org/etsi/osl/metrico/services/MetricoService.java b/src/main/java/org/etsi/osl/metrico/services/MetricoService.java index a82a3ab1b25c0e8830f3a78eeb3edb7050d48bde..94ce0bed26a0318df69c1bc9af4bad92b7401b77 100644 --- a/src/main/java/org/etsi/osl/metrico/services/MetricoService.java +++ b/src/main/java/org/etsi/osl/metrico/services/MetricoService.java @@ -10,44 +10,46 @@ import org.etsi.osl.metrico.prometheus.PrometheusQueries; import org.etsi.osl.tmf.common.model.ELifecycle; import org.etsi.osl.tmf.common.model.EValueType; import org.etsi.osl.tmf.common.model.Notification; +import org.etsi.osl.tmf.common.model.service.Characteristic; import org.etsi.osl.tmf.common.model.service.ServiceStateType; import org.etsi.osl.tmf.pm628.model.*; import org.etsi.osl.tmf.rcm634.model.LogicalResourceSpecification; -import org.etsi.osl.tmf.rcm634.model.ResourceSpecification; import org.etsi.osl.tmf.rcm634.model.ResourceSpecificationCreate; import org.etsi.osl.tmf.rcm634.model.ResourceSpecificationRef; import org.etsi.osl.tmf.scm633.model.ServiceSpecification; +import org.etsi.osl.tmf.sim638.model.ServiceAttributeValueChangeNotification; import org.etsi.osl.tmf.sim638.model.ServiceDeleteNotification; import org.etsi.osl.tmf.sim638.model.ServiceStateChangeNotification; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.boot.context.event.ApplicationStartedEvent; import org.springframework.context.event.EventListener; - import org.springframework.stereotype.Service; +import java.net.URI; +import java.net.URISyntaxException; import java.time.OffsetDateTime; import java.util.List; @Service public class MetricoService extends RouteBuilder { - private static final Logger logger = LoggerFactory.getLogger(MetricoService.class); - public static final String OSL_METRICO_RSPEC_NAME = "METRICO_Resource_Specification"; public static final String OSL_METRICO_RSPEC_VERSION = "0.0.1"; public static final String OSL_METRICO_RSPEC_CATEGORY = "metrico.osl.etsi.org/v1"; public static final String OSL_METRICO_RSPEC_TYPE = "LogicalResourceSpecification"; public static final String OSL_METRICO_RSPEC_DESCRIPTION = "This Specification is used to describe a generic METRICO job resource"; + private static final Logger logger = LoggerFactory.getLogger(MetricoService.class); private static String OSL_METRICO_RSPEC_ID = null; private final MetricoCommonMethods metricoCommonMethods; private final PrometheusQueries prometheusQueries; private final JobService jobService; + public MetricoService(PrometheusQueries prometheusQueries, MetricoCommonMethods metricoCommonMethods, JobService jobService) { this.prometheusQueries = prometheusQueries; this.metricoCommonMethods = metricoCommonMethods; - this.jobService= jobService; + this.jobService = jobService; } @Override @@ -108,7 +110,7 @@ public class MetricoService extends RouteBuilder { logger.info("===== Looking for PENDING or IN_PROGRESS Measurement Collection Jobs from previous sessions ====="); List jobsPending = metricoCommonMethods.listPendingOrInProgressMeasurementCollectionJobs(); jobService.stopAllJobs(); - if(jobsPending != null){ + if (jobsPending != null) { logger.info("===== Started resuming PENDING or IN_PROGRESS Measurement Collection Jobs from previous sessions ====="); for (MeasurementCollectionJob measurementCollectionJob : jobsPending) { measurementCollectionJob = metricoCommonMethods.retrieveMeasurementCollectionJob(measurementCollectionJob.getUuid()); @@ -132,11 +134,11 @@ public class MetricoService extends RouteBuilder { // If the ScheduleDefinitionEndTime is null, set it to 1 hour after the ScheduleDefinitionStartTime to check if it is past due if (measurementCollectionJob.getScheduleDefinition().get(0).getScheduleDefinitionEndTime() == null && measurementCollectionJob.getScheduleDefinition().get(0).getScheduleDefinitionStartTime() != null) { measurementCollectionJob.getScheduleDefinition().get(0).setScheduleDefinitionEndTime(measurementCollectionJob.getScheduleDefinition().get(0).getScheduleDefinitionStartTime().plusHours(1)); - }else if (measurementCollectionJob.getScheduleDefinition().get(0).getScheduleDefinitionEndTime() == null && measurementCollectionJob.getScheduleDefinition().get(0).getScheduleDefinitionStartTime() == null) { + } else if (measurementCollectionJob.getScheduleDefinition().get(0).getScheduleDefinitionEndTime() == null && measurementCollectionJob.getScheduleDefinition().get(0).getScheduleDefinitionStartTime() == null) { measurementCollectionJob.getScheduleDefinition().get(0).setScheduleDefinitionEndTime(measurementCollectionJob.getCreationTime().plusHours(1)); } // If the ScheduleDefinitionEndTime is before the current time, skip the job - if(measurementCollectionJob.getScheduleDefinition().get(0).getScheduleDefinitionEndTime().isBefore(OffsetDateTime.now())) { + if (measurementCollectionJob.getScheduleDefinition().get(0).getScheduleDefinitionEndTime().isBefore(OffsetDateTime.now())) { logger.warn("MeasurementCollectionJob with uuid: {} has a ScheduleDefinition that has already ended, skipping.", measurementCollectionJob.getUuid()); MeasurementCollectionJobMVO mcjMVO = new MeasurementCollectionJobMVO(); @@ -150,7 +152,7 @@ public class MetricoService extends RouteBuilder { measurementCollectionJob.getScheduleDefinition().get(0).setScheduleDefinitionStartTime(measurementCollectionJob.getCreationTime()); measurementCollectionJob.getScheduleDefinition().get(0).setScheduleDefinitionEndTime(measurementCollectionJob.getCreationTime().plusHours(1)); - if(measurementCollectionJob.getScheduleDefinition().get(0).getScheduleDefinitionEndTime().isBefore(OffsetDateTime.now())) { + if (measurementCollectionJob.getScheduleDefinition().get(0).getScheduleDefinitionEndTime().isBefore(OffsetDateTime.now())) { logger.warn("MeasurementCollectionJob with uuid: {} has a ScheduleDefinition that has already ended, skipping.", measurementCollectionJob.getUuid()); MeasurementCollectionJobMVO mcjMVO = new MeasurementCollectionJobMVO(); @@ -185,7 +187,7 @@ public class MetricoService extends RouteBuilder { measurementCollectionJobMVO.setExecutionState(job.getState()); givenMCJ = metricoCommonMethods.updateMeasurementCollectionJobById(givenMCJ.getUuid(), measurementCollectionJobMVO); - if (givenMCJ!=null) { + if (givenMCJ != null) { metricoCommonMethods.updateRelatedResource(givenMCJ); } } @@ -209,39 +211,149 @@ public class MetricoService extends RouteBuilder { } } - public void handleServiceEvent(final Notification n){ + public void handleServiceEvent(final Notification n) { org.etsi.osl.tmf.sim638.model.Service service = null; + ServiceSpecification serviceSpec = null; + MeasurementCollectionJob mcj = null; + ResourceSpecificationRef rSpec = null; + boolean isMetricoRFSService = false; + boolean isRunningJob = false; - if (n instanceof ServiceStateChangeNotification){ + if (n instanceof ServiceStateChangeNotification) { service = ((ServiceStateChangeNotification) n).getEvent().getService(); - } else if (n instanceof ServiceDeleteNotification){ + } else if (n instanceof ServiceDeleteNotification) { service = ((ServiceDeleteNotification) n).getEvent().getService(); + } else if (n instanceof ServiceAttributeValueChangeNotification) { + service = ((ServiceAttributeValueChangeNotification) n).getEvent().getService(); } - ServiceSpecification serviceSpec = null; + // Check if it is a METRICO RFS service if (service != null && service.getServiceSpecificationRef() != null) { serviceSpec = metricoCommonMethods.retrieveServiceSpecificationById(service.getServiceSpecificationRef().getId()); + if (serviceSpec != null && serviceSpec.getResourceSpecification().size() == 1) { + rSpec = serviceSpec.getResourceSpecification().iterator().next(); + if (rSpec.getId().equalsIgnoreCase(OSL_METRICO_RSPEC_ID)) { + isMetricoRFSService = true; + } + } + } else { + logger.debug("Service {} is not a METRICO service, skipping.", service.getId()); + return; } - if(serviceSpec != null){ - // Check if it is an RFS SPEC - if(serviceSpec.getResourceSpecification().size() == 1) { - ResourceSpecificationRef rSpec = serviceSpec.getResourceSpecification().iterator().next(); - if (rSpec.getId().equalsIgnoreCase(OSL_METRICO_RSPEC_ID)) { - if (service.getState() == ServiceStateType.TERMINATED) { - logger.debug("Service {} is a METRICO service with state TERMINATED. Terminating related job.", service.getId()); - jobService.stopJob(String.valueOf(service.getServiceCharacteristicByName("_MT_MCJ_REFID").getValue().getValue())); - } - if (n instanceof ServiceDeleteNotification){ - logger.debug("Service {} is a METRICO service that was deleted. Terminating related job.", service.getId()); - jobService.stopJob(String.valueOf(service.getServiceCharacteristicByName("_MT_MCJ_REFID").getValue().getValue())); + if (isMetricoRFSService) { + String mcjRefId = service.getServiceCharacteristicByName("_MT_MCJ_REFID").getValue().getValue(); + mcj = metricoCommonMethods.retrieveMeasurementCollectionJob(mcjRefId); + + if(mcj.getExecutionState() !=null) { + if (mcj.getExecutionState().equals(ExecutionStateType.INPROGRESS) || mcj.getExecutionState().equals(ExecutionStateType.PENDING)) { + isRunningJob = true; + } + } + + if (n instanceof ServiceStateChangeNotification && service.getState() == ServiceStateType.TERMINATED) { + logger.debug("Service {} is a METRICO service with state TERMINATED. Terminating related job.", service.getId()); + jobService.stopJob(String.valueOf(service.getServiceCharacteristicByName("_MT_MCJ_REFID").getValue().getValue())); + } else if (n instanceof ServiceDeleteNotification) { + logger.debug("Service {} is a METRICO service that was deleted. Terminating related job.", service.getId()); + jobService.stopJob(String.valueOf(service.getServiceCharacteristicByName("_MT_MCJ_REFID").getValue().getValue())); + } else if (n instanceof ServiceAttributeValueChangeNotification && isRunningJob) { + logger.debug("Service {} is a METRICO service that was updated. Updating related job.", service.getId()); + + MeasurementCollectionJobMVO mcjMVO = new MeasurementCollectionJobMVO(); + + mcjMVO.setExecutionState(ExecutionStateType.PENDING); + + MeasurementCollectionJob mcjOld = metricoCommonMethods.retrieveMeasurementCollectionJob(mcjRefId); + Characteristic serviceCharacteristic; + + if (!mcjOld.getProducingApplicationId().equals(service.getId())) { + mcjMVO.setProducingApplicationId(service.getServiceSpecificationRef().getId()); + } + serviceCharacteristic = service.getServiceCharacteristicByName("_MT_CHARACTERISTIC_NAME"); + String characteristicName = String.valueOf(serviceCharacteristic.getValue().getValue()); + if (metricoCommonMethods.notNullOrEmpty(characteristicName) && !mcjOld.getOutputFormat().equals(characteristicName)) { + mcjMVO.setOutputFormat(characteristicName); + } + serviceCharacteristic = service.getServiceCharacteristicByName("_MT_SERVICEUUID"); + String cfs_id = String.valueOf(serviceCharacteristic.getValue().getValue()); + if (metricoCommonMethods.notNullOrEmpty(cfs_id) && !mcjOld.getConsumingApplicationId().equals(cfs_id)) { + mcjMVO.setConsumingApplicationId(cfs_id); + } + ScheduleDefinitionMVO scheduleDefinitionNew = new ScheduleDefinitionMVO(); + ScheduleDefinition scheduleDefinitionOld = mcjOld.getScheduleDefinition().get(0); + boolean scheduleDefinitionChanged = false; + if (!scheduleDefinitionOld.getScheduleDefinitionStartTime().equals(service.getStartDate())) { + scheduleDefinitionNew.setScheduleDefinitionStartTime(service.getStartDate()); + scheduleDefinitionChanged = true; + } + if (!scheduleDefinitionOld.getScheduleDefinitionEndTime().equals(service.getEndDate())) { + scheduleDefinitionNew.setScheduleDefinitionEndTime(service.getEndDate()); + scheduleDefinitionChanged = true; + } + if (scheduleDefinitionChanged) { + mcjMVO.addScheduleDefinitionItem(scheduleDefinitionNew); + } + + serviceCharacteristic = service.getServiceCharacteristicByName("_MT_RECURRING_INTERVAL"); + String recurringIntervalString = String.valueOf(serviceCharacteristic.getValue().getValue()); + if (metricoCommonMethods.notNullOrEmpty(recurringIntervalString) && !mcjOld.getGranularity().toString().equalsIgnoreCase(recurringIntervalString)) { + if (Granularity.contains(recurringIntervalString)) { + mcjMVO.setGranularity(Granularity.valueOf(recurringIntervalString)); } - } else { - logger.debug("Service {} is not a METRICO service, skipping.", service.getId()); - return; } + + boolean monitoringTypeChanged = false; + DataAccessEndpointMVO daeMVO = new DataAccessEndpointMVO(); + DataAccessEndpoint daeOld = mcjOld.getDataAccessEndpoint().get(0); + serviceCharacteristic = service.getServiceCharacteristicByName("_MT_TYPE"); + String monitoringType = String.valueOf(serviceCharacteristic.getValue().getValue()); + if (metricoCommonMethods.notNullOrEmpty(monitoringType) && !daeOld.getApiType().equalsIgnoreCase(monitoringType)) { + daeMVO.setApiType(monitoringType); + monitoringTypeChanged = true; + } + + boolean uriChanged = false; + serviceCharacteristic = service.getServiceCharacteristicByName("_MT_QUERY"); + String monitoringQuery = String.valueOf(serviceCharacteristic.getValue().getValue()); + serviceCharacteristic = service.getServiceCharacteristicByName("_MT_URL"); + String monitoringURL = String.valueOf(serviceCharacteristic.getValue().getValue()); + URI newUri = null; + try { + newUri = new URI(monitoringURL + "?" + monitoringQuery); + } catch (URISyntaxException e) { + throw new RuntimeException(e); + } + if (!daeOld.getUri().equals(newUri)) { + daeMVO.setUri(newUri); + uriChanged = true; + } + // This is a workaround because the APIType and URI are not mutually exclusive in the MVO. + // If the monitoring type has changed, we keep the old URI, and if the URI has changed, we keep the old APIType. + if(monitoringTypeChanged && !uriChanged) { + daeMVO.setUri(daeOld.getUri()); + } else if ((!monitoringTypeChanged) && uriChanged) { + daeMVO.setApiType(daeOld.getApiType()); + } + + if (uriChanged || monitoringTypeChanged) { + mcjMVO.addDataAccessEndpointItem(daeMVO); + } + + jobService.stopJob(String.valueOf(service.getServiceCharacteristicByName("_MT_MCJ_REFID").getValue().getValue())); + + MeasurementCollectionJob updatedMCJ = metricoCommonMethods.updateMeasurementCollectionJobById( + mcjOld.getUuid(), mcjMVO); + + startPeriodicQueryToPrometheus(updatedMCJ); + } else { + logger.debug("Service {} is a METRICO service with state {}. No action taken.", service.getId(), service.getState()); } + } else { + logger.debug("Service {} is not a METRICO RFS service, skipping.", service.getId()); } } } + + diff --git a/src/main/java/org/etsi/osl/metrico/services/MetricoServiceRouteBuilder.java b/src/main/java/org/etsi/osl/metrico/services/MetricoServiceRouteBuilder.java index d9f4f38cf0b668c5a2c9321f2116cac893f2e87b..1bfda8edd0a3d796130672e0667c5c6a211dcd31 100644 --- a/src/main/java/org/etsi/osl/metrico/services/MetricoServiceRouteBuilder.java +++ b/src/main/java/org/etsi/osl/metrico/services/MetricoServiceRouteBuilder.java @@ -6,6 +6,7 @@ import org.apache.camel.model.dataformat.JsonLibrary; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.etsi.osl.tmf.pm628.model.MeasurementCollectionJobCreateEvent; +import org.etsi.osl.tmf.sim638.model.ServiceAttributeValueChangeNotification; import org.etsi.osl.tmf.sim638.model.ServiceDeleteNotification; import org.etsi.osl.tmf.sim638.model.ServiceStateChangeNotification; import org.springframework.beans.factory.annotation.Autowired; @@ -31,6 +32,9 @@ public class MetricoServiceRouteBuilder extends RouteBuilder { @Value("${EVENT_SERVICE_DELETE}") private String EVENT_SERVICE_DELETE = ""; + @Value("${EVENT_SERVICE_ATTRIBUTE_VALUE_CHANGED}") + private String EVENT_SERVICE_ATTRIBUTE_VALUE_CHANGED = ""; + public void configure() throws Exception { from(EVENT_MEASUREMENT_COLLECTION_JOB_CREATE) @@ -53,6 +57,13 @@ public class MetricoServiceRouteBuilder extends RouteBuilder { .unmarshal() .json(JsonLibrary.Jackson, ServiceDeleteNotification.class, true) .bean(metricoService, "handleServiceEvent"); + + from(EVENT_SERVICE_ATTRIBUTE_VALUE_CHANGED) + .log(LoggingLevel.INFO, log, EVENT_SERVICE_ATTRIBUTE_VALUE_CHANGED + " message received!") + .to("log:DEBUG?showBody=true&showHeaders=true") + .unmarshal() + .json(JsonLibrary.Jackson, ServiceAttributeValueChangeNotification.class, true) + .bean(metricoService, "handleServiceEvent"); } } diff --git a/src/main/resources/application-testing.yml b/src/main/resources/application-testing.yml index 4e39bc3ec47f7a3d09bd010f8a2a207700cbf73f..74955cc298ea515d5a7507b3b1488c83f575b349 100644 --- a/src/main/resources/application-testing.yml +++ b/src/main/resources/application-testing.yml @@ -65,4 +65,5 @@ CATALOG_UPD_RESOURCE: "direct:CATALOG.UPD.RESOURCE" CATALOG_UPD_SERVICE: "direct:CATALOG.UPD.SERVICE" EVENT_SERVICE_STATE_CHANGED: "jms:topic:EVENT.SERVICE.STATECHANGED" -EVENT_SERVICE_DELETE: "jms:topic:EVENT.SERVICE.DELETE" \ No newline at end of file +EVENT_SERVICE_DELETE: "jms:topic:EVENT.SERVICE.DELETE" +EVENT_SERVICE_ATTRIBUTE_VALUE_CHANGED: "jms:topic:EVENT.SERVICE" \ No newline at end of file diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 7bfdb494b42789b95dd907e419d2529c129cf9e5..3948c4a5449e07384e095791948b4ae5b60465dd 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -62,4 +62,5 @@ CATALOG_UPD_RESOURCE: "jms:queue:CATALOG.UPD.RESOURCE" CATALOG_UPD_SERVICE: "jms:queue:CATALOG.UPD.SERVICE" EVENT_SERVICE_STATE_CHANGED: "jms:topic:EVENT.SERVICE.STATECHANGED" -EVENT_SERVICE_DELETE: "jms:topic:EVENT.SERVICE.DELETE" \ No newline at end of file +EVENT_SERVICE_DELETE: "jms:topic:EVENT.SERVICE.DELETE" +EVENT_SERVICE_ATTRIBUTE_VALUE_CHANGED: "jms:topic:EVENT.SERVICE.ATTRCHANGED" \ No newline at end of file diff --git a/src/test/java/org/etsi/osl/metrico/JsonUtilTest.java b/src/test/java/org/etsi/osl/metrico/JsonUtilTest.java index 944e252f9ecca501ab1737cf75da04f035c223e9..49f838ad6e65ec466387b24a6b21ef786196abe0 100644 --- a/src/test/java/org/etsi/osl/metrico/JsonUtilTest.java +++ b/src/test/java/org/etsi/osl/metrico/JsonUtilTest.java @@ -1,13 +1,10 @@ package org.etsi.osl.metrico; -import org.etsi.osl.tmf.pm628.model.DataAccessEndpoint; -import org.etsi.osl.tmf.pm628.model.ExecutionStateType; import org.etsi.osl.tmf.pm628.model.MeasurementCollectionJob; import org.etsi.osl.tmf.pm628.model.MeasurementCollectionJobMVO; import org.junit.jupiter.api.Test; import java.io.IOException; -import java.util.UUID; import static org.junit.jupiter.api.Assertions.*; diff --git a/src/test/java/org/etsi/osl/metrico/MetricoCommonMethodsTest.java b/src/test/java/org/etsi/osl/metrico/MetricoCommonMethodsTest.java index d66045b1b595fa40a882665d120a4840bd228025..c0d2c16aa613aed503156f2327132e939f771fb8 100644 --- a/src/test/java/org/etsi/osl/metrico/MetricoCommonMethodsTest.java +++ b/src/test/java/org/etsi/osl/metrico/MetricoCommonMethodsTest.java @@ -24,7 +24,9 @@ import org.springframework.boot.test.context.TestConfiguration; import java.io.IOException; import java.net.URI; import java.time.OffsetDateTime; -import java.util.*; +import java.util.ArrayList; +import java.util.List; +import java.util.StringJoiner; import static org.junit.jupiter.api.Assertions.*; diff --git a/src/test/java/org/etsi/osl/metrico/mapper/JobMapperTest.java b/src/test/java/org/etsi/osl/metrico/mapper/JobMapperTest.java index f8cc9a177163c57ef09e3b4416df0f04b67b1eca..c9e1012a9bba3e4901f5aef093d5e19221cd0f6d 100644 --- a/src/test/java/org/etsi/osl/metrico/mapper/JobMapperTest.java +++ b/src/test/java/org/etsi/osl/metrico/mapper/JobMapperTest.java @@ -1,7 +1,10 @@ package org.etsi.osl.metrico.mapper; import org.etsi.osl.metrico.model.Job; -import org.etsi.osl.tmf.pm628.model.*; +import org.etsi.osl.tmf.pm628.model.DataAccessEndpoint; +import org.etsi.osl.tmf.pm628.model.Granularity; +import org.etsi.osl.tmf.pm628.model.MeasurementCollectionJob; +import org.etsi.osl.tmf.pm628.model.ScheduleDefinition; import org.junit.jupiter.api.Test; import java.net.URI; diff --git a/src/test/java/org/etsi/osl/metrico/model/JobTest.java b/src/test/java/org/etsi/osl/metrico/model/JobTest.java index aa5b6b0d0955a6cb0197f540ee543278d61d887c..eb3f79b17c3c5c6a802ea50ca8366ea69c22c76e 100644 --- a/src/test/java/org/etsi/osl/metrico/model/JobTest.java +++ b/src/test/java/org/etsi/osl/metrico/model/JobTest.java @@ -1,6 +1,5 @@ package org.etsi.osl.metrico.model; -import org.etsi.osl.tmf.pm628.model.DataAccessEndpoint; import org.etsi.osl.tmf.pm628.model.ExecutionStateType; import org.junit.jupiter.api.Test; diff --git a/src/test/java/org/etsi/osl/metrico/services/JobServiceTest.java b/src/test/java/org/etsi/osl/metrico/services/JobServiceTest.java index 9e6af25dd329c144b9dfc9f194c58a72a07d957c..904a25d61f539a98bfddc009eb9b6027e7cc25d1 100644 --- a/src/test/java/org/etsi/osl/metrico/services/JobServiceTest.java +++ b/src/test/java/org/etsi/osl/metrico/services/JobServiceTest.java @@ -5,7 +5,6 @@ import org.etsi.osl.metrico.model.Job; import org.etsi.osl.tmf.pm628.model.ExecutionStateType; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import org.mockito.ArgumentCaptor; import java.time.OffsetDateTime; import java.util.UUID; diff --git a/src/test/java/org/etsi/osl/metrico/services/MetricoServiceRouteBuilderTest.java b/src/test/java/org/etsi/osl/metrico/services/MetricoServiceRouteBuilderTest.java index 00da713fb19cb058a7918b43d52d2423600d348a..b72b6e1ff042add68bba0d4784767e083e6ec0a4 100644 --- a/src/test/java/org/etsi/osl/metrico/services/MetricoServiceRouteBuilderTest.java +++ b/src/test/java/org/etsi/osl/metrico/services/MetricoServiceRouteBuilderTest.java @@ -1,11 +1,9 @@ package org.etsi.osl.metrico.services; import com.fasterxml.jackson.databind.ObjectMapper; -import org.apache.camel.CamelContext; import org.apache.camel.ProducerTemplate; import org.apache.camel.test.spring.junit5.CamelSpringBootTest; import org.etsi.osl.metrico.MetricoCommonMethods; -import org.etsi.osl.tmf.pm628.model.MeasurementCollectionJob; import org.etsi.osl.tmf.pm628.model.MeasurementCollectionJobCreateEvent; import org.junit.jupiter.api.Test; import org.mockito.ArgumentCaptor; @@ -14,7 +12,8 @@ import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.test.context.TestPropertySource; -import static org.mockito.Mockito.*; +import static org.mockito.Mockito.timeout; +import static org.mockito.Mockito.verify; @CamelSpringBootTest @SpringBootTest