infrastructure-tests/src/test/java/org/gcube/accounting/analytics/persistence/couchdb/AccountingPersistenceQueryC...

204 lines
6.8 KiB
Java

/**
*
*/
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 <V> String printCalendarMap(Map<Calendar, V> 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 <T, V> String printMap(Map<T, ? extends Map<Calendar, V>> map){
StringBuilder stringBuilder = new StringBuilder();
for(T t : map.keySet()) {
stringBuilder.append(t.toString());
stringBuilder.append("\n");
Map<Calendar, V> 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<Filter> filters = new ArrayList<Filter>();
TemporalConstraint temporalConstraint =
new TemporalConstraint(startTime.getTimeInMillis(),
endTime.getTimeInMillis(), AggregationMode.DAILY);
logger.trace("\n\n");
Class<AggregatedServiceUsageRecord> clz =
AggregatedServiceUsageRecord.class;
SortedMap<Calendar, Info> 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<Filter> filters = new ArrayList<Filter>();
TemporalConstraint temporalConstraint =
new TemporalConstraint(startTime.getTimeInMillis(),
endTime.getTimeInMillis(), AggregationMode.DAILY);
logger.trace("\n\n");
Class<AggregatedServiceUsageRecord> clz =
AggregatedServiceUsageRecord.class;
Map<NumberedFilter, SortedMap<Calendar, Info>> 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<NumberedFilter> 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<Calendar, Info> 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<Filter> filters = new ArrayList<Filter>();
Filter filter = new Filter("serviceClass", "VREManagement");
filters.add(filter);
TemporalConstraint temporalConstraint =
new TemporalConstraint(startTime.getTimeInMillis(),
endTime.getTimeInMillis(), AggregationMode.DAILY);
logger.trace("\n\n");
Class<AggregatedServiceUsageRecord> clz =
AggregatedServiceUsageRecord.class;
Map<NumberedFilter, SortedMap<Calendar, Info>> map =
accountingPersistenceQueryCouchDB.getTopValues(clz,
temporalConstraint, filters, "serviceName",
AccountingPersistenceQuery.getDefaultOrderingProperties(clz));
logger.debug("Top Query Results :\n{}", printMap(map));
}
}