diff --git a/src/main/java/org/etsi/osl/metrico/MetricoController.java b/src/main/java/org/etsi/osl/metrico/MetricoController.java index e174511b93cddabd650354a51bcd6fd94d1634db..4d50aae23b8aa8ed9de5d9f18a653397e9675bc4 100644 --- a/src/main/java/org/etsi/osl/metrico/MetricoController.java +++ b/src/main/java/org/etsi/osl/metrico/MetricoController.java @@ -2,7 +2,7 @@ package org.etsi.osl.metrico; import org.etsi.osl.metrico.model.Job; -import org.etsi.osl.metrico.model.StartPeriodicQueryRequest; +import org.etsi.osl.metrico.model.PeriodicQueryRequest; import org.etsi.osl.metrico.prometheus.PrometheusQueries; import org.etsi.osl.tmf.pm628.model.ExecutionStateType; import org.slf4j.Logger; @@ -48,7 +48,7 @@ public class MetricoController { } @PostMapping("/startPeriodicQuery") - public ResponseEntity<String> startPeriodicQuery(@RequestBody StartPeriodicQueryRequest request) { + public ResponseEntity<String> startPeriodicQuery(@RequestBody PeriodicQueryRequest request) { logger.atDebug().setMessage("/startPeriodicQuery endpoint called with request body: " + request).log(); logger.atInfo().setMessage("/startPeriodicQuery endpoint called with query: " + request.getQuery()).log(); if (request.getProm_ip() == null) { @@ -67,8 +67,7 @@ public class MetricoController { logger.atDebug().setMessage("/startPeriodicQuery endpoint called without a stopAfterSeconds. Job will not stop by itself.").log(); } String prom_url = request.getProtocol() + "://" + request.getProm_ip() + ":" + request.getProm_port(); - Job newPeriodicQuery = prometheusQueries.startPeriodicQuery(prom_url, request.getQuery(), request.getStartDateTime(), request.getEndDateTime(), request.getExecutionInterval() - ); + Job newPeriodicQuery = prometheusQueries.startPeriodicQuery(prom_url, request.getQuery(), request.getStartDateTime(), request.getEndDateTime(), request.getExecutionInterval()); if(newPeriodicQuery.getState()== ExecutionStateType.FAILED){ return new ResponseEntity<>("Periodic query failed to start due to internal error.", HttpStatus.INTERNAL_SERVER_ERROR); } diff --git a/src/main/java/org/etsi/osl/metrico/mapper/JobMapper.java b/src/main/java/org/etsi/osl/metrico/mapper/JobMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..d677cbc133d7a36dc44a1c2769c4b638f5860d3d --- /dev/null +++ b/src/main/java/org/etsi/osl/metrico/mapper/JobMapper.java @@ -0,0 +1,48 @@ +package org.etsi.osl.metrico.mapper; + +import org.etsi.osl.metrico.model.Job; +import org.etsi.osl.tmf.pm628.model.DataAccessEndpoint; +import org.etsi.osl.tmf.pm628.model.MeasurementCollectionJob; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.UUID; + +public class JobMapper { + + private static final Logger logger = LoggerFactory.getLogger(JobMapper.class); + + public static Job measurementCollectionJobMapToJob(MeasurementCollectionJob measurementCollectionJob) { + Job job = new Job(); + + job.setMeasurementCollectionJobRef(UUID.fromString(measurementCollectionJob.getUuid())); + if(measurementCollectionJob.getDataAccessEndpoint().size()!=1){ + throw new IllegalArgumentException("DataAccessEndpoint should be exactly one"); + }else { + DataAccessEndpoint dataAccessEndpoint = measurementCollectionJob.getDataAccessEndpoint().get(0); + job.setDataAccessEndPointRef(UUID.fromString(dataAccessEndpoint.getUuid())); + if( dataAccessEndpoint.getApiType().equalsIgnoreCase("PROMETHEUS")){ + job.setApiType(dataAccessEndpoint.getApiType()); + } else if (dataAccessEndpoint.getApiType() == null ) { + throw new IllegalArgumentException("API type needs to be defined"); + }else{ + throw new IllegalArgumentException("API type not supported"); + } + job.setDateAccessEndPointUri(dataAccessEndpoint.getUri()); + job.setQuery(dataAccessEndpoint.getUriQueryFilter()); + + } + + job.setStartDateTime(measurementCollectionJob.getScheduleDefinition().get(0).getScheduleDefinitionStartTime()); + job.setEndDateTime(measurementCollectionJob.getScheduleDefinition().get(0).getScheduleDefinitionEndTime()); + + /* + Extend the reporting period and granularitypossible values + job.setStartDateTime(measurementCollectionJob.getReportingPeriod()); + job.setExecutionInterval(measurementCollectionJob.getGranularity()); + */ + + return job; + } + +} 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 8724ee87a695f814198c8953c380f3da5235c7ee..a456d796f8168e9bc2fb94320bb74fbc8a62a373 100644 --- a/src/main/java/org/etsi/osl/metrico/model/Job.java +++ b/src/main/java/org/etsi/osl/metrico/model/Job.java @@ -4,10 +4,12 @@ import com.fasterxml.jackson.annotation.JsonIgnore; import jakarta.persistence.*; import lombok.Getter; import lombok.Setter; +import org.etsi.osl.tmf.pm628.model.DataFilterMap; import org.etsi.osl.tmf.pm628.model.ExecutionStateType; import org.hibernate.annotations.GenericGenerator; import org.springframework.format.annotation.DateTimeFormat; +import java.net.URI; import java.time.OffsetDateTime; import java.util.UUID; import java.util.concurrent.ScheduledFuture; @@ -43,6 +45,12 @@ public class Job{ // Should I check the granularity or the scheduleDefinitionRef for the recurringFrequency? private UUID measurementCollectionJobRef; + private URI dateAccessEndPointUri; + + private DataFilterMap query; + + private String apiType; + @JsonIgnore private boolean deleted = false; diff --git a/src/main/java/org/etsi/osl/metrico/model/StartPeriodicQueryRequest.java b/src/main/java/org/etsi/osl/metrico/model/PeriodicQueryRequest.java similarity index 79% rename from src/main/java/org/etsi/osl/metrico/model/StartPeriodicQueryRequest.java rename to src/main/java/org/etsi/osl/metrico/model/PeriodicQueryRequest.java index d0b245d92b11224273071598e4b1bcd3c43a152e..b9937f96fb6abeb791a3a047cb31f3db2246d7f0 100644 --- a/src/main/java/org/etsi/osl/metrico/model/StartPeriodicQueryRequest.java +++ b/src/main/java/org/etsi/osl/metrico/model/PeriodicQueryRequest.java @@ -2,13 +2,12 @@ package org.etsi.osl.metrico.model; import lombok.Getter; import lombok.Setter; -import org.springframework.format.annotation.DateTimeFormat; import java.time.OffsetDateTime; @Setter @Getter -public class StartPeriodicQueryRequest { +public class PeriodicQueryRequest { private String protocol = "https"; private String prom_ip; private String prom_port = "9090"; @@ -16,4 +15,5 @@ public class StartPeriodicQueryRequest { private OffsetDateTime startDateTime; private OffsetDateTime endDateTime; private int executionInterval = 300; + private Job job; }