diff --git a/pom.xml b/pom.xml index ab42bdf9c800c37c2934a71d38989bd6202f8423..ac1f11cd25eaec6818a8270957e5a5756865b2d9 100644 --- a/pom.xml +++ b/pom.xml @@ -12,7 +12,7 @@ <artifactId>org.etsi.osl.metrico</artifactId> <name>org.etsi.osl.metrico</name> -<!-- <version>${org.etsi.osl.cridge.version}</version>--> +<!-- <version>${org.etsi.osl.metrico.version}</version>--> <url>http://openslice.io</url> <organization> 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 aadbc05bef4669745b54cf13de7ac7d6b300b397..7f2d14a547eeb45b27ddcfa3ad12ce3179b670c9 100644 --- a/src/main/java/org/etsi/osl/metrico/prometheus/PrometheusQueries.java +++ b/src/main/java/org/etsi/osl/metrico/prometheus/PrometheusQueries.java @@ -1,6 +1,5 @@ package org.etsi.osl.metrico.prometheus; - import org.etsi.osl.metrico.model.Job; import org.etsi.osl.metrico.services.JobService; import org.etsi.osl.tmf.pm628.model.ExecutionStateType; @@ -8,7 +7,6 @@ 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; @@ -16,9 +14,6 @@ import java.time.Duration; import java.time.OffsetDateTime; import java.util.concurrent.TimeUnit; -/** - * This class contains the Prometheus Queries for the metrics. - */ @Component public class PrometheusQueries { @@ -29,7 +24,7 @@ public class PrometheusQueries { this.jobService = jobService; } - public String sendQueryToPrometheus(String prometheusUrl, String query){ + public String sendQueryToPrometheus(String prometheusUrl, String query) { RestTemplate restTemplate = new RestTemplate(); UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(prometheusUrl) @@ -39,25 +34,18 @@ public class PrometheusQueries { ResponseEntity<String> response = restTemplate.getForEntity(builder.toUriString(), String.class); logger.atDebug().log("Received " + response.getBody()); - return response.getBody(); // This will be sent to the MQ + return response.getBody(); } public Job startPeriodicQuery(String prometheusUrl, String query, OffsetDateTime startDateTime, OffsetDateTime endDateTime, Integer executionInterval) { - final Runnable queryHandler = new Runnable() { - public void run() { - new Thread(() -> { - - sendQueryToPrometheus(prometheusUrl, query); + final Runnable queryHandler = () -> sendQueryToPrometheus(prometheusUrl, query); - }).start(); - } - }; Job job = jobService.startJob(queryHandler, startDateTime, endDateTime, executionInterval); - if(job.getState() == ExecutionStateType.FAILED){ + if (job.getState() == ExecutionStateType.FAILED) { return job; } - // Schedule a task to stop the job after the specified delay + if (endDateTime != null) { long stopAfterSeconds = Duration.between(OffsetDateTime.now(), endDateTime).getSeconds(); JobService.getScheduler().schedule(() -> { @@ -65,8 +53,9 @@ public class PrometheusQueries { job.setState(ExecutionStateType.COMPLETED); }, stopAfterSeconds, TimeUnit.SECONDS); } + return job; } +} -} diff --git a/src/main/java/org/etsi/osl/metrico/services/JobService.java b/src/main/java/org/etsi/osl/metrico/services/JobService.java index 4c5e3cac941ea005a660032003e18343c208bb52..128a9bf5111f5765c45560f7d375917f160179ad 100644 --- a/src/main/java/org/etsi/osl/metrico/services/JobService.java +++ b/src/main/java/org/etsi/osl/metrico/services/JobService.java @@ -7,6 +7,7 @@ import org.etsi.osl.tmf.pm628.model.ExecutionStateType; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import java.time.Duration; @@ -22,8 +23,10 @@ public class JobService { @Getter private static final Map<UUID, Job> jobs = new ConcurrentHashMap<>(); + @Value("${METRICO_THREAD_POOL_SIZE}") + private static int threadPoolSize; @Getter - private static final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); + private static final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(threadPoolSize); private final JobRepoService jobRepoService; diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 07b2eaca893fda440a4b0c79a853f411a53487c8..22ba8008e42de14e7c17283c3bf0ba2fff70db67 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -61,6 +61,9 @@ logging: scheduling.enabled: true +#NUMBER OF THREADS FOR THE METRICO THREAD POOL +METRICO_THREAD_POOL_SIZE: 10 + #TMF QUEUES PM_GET_MEASUREMENT_COLLECTION_JOB_BY_ID: "jms:queue:PM.GET.MEASUREMENTCOLLECTIONJOB_BY_ID" PM_GET_MEASUREMENT_COLLECTION_JOBS: "jms:queue:PM.GET.MEASUREMENTCOLLECTIONJOBS" 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 e0830f7034d0140a33a0c33b9711f8ca654b87c4..f4001103080a03b8571d2ac92b78a40cbea2a1b5 100644 --- a/src/test/java/org/etsi/osl/metrico/services/MetricoServiceTest.java +++ b/src/test/java/org/etsi/osl/metrico/services/MetricoServiceTest.java @@ -30,7 +30,7 @@ public class MetricoServiceTest { mcj = new MeasurementCollectionJob(); mcj.setUuid("123e4567-e89b-12d3-a456-426614174000"); - mcj.granularity(Granularity.G_1M); + mcj.granularity(Granularity.G_10SEC); DataAccessEndpoint dae = new DataAccessEndpoint(); dae.setApiType("PROMETHEUS"); @@ -48,11 +48,13 @@ public class MetricoServiceTest { public void testQueryToPrometheus() { String[] result = metricoService.queryToPrometheus(mcj); System.out.println(Arrays.toString(result)); + //assertEquals("OK", result); } @Test - public void testStartPeriodicQueryToPrometheus(){ + public void testStartPeriodicQueryToPrometheus() throws InterruptedException { metricoService.startPeriodicQueryToPrometheus(mcj); + Thread.sleep(60000); } } \ No newline at end of file diff --git a/src/test/resources/application.yml b/src/test/resources/application.yml index 4e3970ab7ad3736fb0f3611e3a80ede4379b68c5..35e904d5ad6a64bd8e7868c6fbcf46bad9afaaf2 100644 --- a/src/test/resources/application.yml +++ b/src/test/resources/application.yml @@ -5,4 +5,8 @@ spring: username: sa password: password jpa: - database-platform: org.hibernate.dialect.H2Dialect \ No newline at end of file + database-platform: org.hibernate.dialect.H2Dialect + + +#NUMBER OF THREADS FOR THE METRICO THREAD POOL +METRICO_THREAD_POOL_SIZE: 10 \ No newline at end of file