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 b37f945..a1104ff 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 @@ -20,9 +20,11 @@ import org.gcube.accounting.analytics.exception.ValueException; import org.gcube.accounting.analytics.persistence.AccountingPersistenceBackendQueryConfiguration; import org.gcube.accounting.analytics.persistence.AccountingPersistenceQuery; import org.gcube.accounting.datamodel.UsageRecord; +import org.gcube.accounting.datamodel.aggregation.AggregatedJobUsageRecord; import org.gcube.accounting.datamodel.aggregation.AggregatedServiceUsageRecord; import org.gcube.accounting.datamodel.aggregation.AggregatedStorageUsageRecord; import org.gcube.accounting.utility.postgresql.RecordToDBMapping; +import org.gcube.documentstore.records.AggregatedRecord; import org.gcube.documentstore.records.Record; import org.junit.Before; import org.junit.Test; @@ -47,99 +49,44 @@ public class AccountingPersistenceQueryPostgreSQLTest extends ContextTest { accountingPersistenceQueryPostgreSQL.prepareConnection(configuration); } + protected TemporalConstraint getTemporalConstraint() { + Calendar startTimeCalendar = Calendar.getInstance(); + startTimeCalendar.set(Calendar.YEAR, 2015); + startTimeCalendar.set(Calendar.MONTH, Calendar.MARCH); + startTimeCalendar.set(Calendar.DAY_OF_MONTH, 1); + startTimeCalendar.set(Calendar.HOUR_OF_DAY, 0); + startTimeCalendar.set(Calendar.MINUTE, 0); + + Calendar entTimeCalendar = Calendar.getInstance(); + entTimeCalendar.set(Calendar.YEAR, 2021); + entTimeCalendar.set(Calendar.MONTH, Calendar.MARCH); + 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.MINUTELY); + + return temporalConstraint; + } + @Test public void testGetNoContextTimeSeries() throws DuplicatedKeyFilterException, KeyException, ValueException, Exception { - Calendar startTimeCalendar = Calendar.getInstance(); - startTimeCalendar.set(Calendar.YEAR, 2020); - startTimeCalendar.set(Calendar.MONTH, Calendar.MARCH); - startTimeCalendar.set(Calendar.DAY_OF_MONTH, 1); - startTimeCalendar.set(Calendar.HOUR_OF_DAY, 0); - startTimeCalendar.set(Calendar.MINUTE, 0); - - Calendar entTimeCalendar = Calendar.getInstance(); - entTimeCalendar.set(Calendar.MONTH, Calendar.MARCH); - entTimeCalendar.set(Calendar.DAY_OF_MONTH, 15); - entTimeCalendar.set(Calendar.HOUR_OF_DAY, 16); - entTimeCalendar.set(Calendar.MINUTE, 17); List filters = new ArrayList<>(); Filter filter = new Filter(UsageRecord.CONSUMER_ID, QueryTest.getRandomUser()); filters.add(filter); - TemporalConstraint temporalConstraint = new TemporalConstraint(startTimeCalendar.getTimeInMillis(), entTimeCalendar.getTimeInMillis(), AggregationMode.MINUTELY); - SortedMap timeseries = accountingPersistenceQueryPostgreSQL.getNoContextTimeSeries(AggregatedServiceUsageRecord.class, temporalConstraint, filters); - for(Calendar c : timeseries.keySet()) { - Info info = timeseries.get(c); - logger.debug("{}", info); - } - } - - @Test - public void testTimeSeries() throws DuplicatedKeyFilterException, KeyException, ValueException, Exception { - Calendar startTimeCalendar = Calendar.getInstance(); - startTimeCalendar.set(Calendar.YEAR, 2020); - startTimeCalendar.set(Calendar.MONTH, Calendar.MARCH); - startTimeCalendar.set(Calendar.DAY_OF_MONTH, 1); - startTimeCalendar.set(Calendar.HOUR_OF_DAY, 0); - startTimeCalendar.set(Calendar.MINUTE, 0); + TemporalConstraint temporalConstraint = getTemporalConstraint(); - Calendar entTimeCalendar = Calendar.getInstance(); - entTimeCalendar.set(Calendar.MONTH, Calendar.MARCH); - entTimeCalendar.set(Calendar.DAY_OF_MONTH, 15); - entTimeCalendar.set(Calendar.HOUR_OF_DAY, 16); - entTimeCalendar.set(Calendar.MINUTE, 17); + List>> classes = new ArrayList>>(); + classes.add(AggregatedServiceUsageRecord.class); + classes.add(AggregatedStorageUsageRecord.class); + classes.add(AggregatedJobUsageRecord.class); - List filters = new ArrayList<>(); - Filter filter = new Filter(UsageRecord.CONSUMER_ID, QueryTest.getRandomUser()); - filters.add(filter); - - TemporalConstraint temporalConstraint = new TemporalConstraint(startTimeCalendar.getTimeInMillis(), entTimeCalendar.getTimeInMillis(), AggregationMode.MINUTELY); - SortedMap timeseries = accountingPersistenceQueryPostgreSQL.getTimeSeries(AggregatedServiceUsageRecord.class, temporalConstraint, filters); - for(Calendar c : timeseries.keySet()) { - Info info = timeseries.get(c); - logger.debug("{}", info); - } - - - timeseries = accountingPersistenceQueryPostgreSQL.getTimeSeries(AggregatedStorageUsageRecord.class, temporalConstraint, filters); - for(Calendar c : timeseries.keySet()) { - Info info = timeseries.get(c); - logger.debug("{}", info); - } - } - - - - - @Test - public void testContextTimeSeries() throws DuplicatedKeyFilterException, KeyException, ValueException, Exception { - Calendar startTimeCalendar = Calendar.getInstance(); - startTimeCalendar.set(Calendar.YEAR, 2020); - startTimeCalendar.set(Calendar.MONTH, Calendar.MARCH); - startTimeCalendar.set(Calendar.DAY_OF_MONTH, 1); - startTimeCalendar.set(Calendar.HOUR_OF_DAY, 0); - startTimeCalendar.set(Calendar.MINUTE, 0); - - Calendar entTimeCalendar = Calendar.getInstance(); - entTimeCalendar.set(Calendar.MONTH, Calendar.MARCH); - entTimeCalendar.set(Calendar.DAY_OF_MONTH, 15); - entTimeCalendar.set(Calendar.HOUR_OF_DAY, 16); - entTimeCalendar.set(Calendar.MINUTE, 17); - - List filters = new ArrayList<>(); - Filter filter = new Filter(UsageRecord.CONSUMER_ID, QueryTest.getRandomUser()); - filters.add(filter); - - TemporalConstraint temporalConstraint = new TemporalConstraint(startTimeCalendar.getTimeInMillis(), entTimeCalendar.getTimeInMillis(), AggregationMode.MONTHLY); - - List contexts = new ArrayList<>(); - contexts.add("/gcube/devsec/devVRE"); - contexts.add("/gcube/devNext/NextNext"); - - SortedMap> contextTimeseries = accountingPersistenceQueryPostgreSQL.getContextTimeSeries(AggregatedServiceUsageRecord.class, temporalConstraint, filters, contexts); - for(Filter f : contextTimeseries.keySet()) { - logger.debug("{}", f); - SortedMap timeseries = contextTimeseries.get(f); + for(Class> clz : classes) { + logger.debug("----------------------------------------------------------------------"); + logger.debug("Going to query {}\n", RecordToDBMapping.getRecordTypeByClass(clz)); + SortedMap timeseries = accountingPersistenceQueryPostgreSQL.getNoContextTimeSeries(clz, temporalConstraint, filters); for(Calendar c : timeseries.keySet()) { Info info = timeseries.get(c); logger.debug("{}", info); @@ -147,27 +94,80 @@ public class AccountingPersistenceQueryPostgreSQLTest extends ContextTest { } } - @Test - public void testGetFilterValues() throws DuplicatedKeyFilterException, KeyException, ValueException, Exception { - Calendar startTimeCalendar = Calendar.getInstance(); - startTimeCalendar.set(Calendar.YEAR, 2020); - startTimeCalendar.set(Calendar.MONTH, Calendar.MARCH); - startTimeCalendar.set(Calendar.DAY_OF_MONTH, 1); - startTimeCalendar.set(Calendar.HOUR_OF_DAY, 0); - startTimeCalendar.set(Calendar.MINUTE, 0); + public void testTimeSeries() throws DuplicatedKeyFilterException, KeyException, ValueException, Exception { + List filters = new ArrayList<>(); + Filter filter = new Filter(UsageRecord.CONSUMER_ID, QueryTest.getRandomUser()); + filters.add(filter); - Calendar entTimeCalendar = Calendar.getInstance(); - entTimeCalendar.set(Calendar.MONTH, Calendar.MARCH); - entTimeCalendar.set(Calendar.DAY_OF_MONTH, 15); - entTimeCalendar.set(Calendar.HOUR_OF_DAY, 16); - entTimeCalendar.set(Calendar.MINUTE, 17); + TemporalConstraint temporalConstraint = getTemporalConstraint(); + + List>> classes = new ArrayList>>(); + classes.add(AggregatedServiceUsageRecord.class); + classes.add(AggregatedStorageUsageRecord.class); + classes.add(AggregatedJobUsageRecord.class); + + for(Class> clz : classes) { + logger.debug("----------------------------------------------------------------------"); + logger.debug("Going to query {}\n", RecordToDBMapping.getRecordTypeByClass(clz)); + + + SortedMap timeseries = accountingPersistenceQueryPostgreSQL.getTimeSeries(clz, temporalConstraint, filters); + for(Calendar c : timeseries.keySet()) { + Info info = timeseries.get(c); + logger.debug("{}", info); + } + + } + + } + + @Test + public void testContextTimeSeries() throws DuplicatedKeyFilterException, KeyException, ValueException, Exception { List filters = new ArrayList<>(); Filter filter = new Filter(UsageRecord.CONSUMER_ID, QueryTest.getRandomUser()); filters.add(filter); - TemporalConstraint temporalConstraint = new TemporalConstraint(startTimeCalendar.getTimeInMillis(), entTimeCalendar.getTimeInMillis(), AggregationMode.MINUTELY); + TemporalConstraint temporalConstraint = getTemporalConstraint(); + + List contexts = new ArrayList<>(); + contexts.add("/gcube/devsec/devVRE"); + contexts.add("/gcube/devNext/NextNext"); + + + List>> classes = new ArrayList>>(); + classes.add(AggregatedServiceUsageRecord.class); + classes.add(AggregatedStorageUsageRecord.class); + classes.add(AggregatedJobUsageRecord.class); + + for(Class> clz : classes) { + logger.debug("----------------------------------------------------------------------"); + logger.debug("Going to query {}\n", RecordToDBMapping.getRecordTypeByClass(clz)); + + SortedMap> contextTimeseries = accountingPersistenceQueryPostgreSQL.getContextTimeSeries(clz, temporalConstraint, filters, contexts); + for(Filter f : contextTimeseries.keySet()) { + logger.debug("{}", f); + SortedMap timeseries = contextTimeseries.get(f); + for(Calendar c : timeseries.keySet()) { + Info info = timeseries.get(c); + logger.debug("{}", info); + } + } + } + + } + + + @Test + public void testGetFilterValues() throws DuplicatedKeyFilterException, KeyException, ValueException, Exception { + + List filters = new ArrayList<>(); + Filter filter = new Filter(UsageRecord.CONSUMER_ID, QueryTest.getRandomUser()); + filters.add(filter); + + TemporalConstraint temporalConstraint = getTemporalConstraint(); + SortedSet numberedFilters = accountingPersistenceQueryPostgreSQL.getFilterValues(AggregatedServiceUsageRecord.class, temporalConstraint, filters, AggregatedServiceUsageRecord.CALLED_METHOD); for(NumberedFilter numberedFilter : numberedFilters) { logger.debug("{}", numberedFilter); @@ -189,24 +189,11 @@ public class AccountingPersistenceQueryPostgreSQLTest extends ContextTest { public void testTopValues() throws DuplicatedKeyFilterException, KeyException, ValueException, Exception { String orderingProperty = AccountingPersistenceQuery.getDefaultOrderingProperties(AggregatedServiceUsageRecord.class); - Calendar startTimeCalendar = Calendar.getInstance(); - startTimeCalendar.set(Calendar.YEAR, 2020); - startTimeCalendar.set(Calendar.MONTH, Calendar.MARCH); - startTimeCalendar.set(Calendar.DAY_OF_MONTH, 1); - startTimeCalendar.set(Calendar.HOUR_OF_DAY, 0); - startTimeCalendar.set(Calendar.MINUTE, 0); - - Calendar entTimeCalendar = Calendar.getInstance(); - entTimeCalendar.set(Calendar.MONTH, Calendar.MARCH); - entTimeCalendar.set(Calendar.DAY_OF_MONTH, 15); - entTimeCalendar.set(Calendar.HOUR_OF_DAY, 16); - entTimeCalendar.set(Calendar.MINUTE, 17); - List filters = new ArrayList<>(); Filter filter = new Filter(UsageRecord.CONSUMER_ID, QueryTest.getRandomUser()); filters.add(filter); - TemporalConstraint temporalConstraint = new TemporalConstraint(startTimeCalendar.getTimeInMillis(), entTimeCalendar.getTimeInMillis(), AggregationMode.MONTHLY); + TemporalConstraint temporalConstraint = getTemporalConstraint(); SortedMap> topTimeSeries = accountingPersistenceQueryPostgreSQL.getTopValues(AggregatedServiceUsageRecord.class, temporalConstraint, filters, AggregatedServiceUsageRecord.CALLED_METHOD, orderingProperty); for(NumberedFilter numberedFilter : topTimeSeries.keySet()) {