From 53aa3bafce98b2df81bb8a6900b199381a87cffd Mon Sep 17 00:00:00 2001 From: Luca Frosini Date: Fri, 26 Nov 2021 17:24:33 +0100 Subject: [PATCH] Fixed interval request --- .../persistence/postgresql/Query.java | 2 +- ...ountingPersistenceQueryPostgreSQLTest.java | 227 ++++++++++++++++++ 2 files changed, 228 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/gcube/accounting/analytics/persistence/postgresql/Query.java b/src/main/java/org/gcube/accounting/analytics/persistence/postgresql/Query.java index 557ce5b..852a14d 100644 --- a/src/main/java/org/gcube/accounting/analytics/persistence/postgresql/Query.java +++ b/src/main/java/org/gcube/accounting/analytics/persistence/postgresql/Query.java @@ -282,7 +282,7 @@ public class Query extends PostgreSQLQuery { stringBuffer.append(" AND "); tableField = getTableField(AggregatedRecord.END_TIME); stringBuffer.append(tableField); - stringBuffer.append(" < "); + stringBuffer.append(" <= "); appendValue(temporalConstraint.getAlignedEndTime()); stringBuffer.append(")"); } diff --git a/src/test/java/org/gcube/accounting/analytics/persistence/postgresql/AccountingPersistenceQueryPostgreSQLTest.java b/src/test/java/org/gcube/accounting/analytics/persistence/postgresql/AccountingPersistenceQueryPostgreSQLTest.java index 75bc849..18a324f 100644 --- a/src/test/java/org/gcube/accounting/analytics/persistence/postgresql/AccountingPersistenceQueryPostgreSQLTest.java +++ b/src/test/java/org/gcube/accounting/analytics/persistence/postgresql/AccountingPersistenceQueryPostgreSQLTest.java @@ -68,6 +68,7 @@ public class AccountingPersistenceQueryPostgreSQLTest extends ContextTest { protected TemporalConstraint getTemporalConstraint() { Calendar startTimeCalendar = Calendar.getInstance(); + startTimeCalendar.setTimeZone(TemporalConstraint.DEFAULT_TIME_ZONE); startTimeCalendar.set(Calendar.YEAR, 2015); startTimeCalendar.set(Calendar.MONTH, Calendar.JANUARY); startTimeCalendar.set(Calendar.DAY_OF_MONTH, 1); @@ -75,6 +76,7 @@ public class AccountingPersistenceQueryPostgreSQLTest extends ContextTest { startTimeCalendar.set(Calendar.MINUTE, 0); Calendar entTimeCalendar = Calendar.getInstance(); + entTimeCalendar.setTimeZone(TemporalConstraint.DEFAULT_TIME_ZONE); entTimeCalendar.set(Calendar.YEAR, 2021); entTimeCalendar.set(Calendar.MONTH, Calendar.MARCH); entTimeCalendar.set(Calendar.DAY_OF_MONTH, 1); @@ -95,6 +97,231 @@ public class AccountingPersistenceQueryPostgreSQLTest extends ContextTest { return classes; } + @Test + public void testGetNoContextTimeSeriesYearly() throws Exception { + + List filters = getFilters(); + + AggregationMode aggregationMode = AggregationMode.YEARLY; + + Calendar startTimeCalendar = Calendar.getInstance(); + startTimeCalendar.setTimeZone(TemporalConstraint.DEFAULT_TIME_ZONE); + startTimeCalendar.set(Calendar.YEAR, 2015); + startTimeCalendar.set(Calendar.MONTH, Calendar.JANUARY); + startTimeCalendar.set(Calendar.DAY_OF_MONTH, 1); + startTimeCalendar.set(Calendar.HOUR_OF_DAY, 0); + startTimeCalendar.set(Calendar.MINUTE, 0); + + Calendar entTimeCalendar = Calendar.getInstance(); + entTimeCalendar.setTimeZone(TemporalConstraint.DEFAULT_TIME_ZONE); + entTimeCalendar.set(Calendar.YEAR, 2021); + entTimeCalendar.set(Calendar.MONTH, Calendar.DECEMBER); + entTimeCalendar.set(Calendar.DAY_OF_MONTH, 31); + entTimeCalendar.set(Calendar.HOUR_OF_DAY, 0); + entTimeCalendar.set(Calendar.MINUTE, 0); + + TemporalConstraint temporalConstraint = new TemporalConstraint(startTimeCalendar.getTimeInMillis(), entTimeCalendar.getTimeInMillis(), aggregationMode); + + Class> clz = AggregatedServiceUsageRecord.class; + + logger.debug("----------------------------------------------------------------------"); + logger.debug("Going to query {} - Aggregation Mode {}\n", RecordToDBMapping.getRecordTypeByClass(clz), aggregationMode.name()); + + + temporalConstraint.setAggregationMode(aggregationMode); + + accountingPersistenceQueryPostgreSQL.setRequestedRecords(clz); + accountingPersistenceQueryPostgreSQL.setTemporalConstraint(temporalConstraint); + accountingPersistenceQueryPostgreSQL.setFilters(filters); + + SortedMap timeseries = accountingPersistenceQueryPostgreSQL.getTimeSeries(); + for(Calendar c : timeseries.keySet()) { + Info info = timeseries.get(c); + logger.debug("{}", info); + } + + } + + @Test + public void testGetNoContextTimeSeriesMonthly() throws Exception { + + List filters = getFilters(); + + AggregationMode aggregationMode = AggregationMode.MONTHLY; + + Calendar startTimeCalendar = Calendar.getInstance(); + startTimeCalendar.setTimeZone(TemporalConstraint.DEFAULT_TIME_ZONE); + startTimeCalendar.set(Calendar.YEAR, 2015); + startTimeCalendar.set(Calendar.MONTH, Calendar.JANUARY); + startTimeCalendar.set(Calendar.DAY_OF_MONTH, 1); + startTimeCalendar.set(Calendar.HOUR_OF_DAY, 0); + startTimeCalendar.set(Calendar.MINUTE, 0); + + Calendar entTimeCalendar = Calendar.getInstance(); + entTimeCalendar.setTimeZone(TemporalConstraint.DEFAULT_TIME_ZONE); + entTimeCalendar.set(Calendar.YEAR, 2021); + entTimeCalendar.set(Calendar.MONTH, Calendar.NOVEMBER); + entTimeCalendar.set(Calendar.DAY_OF_MONTH, 1); + entTimeCalendar.set(Calendar.HOUR_OF_DAY, 0); + entTimeCalendar.set(Calendar.MINUTE, 0); + + TemporalConstraint temporalConstraint = new TemporalConstraint(startTimeCalendar.getTimeInMillis(), entTimeCalendar.getTimeInMillis(), aggregationMode); + + Class> clz = AggregatedServiceUsageRecord.class; + + logger.debug("----------------------------------------------------------------------"); + logger.debug("Going to query {} - Aggregation Mode {}\n", RecordToDBMapping.getRecordTypeByClass(clz), aggregationMode.name()); + + + temporalConstraint.setAggregationMode(aggregationMode); + + accountingPersistenceQueryPostgreSQL.setRequestedRecords(clz); + accountingPersistenceQueryPostgreSQL.setTemporalConstraint(temporalConstraint); + accountingPersistenceQueryPostgreSQL.setFilters(filters); + + SortedMap timeseries = accountingPersistenceQueryPostgreSQL.getTimeSeries(); + for(Calendar c : timeseries.keySet()) { + Info info = timeseries.get(c); + logger.debug("{}", info); + } + + } + + @Test + public void testGetNoContextTimeSeriesDaily() throws Exception { + + List filters = getFilters(); + + AggregationMode aggregationMode = AggregationMode.DAILY; + + Calendar startTimeCalendar = Calendar.getInstance(); + startTimeCalendar.setTimeZone(TemporalConstraint.DEFAULT_TIME_ZONE); + startTimeCalendar.set(Calendar.YEAR, 2021); + startTimeCalendar.set(Calendar.MONTH, Calendar.OCTOBER); + startTimeCalendar.set(Calendar.DAY_OF_MONTH, 26); + startTimeCalendar.set(Calendar.HOUR_OF_DAY, 0); + startTimeCalendar.set(Calendar.MINUTE, 0); + + Calendar entTimeCalendar = Calendar.getInstance(); + entTimeCalendar.setTimeZone(TemporalConstraint.DEFAULT_TIME_ZONE); + entTimeCalendar.set(Calendar.YEAR, 2021); + entTimeCalendar.set(Calendar.MONTH, Calendar.NOVEMBER); + entTimeCalendar.set(Calendar.DAY_OF_MONTH, 26); + entTimeCalendar.set(Calendar.HOUR_OF_DAY, 0); + entTimeCalendar.set(Calendar.MINUTE, 0); + + TemporalConstraint temporalConstraint = new TemporalConstraint(startTimeCalendar.getTimeInMillis(), entTimeCalendar.getTimeInMillis(), aggregationMode); + + Class> clz = AggregatedServiceUsageRecord.class; + + logger.debug("----------------------------------------------------------------------"); + logger.debug("Going to query {} - Aggregation Mode {}\n", RecordToDBMapping.getRecordTypeByClass(clz), aggregationMode.name()); + + + temporalConstraint.setAggregationMode(aggregationMode); + + accountingPersistenceQueryPostgreSQL.setRequestedRecords(clz); + accountingPersistenceQueryPostgreSQL.setTemporalConstraint(temporalConstraint); + accountingPersistenceQueryPostgreSQL.setFilters(filters); + + SortedMap timeseries = accountingPersistenceQueryPostgreSQL.getTimeSeries(); + for(Calendar c : timeseries.keySet()) { + Info info = timeseries.get(c); + logger.debug("{}", info); + } + + } + + @Test + public void testGetNoContextTimeSeriesHourly() throws Exception { + + List filters = getFilters(); + + AggregationMode aggregationMode = AggregationMode.HOURLY; + + Calendar startTimeCalendar = Calendar.getInstance(); + startTimeCalendar.setTimeZone(TemporalConstraint.DEFAULT_TIME_ZONE); + startTimeCalendar.set(Calendar.YEAR, 2021); + startTimeCalendar.set(Calendar.MONTH, Calendar.NOVEMBER); + startTimeCalendar.set(Calendar.DAY_OF_MONTH, 26); + startTimeCalendar.set(Calendar.HOUR_OF_DAY, 00); + startTimeCalendar.set(Calendar.MINUTE, 0); + + Calendar entTimeCalendar = Calendar.getInstance(); + entTimeCalendar.setTimeZone(TemporalConstraint.DEFAULT_TIME_ZONE); + entTimeCalendar.set(Calendar.YEAR, 2021); + entTimeCalendar.set(Calendar.MONTH, Calendar.NOVEMBER); + entTimeCalendar.set(Calendar.DAY_OF_MONTH, 26); + entTimeCalendar.set(Calendar.HOUR_OF_DAY, 23); + entTimeCalendar.set(Calendar.MINUTE, 0); + + TemporalConstraint temporalConstraint = new TemporalConstraint(startTimeCalendar.getTimeInMillis(), entTimeCalendar.getTimeInMillis(), aggregationMode); + + Class> clz = AggregatedServiceUsageRecord.class; + + logger.debug("----------------------------------------------------------------------"); + logger.debug("Going to query {} - Aggregation Mode {}\n", RecordToDBMapping.getRecordTypeByClass(clz), aggregationMode.name()); + + + temporalConstraint.setAggregationMode(aggregationMode); + + accountingPersistenceQueryPostgreSQL.setRequestedRecords(clz); + accountingPersistenceQueryPostgreSQL.setTemporalConstraint(temporalConstraint); + accountingPersistenceQueryPostgreSQL.setFilters(filters); + + SortedMap timeseries = accountingPersistenceQueryPostgreSQL.getTimeSeries(); + for(Calendar c : timeseries.keySet()) { + Info info = timeseries.get(c); + logger.debug("{}", info); + } + + } + + @Test + public void testGetNoContextTimeSeriesMinutely() throws Exception { + + List filters = getFilters(); + + AggregationMode aggregationMode = AggregationMode.MINUTELY; + + Calendar startTimeCalendar = Calendar.getInstance(); + startTimeCalendar.setTimeZone(TemporalConstraint.DEFAULT_TIME_ZONE); + startTimeCalendar.set(Calendar.YEAR, 2021); + startTimeCalendar.set(Calendar.MONTH, Calendar.NOVEMBER); + startTimeCalendar.set(Calendar.DAY_OF_MONTH, 26); + startTimeCalendar.set(Calendar.HOUR_OF_DAY, 17); + startTimeCalendar.set(Calendar.MINUTE, 15); + + Calendar entTimeCalendar = Calendar.getInstance(); + entTimeCalendar.setTimeZone(TemporalConstraint.DEFAULT_TIME_ZONE); + entTimeCalendar.set(Calendar.YEAR, 2021); + entTimeCalendar.set(Calendar.MONTH, Calendar.NOVEMBER); + entTimeCalendar.set(Calendar.DAY_OF_MONTH, 26); + entTimeCalendar.set(Calendar.HOUR_OF_DAY, 17); + entTimeCalendar.set(Calendar.MINUTE, 15); + + TemporalConstraint temporalConstraint = new TemporalConstraint(startTimeCalendar.getTimeInMillis(), entTimeCalendar.getTimeInMillis(), aggregationMode); + + Class> clz = AggregatedServiceUsageRecord.class; + + logger.debug("----------------------------------------------------------------------"); + logger.debug("Going to query {} - Aggregation Mode {}\n", RecordToDBMapping.getRecordTypeByClass(clz), aggregationMode.name()); + + + temporalConstraint.setAggregationMode(aggregationMode); + + accountingPersistenceQueryPostgreSQL.setRequestedRecords(clz); + accountingPersistenceQueryPostgreSQL.setTemporalConstraint(temporalConstraint); + accountingPersistenceQueryPostgreSQL.setFilters(filters); + + SortedMap timeseries = accountingPersistenceQueryPostgreSQL.getTimeSeries(); + for(Calendar c : timeseries.keySet()) { + Info info = timeseries.get(c); + logger.debug("{}", info); + } + + } + @Test public void testGetNoContextTimeSeries() throws Exception {