Skip to content
Snippets Groups Projects
Commit a36e1377 authored by George Tziavas's avatar George Tziavas
Browse files

Several changes to match PM628 to METRICO

parent aaf2415e
No related branches found
No related tags found
2 merge requests!5MR for Release 2024Q4,!1Creating first version of metrico
Pipeline #9980 failed
...@@ -37,7 +37,6 @@ public class MetricoRouteBuilder extends RouteBuilder { ...@@ -37,7 +37,6 @@ public class MetricoRouteBuilder extends RouteBuilder {
from(MEASUREMENT_COLLECTION_JOB_CREATED) from(MEASUREMENT_COLLECTION_JOB_CREATED)
.log(LoggingLevel.INFO, log, MEASUREMENT_COLLECTION_JOB_CREATED + "message received!") .log(LoggingLevel.INFO, log, MEASUREMENT_COLLECTION_JOB_CREATED + "message received!")
.to("log:DEBUG?showBody=true&showHeaders=true") .to("log:DEBUG?showBody=true&showHeaders=true")
.process(exchange -> prometheusQueries.startPeriodicQuery())
.setBody(simple("Message received and processed")) .setBody(simple("Message received and processed"))
.to(MEASUREMENT_COLLECTION_JOB_RESPONSE); .to(MEASUREMENT_COLLECTION_JOB_RESPONSE);
......
package org.etsi.osl.metrico.mapper; package org.etsi.osl.metrico.mapper;
import jakarta.validation.Valid;
import org.etsi.osl.metrico.model.Job; import org.etsi.osl.metrico.model.Job;
import org.etsi.osl.tmf.pm628.model.DataAccessEndpoint; import org.etsi.osl.metrico.model.SupportedDataAccessEndpoints;
import org.etsi.osl.tmf.pm628.model.MeasurementCollectionJob; import org.etsi.osl.tmf.pm628.model.*;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import java.util.UUID; import java.util.UUID;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class JobMapper { public class JobMapper {
...@@ -16,33 +19,71 @@ public class JobMapper { ...@@ -16,33 +19,71 @@ public class JobMapper {
Job job = new Job(); Job job = new Job();
job.setMeasurementCollectionJobRef(UUID.fromString(measurementCollectionJob.getUuid())); job.setMeasurementCollectionJobRef(UUID.fromString(measurementCollectionJob.getUuid()));
if(measurementCollectionJob.getDataAccessEndpoint().size()!=1){ if(measurementCollectionJob.getDataAccessEndpoint().size()!=1){
throw new IllegalArgumentException("DataAccessEndpoint should be exactly one"); throw new IllegalArgumentException("DataAccessEndpoint should be exactly one");
}else { }else {
DataAccessEndpoint dataAccessEndpoint = measurementCollectionJob.getDataAccessEndpoint().get(0); DataAccessEndpoint dataAccessEndpoint = measurementCollectionJob.getDataAccessEndpoint().get(0);
job.setDataAccessEndPointRef(UUID.fromString(dataAccessEndpoint.getUuid())); job.setDataAccessEndPointRef(UUID.fromString(dataAccessEndpoint.getUuid()));
if( dataAccessEndpoint.getApiType().equalsIgnoreCase("PROMETHEUS")){ if(SupportedDataAccessEndpoints.contains(dataAccessEndpoint.getApiType())){
job.setApiType(dataAccessEndpoint.getApiType()); job.setApiType(dataAccessEndpoint.getApiType());
} else if (dataAccessEndpoint.getApiType() == null ) { } else if (dataAccessEndpoint.getApiType() == null ) {
throw new IllegalArgumentException("API type needs to be defined"); throw new IllegalArgumentException("API type needs to be defined");
}else{ }else{
throw new IllegalArgumentException("API type not supported"); throw new IllegalArgumentException("API type " + dataAccessEndpoint.getApiType() + " not supported");
}
if(dataAccessEndpoint.getUri()!=null){
job.setDataAccessEndPointUri(dataAccessEndpoint.getUri());
} else {
throw new IllegalArgumentException("DataAccessEndpointUri cannot be null");
} }
job.setDateAccessEndPointUri(dataAccessEndpoint.getUri());
job.setQuery(dataAccessEndpoint.getUriQueryFilter());
} if(measurementCollectionJob.getJobCollectionFilter().getMappings().size() == 1){
DataFilterMap query = measurementCollectionJob.getJobCollectionFilter();
// String stringQuery = measurementCollectionJob.getJobCollectionFilter().getMappings().get(0).getFilterTemplate().getDescription();
job.setQuery(query);
} else {
throw new IllegalArgumentException("There should be exactly one query");
}
}
job.setStartDateTime(measurementCollectionJob.getScheduleDefinition().get(0).getScheduleDefinitionStartTime()); job.setStartDateTime(measurementCollectionJob.getScheduleDefinition().get(0).getScheduleDefinitionStartTime());
job.setEndDateTime(measurementCollectionJob.getScheduleDefinition().get(0).getScheduleDefinitionEndTime()); job.setEndDateTime(measurementCollectionJob.getScheduleDefinition().get(0).getScheduleDefinitionEndTime());
/*
Extend the reporting period and granularitypossible values
job.setStartDateTime(measurementCollectionJob.getReportingPeriod());
job.setExecutionInterval(measurementCollectionJob.getGranularity());
*/
// job.setStartDateTime(measurementCollectionJob.getReportingPeriod());
@Valid Granularity granularity = measurementCollectionJob.getGranularity();
job.setExecutionInterval(convertGranularityToSeconds(measurementCollectionJob.getGranularity().getValue()));
logger.atDebug().setMessage("Received MeasurementCollectionJob:\n" + measurementCollectionJob + "\nConverted it to Job:\n" + job).log();
return job; return job;
} }
public static int convertGranularityToSeconds(String value) {
Pattern PATTERN = Pattern.compile("G_(\\d+)(SEC|MN|H|D|M|Y)");
if (Granularity.contains(value)) {
Matcher matcher = PATTERN.matcher(value);
if (matcher.matches()) {
int amount = Integer.parseInt(matcher.group(1));
String unit = matcher.group(2);
if(value.equalsIgnoreCase(Granularity.NA.getValue())){
return Integer.parseInt(null);
}
return switch (unit) {
case "SEC" -> amount;
case "MIN" -> amount * 60;
case "H" -> amount * 3600;
case "D" -> amount * 86400;
case "M" -> amount * 2592000; // Approximate value for a month
case "Y" -> amount * 31536000; // Approximate value for a year
default -> throw new IllegalArgumentException("Unknown Granularity unit: " + unit);
};
}
}
throw new IllegalArgumentException("Invalid Granularity format: " + value);
}
} }
...@@ -45,7 +45,7 @@ public class Job{ ...@@ -45,7 +45,7 @@ public class Job{
// Should I check the granularity or the scheduleDefinitionRef for the recurringFrequency? // Should I check the granularity or the scheduleDefinitionRef for the recurringFrequency?
private UUID measurementCollectionJobRef; private UUID measurementCollectionJobRef;
private URI dateAccessEndPointUri; private URI dataAccessEndPointUri;
private DataFilterMap query; private DataFilterMap query;
......
package org.etsi.osl.metrico.model;
public enum SupportedDataAccessEndpoints {
PROMETHEUS;
public static boolean contains(String apiType) {
try {
SupportedDataAccessEndpoints.valueOf(apiType.toUpperCase());
return true;
} catch (IllegalArgumentException e) {
return false;
}
}
}
package org.etsi.osl.metrico.mapper;
import org.etsi.osl.tmf.pm628.model.DataAccessEndpoint;
import org.etsi.osl.tmf.pm628.model.DataFilterMap;
import org.etsi.osl.tmf.pm628.model.DataFilterMapItem;
import org.etsi.osl.tmf.pm628.model.MeasurementCollectionJob;
import org.jetbrains.annotations.NotNull;
import java.net.URI;
import java.util.*;
public class JobMapperTest {
public MeasurementCollectionJob measurementCollectionJobCreate() {
MeasurementCollectionJob measurementCollectionJob = new MeasurementCollectionJob();
List<DataAccessEndpoint> dataAccessEndpointList = new ArrayList<>();
dataAccessEndpointList.add(dataAccessEndpointCreate());
measurementCollectionJob.setUuid("9f22dc98-f439-4fdd-98e3-f6471cf8ca67");
measurementCollectionJob.setDataAccessEndpoint(dataAccessEndpointList);
measurementCollectionJob.set
return measurementCollectionJob;
}
public DataAccessEndpoint dataAccessEndpointCreate(){
DataAccessEndpoint dataAccessEndpoint = new DataAccessEndpoint();
dataAccessEndpoint.setUuid("123e4567-e89b-12d3-a456-426614174000");
dataAccessEndpoint.setUri(URI.create("example.com"));
dataAccessEndpoint.setApiType("Prometheus");
return dataAccessEndpoint;
}
public DataFilterMap dataFilterMapCreate(){
DataFilterMap dataFilterMap = new DataFilterMap();
// dataFilterMap.setMappings();
return dataFilterMap;
}
public DataFilterMapItem dataFilterMapItemCreate(){
DataFilterMapItem dataFilterMapItem = new DataFilterMapItem();
dataFilterMapItem.setFilterTemplate();
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment