Commit 1aa5baa7 authored by Noel Alonso's avatar Noel Alonso
Browse files

Crea util para calcular el timeinterval óptimo

Según el rango de fechas de los datos pedidos y el intervalo de tiempo
entre cada dato, se puede calcular aproximadamente el timeInterval para
maximizar el número de buckets devuelto en la consulta. Si el
timeInterval original cumpliera esta condición, este se respetaría,
obteniendo así los datos brutos.
parent 5cf22bc0
Loading
Loading
Loading
Loading
+29 −0
Original line number Diff line number Diff line
package es.redmic.timeseriesview.utils;

import es.redmic.models.es.common.query.dto.DateLimitsDTO;

public abstract class TimeSeriesUtils {

	// @formatter:off

	public static final Long TIME_INTERVAL_DEFAULT = 3600000L,
			MAX_BUCKETS = 10000L;

	// @formatter:on

	public static Long getTimeInterval(Long timeIntervalDefault, DateLimitsDTO dateLimits) {

		if (timeIntervalDefault == null || dateLimits.getEndDate() == null || dateLimits.getStartDate() == null) {
			return TIME_INTERVAL_DEFAULT;
		}

		Long dateRangeMs = dateLimits.getEndDate().getMillis() - dateLimits.getStartDate().getMillis();

		if ((dateRangeMs / TIME_INTERVAL_DEFAULT) < MAX_BUCKETS) {
			return TIME_INTERVAL_DEFAULT;
		}

		// TimeInterval para maximizar el número de buckets devueltos
		return dateRangeMs / MAX_BUCKETS;
	}
}
+49 −0
Original line number Diff line number Diff line
package es.redmic.test.timeseriesview.unit.utils;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotEquals;

import org.joda.time.DateTime;
import org.joda.time.DateTimeZone;
import org.junit.Test;

import es.redmic.models.es.common.query.dto.DateLimitsDTO;
import es.redmic.timeseriesview.utils.TimeSeriesUtils;

public class TimeSeriesUtilsTest {

	@Test
	public void getTimeInterval_ReturnDefaultTimeInterval_IfTimeIntervalIsNull() {

		assertEquals(TimeSeriesUtils.TIME_INTERVAL_DEFAULT, TimeSeriesUtils.getTimeInterval(null, new DateLimitsDTO()));
	}

	@Test
	public void getTimeInterval_ReturnDefaultTimeInterval_IfDateLimitHasNullValue() {

		assertEquals(TimeSeriesUtils.TIME_INTERVAL_DEFAULT,
				TimeSeriesUtils.getTimeInterval(3600L, new DateLimitsDTO()));
	}

	@Test
	public void getTimeInterval_ReturnOriginalTimeInterval_IfResultsIsLessThanMaxBuckets() {

		Long originalTimeInterval = 3600000L;

		DateLimitsDTO dateLimits = new DateLimitsDTO();
		dateLimits.setStartDate(new DateTime(2019, 1, 1, 0, 0, 0, 0, DateTimeZone.UTC));
		dateLimits.setEndDate(new DateTime(2019, 2, 1, 0, 0, 0, 0, DateTimeZone.UTC));
		assertEquals(originalTimeInterval, TimeSeriesUtils.getTimeInterval(originalTimeInterval, dateLimits));
	}

	@Test
	public void getTimeInterval_ReturnCalculateTimeInterval_IfResultsIsGreatThanMaxBuckets() {

		Long originalTimeInterval = 3600000L;

		DateLimitsDTO dateLimits = new DateLimitsDTO();
		dateLimits.setStartDate(new DateTime(2018, 1, 1, 0, 0, 0, 0, DateTimeZone.UTC));
		dateLimits.setEndDate(new DateTime(2019, 4, 1, 0, 0, 0, 0, DateTimeZone.UTC));
		assertNotEquals(originalTimeInterval, TimeSeriesUtils.getTimeInterval(originalTimeInterval, dateLimits));
	}
}