/** * */ package org.gcube.accounting.analytics.persistence.couchdb; import java.util.ArrayList; import java.util.Calendar; import java.util.List; import java.util.Map; import java.util.SortedMap; import java.util.SortedSet; import org.gcube.accounting.analytics.Filter; import org.gcube.accounting.analytics.Info; import org.gcube.accounting.analytics.NumberedFilter; import org.gcube.accounting.analytics.TemporalConstraint; import org.gcube.accounting.analytics.TemporalConstraint.AggregationMode; import org.gcube.accounting.analytics.persistence.AccountingPersistenceBackendQueryConfiguration; import org.gcube.accounting.datamodel.aggregation.AggregatedJobUsageRecord; import org.gcube.accounting.datamodel.aggregation.AggregatedStorageUsageRecord; import org.gcube.common.scope.api.ScopeProvider; import org.gcube.testutility.ScopedTest; import org.junit.Before; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * @author Luca Frosini (ISTI - CNR) http://www.lucafrosini.com/ * */ public class AccountingPersistenceQueryCouchDBTest extends ScopedTest { private static Logger logger = LoggerFactory.getLogger(AccountingPersistenceQueryCouchDBTest.class); protected AccountingPersistenceQueryCouchDB accountingPersistenceQueryCouchDB; @Before public void before() throws Exception{ super.before(); ScopeProvider.instance.set("/gcube/devsec/devVRE"); AccountingPersistenceBackendQueryConfiguration configuration = new AccountingPersistenceBackendQueryConfiguration(AccountingPersistenceQueryCouchDB.class); /* configuration.addProperty(AccountingPersistenceQueryCouchDB.DB_NAME, "my_couchapp_test"); String url = configuration.getProperty(AccountingPersistenceQueryCouchDB.URL_PROPERTY_KEY); url = url.replace("accounting-d-d4s.d4science.org", "couchdb01-d-d4s.d4science.org:5984"); configuration.addProperty(AccountingPersistenceQueryCouchDB.URL_PROPERTY_KEY, url); */ accountingPersistenceQueryCouchDB = new AccountingPersistenceQueryCouchDB(); accountingPersistenceQueryCouchDB.prepareConnection(configuration); } public static String printCalendarMap(Map map){ StringBuilder stringBuilder = new StringBuilder(); for(Calendar calendar : map.keySet()){ V v = map.get(calendar); stringBuilder.append(v.toString()); stringBuilder.append("\n"); } return stringBuilder.toString(); } public static String printMap(Map> map){ StringBuilder stringBuilder = new StringBuilder(); for(T t : map.keySet()) { stringBuilder.append(t.toString()); stringBuilder.append("\n"); Map innerMap = map.get(t); stringBuilder.append(printCalendarMap(innerMap)); stringBuilder.append("\n"); } return stringBuilder.toString(); } @Test public void testTimeSeriesEmptyFilter() throws Exception { Calendar startTime = Calendar.getInstance(); startTime.set(2015, Calendar.OCTOBER, 9); Calendar endTime = Calendar.getInstance(); endTime.set(2015, Calendar.OCTOBER, 16); List filters = new ArrayList(); TemporalConstraint temporalConstraint = new TemporalConstraint(startTime.getTimeInMillis(), endTime.getTimeInMillis(), AggregationMode.DAILY); logger.trace("\n\n"); Class clz = AggregatedJobUsageRecord.class; SortedMap timeSeries = accountingPersistenceQueryCouchDB.getTimeSeries(clz, temporalConstraint, filters); logger.debug("Time Series for {}:\n{}", filters, printCalendarMap(timeSeries)); } @Test public void testTop() throws Exception { Calendar startTime = Calendar.getInstance(); startTime.set(2015, Calendar.OCTOBER, 9); Calendar endTime = Calendar.getInstance(); endTime.set(2015, Calendar.OCTOBER, 16); List filters = new ArrayList(); Filter filter = new Filter("consumerId", null); filters.add(filter); TemporalConstraint temporalConstraint = new TemporalConstraint(startTime.getTimeInMillis(), endTime.getTimeInMillis(), AggregationMode.DAILY); logger.trace("\n\n"); Class clz = AggregatedJobUsageRecord.class; Map> map = accountingPersistenceQueryCouchDB.getTopValues(clz, temporalConstraint, filters); logger.debug("Top Query Results :\n{}", printMap(map)); SortedSet possibleValues = accountingPersistenceQueryCouchDB.getNextPossibleValues(clz, temporalConstraint, filters); logger.debug("Possibile Values :\n{}", possibleValues); filter.setValue("UNKNOWN"); SortedMap timeSeries = accountingPersistenceQueryCouchDB.getTimeSeries(clz, temporalConstraint, filters); logger.debug("Time Series for {}:\n{}", filter, printCalendarMap(timeSeries)); } @Test public void testTop2() throws Exception { Calendar startTime = Calendar.getInstance(); startTime.set(2016, Calendar.FEBRUARY, 23); Calendar endTime = Calendar.getInstance(); endTime.set(2016, Calendar.MARCH, 23); List filters = new ArrayList(); Filter filter = new Filter("consumerId", null); filters.add(filter); TemporalConstraint temporalConstraint = new TemporalConstraint(startTime.getTimeInMillis(), endTime.getTimeInMillis(), AggregationMode.DAILY); logger.trace("\n\n"); Class clz = AggregatedStorageUsageRecord.class; Map> map = accountingPersistenceQueryCouchDB.getTopValues(clz, temporalConstraint, filters); logger.debug("Top Query Results :\n{}", printMap(map)); } }