diff --git a/.gitignore b/.gitignore index 6ada21e2ca4332faf68976197d1033aa7576d54c..acb74c498e6f45d16d48a10480856e7401e0d2fd 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,4 @@ /target -*.iml \ No newline at end of file +*.iml +.classpath +.project \ No newline at end of file diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000000000000000000000000000000000000..742ce1f0065ae0f4cd57127a673e1acdb7df7a56 --- /dev/null +++ b/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,6 @@ +eclipse.preferences.version=1 +encoding//src/main/java=utf-8 +encoding//src/main/resources=UTF-8 +encoding//src/test/java=utf-8 +encoding//src/test/resources=UTF-8 +encoding/<project>=UTF-8 diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000000000000000000000000000000000000..cf2cd4590a7b37a700141633a3f00c030130be1e --- /dev/null +++ b/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,8 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=17 +org.eclipse.jdt.core.compiler.compliance=17 +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled +org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore +org.eclipse.jdt.core.compiler.release=disabled +org.eclipse.jdt.core.compiler.source=17 diff --git a/src/main/java/org/etsi/osl/metrico/MetricoRouteBuilder.java b/src/main/java/org/etsi/osl/metrico/MetricoRouteBuilder.java deleted file mode 100644 index 879eefff884b5098224c90fdc7e6f5f047916e46..0000000000000000000000000000000000000000 --- a/src/main/java/org/etsi/osl/metrico/MetricoRouteBuilder.java +++ /dev/null @@ -1,44 +0,0 @@ -package org.etsi.osl.metrico; - - -import org.apache.camel.LoggingLevel; -import org.apache.camel.builder.RouteBuilder; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.etsi.osl.metrico.prometheus.PrometheusQueries; -import org.etsi.osl.metrico.reposervices.JobRepoService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Configuration; -import org.springframework.stereotype.Component; -import org.etsi.osl.centrallog.client.CentralLogger; - -@Configuration -@Component -public class MetricoRouteBuilder extends RouteBuilder { - - private static final transient Log logger = LogFactory.getLog(MetricoRouteBuilder.class); - - final JobRepoService jobRepoService; - private final PrometheusQueries prometheusQueries; - - public MetricoRouteBuilder(JobRepoService jobRepoService, PrometheusQueries prometheusQueries) { - this.jobRepoService = jobRepoService; - this.prometheusQueries = prometheusQueries; - } - - @Value("${MEASUREMENT_COLLECTION_JOB_CREATED}") - private static String MEASUREMENT_COLLECTION_JOB_CREATED; - - @Value("${MEASUREMENT_COLLECTION_JOB_RESPONSE}") - private static String MEASUREMENT_COLLECTION_JOB_RESPONSE ; - - public void configure() throws Exception{ - from(MEASUREMENT_COLLECTION_JOB_CREATED) - .log(LoggingLevel.INFO, log, MEASUREMENT_COLLECTION_JOB_CREATED + "message received!") - .to("log:DEBUG?showBody=true&showHeaders=true") - .setBody(simple("Message received and processed")) - .to(MEASUREMENT_COLLECTION_JOB_RESPONSE); - - } -} diff --git a/src/main/java/org/etsi/osl/metrico/MetricoRouteBuilder.java.remove b/src/main/java/org/etsi/osl/metrico/MetricoRouteBuilder.java.remove new file mode 100644 index 0000000000000000000000000000000000000000..8ce2d74459e3ea688b77b0318d48e286f3bd143c --- /dev/null +++ b/src/main/java/org/etsi/osl/metrico/MetricoRouteBuilder.java.remove @@ -0,0 +1,44 @@ +//package org.etsi.osl.metrico; +// +// +//import org.apache.camel.LoggingLevel; +//import org.apache.camel.builder.RouteBuilder; +//import org.apache.commons.logging.Log; +//import org.apache.commons.logging.LogFactory; +//import org.etsi.osl.metrico.prometheus.PrometheusQueries; +//import org.etsi.osl.metrico.reposervices.JobRepoService; +//import org.springframework.beans.factory.annotation.Autowired; +//import org.springframework.beans.factory.annotation.Value; +//import org.springframework.context.annotation.Configuration; +//import org.springframework.stereotype.Component; +//import org.etsi.osl.centrallog.client.CentralLogger; +// +//@Configuration +//@Component +//public class MetricoRouteBuilder extends RouteBuilder { +// +// private static final transient Log logger = LogFactory.getLog(MetricoRouteBuilder.class); +// +// final JobRepoService jobRepoService; +// private final PrometheusQueries prometheusQueries; +// +// public MetricoRouteBuilder(JobRepoService jobRepoService, PrometheusQueries prometheusQueries) { +// this.jobRepoService = jobRepoService; +// this.prometheusQueries = prometheusQueries; +// } +// +// @Value("${MEASUREMENT_COLLECTION_JOB_CREATED}") +// private static String MEASUREMENT_COLLECTION_JOB_CREATED; +// +// @Value("${MEASUREMENT_COLLECTION_JOB_RESPONSE}") +// private static String MEASUREMENT_COLLECTION_JOB_RESPONSE ; +// +// public void configure() throws Exception{ +// from(MEASUREMENT_COLLECTION_JOB_CREATED) +// .log(LoggingLevel.INFO, log, MEASUREMENT_COLLECTION_JOB_CREATED + "message received!") +// .to("log:DEBUG?showBody=true&showHeaders=true") +// .setBody(simple("Message received and processed")) +// .to(MEASUREMENT_COLLECTION_JOB_RESPONSE); +// +// } +//} diff --git a/src/main/java/org/etsi/osl/metrico/model/Job.java b/src/main/java/org/etsi/osl/metrico/model/Job.java index fc56018a8a632f1b089ce145714dbd462289c4af..653a10ccea7826fdb3b02ddb4ee6164d49746056 100644 --- a/src/main/java/org/etsi/osl/metrico/model/Job.java +++ b/src/main/java/org/etsi/osl/metrico/model/Job.java @@ -14,6 +14,7 @@ import java.time.OffsetDateTime; import java.util.UUID; import java.util.concurrent.ScheduledFuture; + @Getter @Setter @Entity @@ -100,4 +101,51 @@ public class Job{ '}'; } + public void setUuid(UUID uuid) { + this.uuid = uuid; + } + + public void setState(ExecutionStateType state) { + this.state = state; + } + + public void setStartDateTime(OffsetDateTime startDateTime) { + this.startDateTime = startDateTime; + } + + public void setEndDateTime(OffsetDateTime endDateTime) { + this.endDateTime = endDateTime; + } + + public void setExecutionInterval(Integer executionInterval) { + this.executionInterval = executionInterval; + } + + public void setDataAccessEndPointRef(UUID dataAccessEndPointRef) { + this.dataAccessEndPointRef = dataAccessEndPointRef; + } + + public void setScheduleDefinitionRef(UUID scheduleDefinitionRef) { + this.scheduleDefinitionRef = scheduleDefinitionRef; + } + + public void setMeasurementCollectionJobRef(UUID measurementCollectionJobRef) { + this.measurementCollectionJobRef = measurementCollectionJobRef; + } + + public void setDataAccessEndPointUri(URI dataAccessEndPointUri) { + this.dataAccessEndPointUri = dataAccessEndPointUri; + } + + public void setApiType(String apiType) { + this.apiType = apiType; + } + + public void setDeleted(boolean deleted) { + this.deleted = deleted; + } + + public void setFuture(ScheduledFuture<?> future) { + this.future = future; + } } 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 bf6083f117faba07c0360ce2777f03ceda09a414..aadbc05bef4669745b54cf13de7ac7d6b300b397 100644 --- a/src/main/java/org/etsi/osl/metrico/prometheus/PrometheusQueries.java +++ b/src/main/java/org/etsi/osl/metrico/prometheus/PrometheusQueries.java @@ -7,6 +7,7 @@ import org.etsi.osl.tmf.pm628.model.ExecutionStateType; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Component; import org.springframework.stereotype.Service; import org.springframework.web.client.RestTemplate; import org.springframework.web.util.UriComponentsBuilder; @@ -18,7 +19,7 @@ import java.util.concurrent.TimeUnit; /** * This class contains the Prometheus Queries for the metrics. */ -@Service +@Component public class PrometheusQueries { private static final Logger logger = LoggerFactory.getLogger(PrometheusQueries.class); @@ -34,7 +35,7 @@ public class PrometheusQueries { UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(prometheusUrl) .path("/api/v1/query") .queryParam("query", query); - logger.atInfo().log("Sent query at prometheus with URL: " + prometheusUrl + "with query: " + query); + logger.atInfo().log("Sent query at prometheus with URL: " + prometheusUrl + " with query: " + query); ResponseEntity<String> response = restTemplate.getForEntity(builder.toUriString(), String.class); logger.atDebug().log("Received " + response.getBody()); @@ -46,7 +47,9 @@ public class PrometheusQueries { final Runnable queryHandler = new Runnable() { public void run() { new Thread(() -> { + sendQueryToPrometheus(prometheusUrl, query); + }).start(); } }; 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 ff5db132a18a23a2d797c497b6e9cb83131135c3..4c9b10eae58cd6c93d5fa81f5391cd7cd4f12f14 100644 --- a/src/main/java/org/etsi/osl/metrico/services/MetricoService.java +++ b/src/main/java/org/etsi/osl/metrico/services/MetricoService.java @@ -8,33 +8,28 @@ import org.etsi.osl.tmf.pm628.model.ExecutionStateType; import org.etsi.osl.tmf.pm628.model.MeasurementCollectionJob; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Service; -import java.net.URI; import java.time.OffsetDateTime; +@Service public class MetricoService { private static final Logger logger = LoggerFactory.getLogger(JobService.class); private final PrometheusQueries prometheusQueries; - @Autowired public MetricoService(PrometheusQueries prometheusQueries) { this.prometheusQueries = prometheusQueries; } - public String sendQueryToPrometheus(String param1, String param2) { - return prometheusQueries.sendQueryToPrometheus(param1, param2); - + public String sendQueryToPrometheus(String promURL, String promQuery) { + return prometheusQueries.sendQueryToPrometheus(promURL, promQuery); } public String[] queryToPrometheus(@NotNull MeasurementCollectionJob givenMCJ){ Job job = JobMapper.measurementCollectionJobMapToJob(givenMCJ); - URI uri = job.getDataAccessEndPointUri(); String promURL = job.getDataAccessEndPointUri().getScheme() + "://" + job.getDataAccessEndPointUri().getAuthority(); String promQuery = job.getDataAccessEndPointUri().getQuery(); promQuery = promQuery.replace("query=", ""); diff --git a/src/test/java/org/etsi/osl/metrico/services/MetricoServiceTest.java b/src/test/java/org/etsi/osl/metrico/services/MetricoServiceTest.java index 783bae7c6174ed4b3347b1a00a60d2f7beadc003..e0830f7034d0140a33a0c33b9711f8ca654b87c4 100644 --- a/src/test/java/org/etsi/osl/metrico/services/MetricoServiceTest.java +++ b/src/test/java/org/etsi/osl/metrico/services/MetricoServiceTest.java @@ -1,35 +1,29 @@ package org.etsi.osl.metrico.services; -import org.etsi.osl.metrico.mapper.JobMapper; -import org.etsi.osl.metrico.model.Job; -import org.etsi.osl.metrico.prometheus.PrometheusQueries; 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.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; -import org.mockito.InjectMocks; -import org.mockito.Mock; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit.jupiter.SpringExtension; + import java.util.*; import java.net.URI; import java.net.URISyntaxException; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Mockito.when; +@SpringBootTest +@ExtendWith(SpringExtension.class) public class MetricoServiceTest { - @Mock - private PrometheusQueries prometheusQueries; - - @InjectMocks - private MetricoService metricoService = new MetricoService(prometheusQueries); + @Autowired + private MetricoService metricoService; private MeasurementCollectionJob mcj; - private Job job; @BeforeEach public void setUp() throws URISyntaxException { @@ -40,7 +34,7 @@ public class MetricoServiceTest { DataAccessEndpoint dae = new DataAccessEndpoint(); dae.setApiType("PROMETHEUS"); - dae.setUri(new URI("http://150.140.195.195:9090/api/v1/query?query=cell_dl_bitrate")); + dae.setUri(new URI("http://150.140.195.195:9090/api/v1/query?query=netdata_app_disk_physical_io_KiB_persec_average")); dae.setUuid("123e4567-e89b-12d3-a456-426614174011"); List<DataAccessEndpoint> daeList = new ArrayList<>(); daeList.add(dae);