Commit a36e1377 authored by George Tziavas's avatar George Tziavas
Browse files

Several changes to match PM628 to METRICO

parent aaf2415e
Loading
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -37,7 +37,6 @@ public class MetricoRouteBuilder extends RouteBuilder {
        from(MEASUREMENT_COLLECTION_JOB_CREATED)
                .log(LoggingLevel.INFO, log, MEASUREMENT_COLLECTION_JOB_CREATED + "message received!")
                .to("log:DEBUG?showBody=true&showHeaders=true")
                .process(exchange -> prometheusQueries.startPeriodicQuery())
                .setBody(simple("Message received and processed"))
                .to(MEASUREMENT_COLLECTION_JOB_RESPONSE);

+53 −12
Original line number Diff line number Diff line
package org.etsi.osl.metrico.mapper;

import jakarta.validation.Valid;
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.etsi.osl.metrico.model.SupportedDataAccessEndpoints;
import org.etsi.osl.tmf.pm628.model.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.UUID;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class JobMapper {

@@ -16,33 +19,71 @@ public class JobMapper {
        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")){
            if(SupportedDataAccessEndpoints.contains(dataAccessEndpoint.getApiType())){
                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");
                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.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;
    }

    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);
    }
}
+1 −1
Original line number Diff line number Diff line
@@ -45,7 +45,7 @@ public class Job{
    // Should I check the granularity or the scheduleDefinitionRef for the recurringFrequency?
    private UUID measurementCollectionJobRef;

    private URI dateAccessEndPointUri;
    private URI dataAccessEndPointUri;

    private DataFilterMap query;

+16 −0
Original line number Diff line number Diff line
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;
        }
    }
}

+51 −0
Original line number Diff line number Diff line
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();



    }

}