/** * */ 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 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.analytics.persistence.AccountingPersistenceQuery; import org.gcube.accounting.analytics.persistence.AccountingPersistenceQueryFactory; import org.gcube.accounting.datamodel.aggregation.AggregatedServiceUsageRecord; 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) * */ public class AccountingPersistenceQueryCouchDBTest extends ScopedTest { private static Logger logger = LoggerFactory.getLogger(AccountingPersistenceQueryCouchDBTest.class); protected AccountingPersistenceQueryCouchDB accountingPersistenceQueryCouchDB; @Before public void before() throws Exception{ 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(2016, Calendar.JANUARY, 1); Calendar endTime = Calendar.getInstance(); List filters = new ArrayList(); TemporalConstraint temporalConstraint = new TemporalConstraint(startTime.getTimeInMillis(), endTime.getTimeInMillis(), AggregationMode.DAILY); logger.trace("\n\n"); Class clz = AggregatedServiceUsageRecord.class; SortedMap timeSeries = accountingPersistenceQueryCouchDB.getTimeSeries(clz, temporalConstraint, filters); logger.debug("Backend: Time Series for {}:\n{}", filters, printCalendarMap(timeSeries)); AccountingPersistenceQuery apq = AccountingPersistenceQueryFactory.getInstance(); timeSeries = apq.getTimeSeries(clz,temporalConstraint, filters, true); logger.debug("Factory: Time Series for {}:\n{}", filters, printCalendarMap(timeSeries)); } @Test public void testTop() throws Exception { Calendar startTime = Calendar.getInstance(); startTime.set(2016, Calendar.JANUARY, 1); Calendar endTime = Calendar.getInstance(); List filters = new ArrayList(); TemporalConstraint temporalConstraint = new TemporalConstraint(startTime.getTimeInMillis(), endTime.getTimeInMillis(), AggregationMode.DAILY); logger.trace("\n\n"); Class clz = AggregatedServiceUsageRecord.class; Map> map = accountingPersistenceQueryCouchDB.getTopValues(clz, temporalConstraint, filters, "consumerId", AccountingPersistenceQuery.getDefaultOrderingProperties(clz)); logger.debug("Backend: Top Query Results :\n{}\n", printMap(map)); AccountingPersistenceQuery apq = AccountingPersistenceQueryFactory.getInstance(); map = apq.getTopValues(clz, temporalConstraint, filters, "consumerId", AccountingPersistenceQuery.getDefaultOrderingProperties(clz), true, 3); logger.debug("Factory: Top Query Results :\n{}\n", printMap(map)); logger.debug("\n\n\n"); /* SortedSet possibleValues = accountingPersistenceQueryCouchDB.getNextPossibleValues(clz, temporalConstraint, filters, "consumerId", AccountingPersistenceQuery.getDefaultOrderingProperties(clz)); logger.debug("Backend: Possibile Values :\n{}\n", possibleValues); possibleValues = apq.getNextPossibleValues(clz, temporalConstraint, filters, "consumerId", AccountingPersistenceQuery.getDefaultOrderingProperties(clz)); logger.debug("Factory: Possibile Values :\n{}\n", possibleValues); logger.debug("\n\n\n"); if(possibleValues.size()>0){ filters.add(possibleValues.first()); } SortedMap timeSeries = accountingPersistenceQueryCouchDB.getTimeSeries(clz, temporalConstraint, filters); logger.debug("Backend: Time Series for {}:\n{}\n", possibleValues.first(), printCalendarMap(timeSeries)); timeSeries = apq.getTimeSeries(clz, temporalConstraint, filters); logger.debug("Factory: Time Series for {}:\n{}\n", possibleValues.first(), printCalendarMap(timeSeries)); */ } @Test public void testTop2() throws Exception { Calendar startTime = Calendar.getInstance(); startTime.set(2016, Calendar.JANUARY, 1); Calendar endTime = Calendar.getInstance(); List filters = new ArrayList(); Filter filter = new Filter("serviceClass", "VREManagement"); filters.add(filter); TemporalConstraint temporalConstraint = new TemporalConstraint(startTime.getTimeInMillis(), endTime.getTimeInMillis(), AggregationMode.DAILY); logger.trace("\n\n"); Class clz = AggregatedServiceUsageRecord.class; Map> map = accountingPersistenceQueryCouchDB.getTopValues(clz, temporalConstraint, filters, "serviceName", AccountingPersistenceQuery.getDefaultOrderingProperties(clz)); logger.debug("Top Query Results :\n{}", printMap(map)); } }