From c5c2441a077e12dc5ec36b0489d909c8b622a46b Mon Sep 17 00:00:00 2001
From: George Tziavas <g.tziavas@ac.upatras.gr>
Date: Mon, 16 Sep 2024 13:15:36 +0300
Subject: [PATCH] Added JobMapper

---
 .../etsi/osl/metrico/MetricoController.java   |  7 ++-
 .../etsi/osl/metrico/mapper/JobMapper.java    | 48 +++++++++++++++++++
 .../java/org/etsi/osl/metrico/model/Job.java  |  8 ++++
 ...Request.java => PeriodicQueryRequest.java} |  4 +-
 4 files changed, 61 insertions(+), 6 deletions(-)
 create mode 100644 src/main/java/org/etsi/osl/metrico/mapper/JobMapper.java
 rename src/main/java/org/etsi/osl/metrico/model/{StartPeriodicQueryRequest.java => PeriodicQueryRequest.java} (79%)

diff --git a/src/main/java/org/etsi/osl/metrico/MetricoController.java b/src/main/java/org/etsi/osl/metrico/MetricoController.java
index e174511..4d50aae 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 0000000..d677cbc
--- /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 8724ee8..a456d79 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 d0b245d..b9937f9 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;
 }
-- 
GitLab