206 lines
6.8 KiB
Java
206 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.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)
|
|
*
|
|
*/
|
|
public class AccountingPersistenceQueryCouchDBTest extends ScopedTest {
|
|
|
|
private static Logger logger = LoggerFactory.getLogger(AccountingPersistenceQueryCouchDBTest.class);
|
|
|
|
protected AccountingPersistenceQueryCouchDB accountingPersistenceQueryCouchDB;
|
|
|
|
@Before
|
|
public void before() throws Exception{
|
|
super.before();
|
|
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));
|
|
}
|
|
|
|
}
|