diff --git a/.settings/org.eclipse.wst.validation.prefs b/.settings/org.eclipse.wst.validation.prefs
new file mode 100644
index 0000000..04cad8c
--- /dev/null
+++ b/.settings/org.eclipse.wst.validation.prefs
@@ -0,0 +1,2 @@
+disabled=06target
+eclipse.preferences.version=1
diff --git a/pom.xml b/pom.xml
index a50342c..d3516c1 100644
--- a/pom.xml
+++ b/pom.xml
@@ -8,7 +8,7 @@
org.gcube.accounting
accounting-analytics-persistence-couchbase
- 1.3.0-SNAPSHOT
+ 1.4.0-SNAPSHOT
Accounting Analytics Persistence CouchBase
Accounting Analytics Persistence CouchBase Implementation
diff --git a/src/main/java/org/gcube/accounting/analytics/persistence/couchbase/AccountingPersistenceQueryCouchBase.java b/src/main/java/org/gcube/accounting/analytics/persistence/couchbase/AccountingPersistenceQueryCouchBase.java
index 8f0a64d..008d158 100644
--- a/src/main/java/org/gcube/accounting/analytics/persistence/couchbase/AccountingPersistenceQueryCouchBase.java
+++ b/src/main/java/org/gcube/accounting/analytics/persistence/couchbase/AccountingPersistenceQueryCouchBase.java
@@ -46,6 +46,7 @@ import org.gcube.common.scope.api.ScopeProvider;
import org.gcube.documentstore.records.AggregatedRecord;
import org.gcube.documentstore.records.Record;
import org.gcube.documentstore.records.RecordUtility;
+import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import org.slf4j.Logger;
@@ -55,6 +56,7 @@ import com.couchbase.client.java.Bucket;
import com.couchbase.client.java.Cluster;
import com.couchbase.client.java.CouchbaseCluster;
import com.couchbase.client.java.bucket.BucketManager;
+import com.couchbase.client.java.document.JsonDocument;
import com.couchbase.client.java.document.json.JsonArray;
import com.couchbase.client.java.document.json.JsonObject;
import com.couchbase.client.java.env.CouchbaseEnvironment;
@@ -149,27 +151,23 @@ AccountingPersistenceBackendQuery {
String url = configuration.getProperty(URL_PROPERTY_KEY);
String password = configuration.getProperty(PASSWORD_PROPERTY_KEY);
-
cluster = CouchbaseCluster.create(ENV, url);
bucketNameStorage = configuration.getProperty(BUCKET_STORAGE_NAME_PROPERTY_KEY);
-
bucketNameStorageStatus = configuration.getProperty(BUCKET_STORAGESTATUS_NAME_PROPERTY_KEY);
-
bucketNameService = configuration.getProperty(BUCKET_SERVICE_NAME_PROPERTY_KEY);
bucketNameJob = configuration.getProperty(BUCKET_JOB_NAME_PROPERTY_KEY);
bucketNamePortlet = configuration.getProperty(BUCKET_PORTLET_NAME_PROPERTY_KEY);
bucketNameTask = configuration.getProperty(BUCKET_TASK_NAME_PROPERTY_KEY);
connectionMap = new HashMap();
-
+
+ //bucketStorage = cluster.openBucket(bucketNameStorage, password);
bucketStorage = cluster.openBucket(bucketNameStorage, password);
connectionMap.put(BUCKET_STORAGE_NAME_PROPERTY_KEY, bucketStorage);
-
+
bucketStorageStatus = cluster.openBucket( bucketNameStorageStatus,password);
connectionMap.put(BUCKET_STORAGESTATUS_NAME_PROPERTY_KEY, bucketStorageStatus);
- logger.debug("connectionMap"+connectionMap.toString());
-
bucketService = cluster.openBucket(bucketNameService, password);
connectionMap.put(BUCKET_SERVICE_NAME_PROPERTY_KEY, bucketService);
@@ -417,7 +415,6 @@ AccountingPersistenceBackendQuery {
if (!collection.isEmpty()){
reduceFunction = top;
- //reduceFunction = null;
for (String property : collection) {
if (!property.equals(top)){
@@ -466,6 +463,7 @@ AccountingPersistenceBackendQuery {
*Return:
* List of service class used by alessandro in the required period
*/
+ /*
public SortedMap getListUsage(Class extends AggregatedRecord, ?>> clz,
TemporalConstraint temporalConstraint, List filters,String context,List parameters)throws Exception{
//TODO
@@ -520,13 +518,7 @@ AccountingPersistenceBackendQuery {
}
}
}
- /*
- int scopeDateGroupLevel = aggregationMode.ordinal() + 1 + 1;
- int groupLevel = scopeDateGroupLevel;
- if (filters != null) {
- groupLevel += keys.size();
- }
- */
+
for (Object temporal: temporalStartKey.toList()){
if (!temporal.toString().isEmpty())
startKey.add(temporal);
@@ -587,7 +579,7 @@ AccountingPersistenceBackendQuery {
}
-
+*/
protected SortedMap mapReduceQuery(
Class extends AggregatedRecord, ?>> clz,
@@ -1499,7 +1491,7 @@ AccountingPersistenceBackendQuery {
}
/**
- * SPERIMENTAL
+ *
* Used for calculate a usage value for each element of list
* (QUOTA)
* @param listUsage
@@ -1518,14 +1510,6 @@ AccountingPersistenceBackendQuery {
for (UsageValue totalFilters:listUsage){
logger.debug("-----------------/ init for totalFilters");
-
-
- /*
- UsageValue totalfilter=
- new UsageServiceValue(context,"lucio.lelii",AggregatedServiceUsageRecord.class,temporalConstraint,filters);
- */
-
-
String currentScope = totalFilters.getContext();
Collection keys= new TreeSet<>();
@@ -1547,13 +1531,15 @@ AccountingPersistenceBackendQuery {
temporalConstraint =
new TemporalConstraint(startTime.getTimeInMillis(),
endTime.getTimeInMillis(), AggregationMode.DAILY);
- //if type=storage then bucket =accounting_storage_status and designDocId = quotaTotal
- //logger.trace("totalFilters.getClass().getSimpleName():{}",totalFilters.getClass().getSimpleName());
- //logger.trace("totalFilters.getClz().getSimpleName():{}",totalFilters.getClz().getSimpleName());
- if (totalFilters.getClz().getSimpleName().equals(AggregatedStorageStatusRecord.class.getSimpleName())){
+ if (totalFilters instanceof UsageStorageValue){
+
+// if (totalFilters.getClz().getSimpleName().equals(AggregatedStorageStatusRecord.class.getSimpleName())){
//TODO sarebbe possibile invece con il nome verificare che getClz e' un istanza di AggregatedStorageStatusRecord?
- designDocId = "QuotaTotal";
+ //designDocId = "QuotaTotal";
+ //TEST
+ designDocId="QuotaTotalSeparated";
+
}
}
@@ -1628,6 +1614,7 @@ AccountingPersistenceBackendQuery {
ViewQuery query = ViewQuery.from(designDocId, viewNameTmp);
//if storage
query.inclusiveEnd();
+ /*
if (designDocId == "QuotaTotal"){
query.startKey(endKeyTmp);
@@ -1638,13 +1625,13 @@ AccountingPersistenceBackendQuery {
}
else{
-
+ */
query.groupLevel(groupLevelTmp);
query.startKey(startKeyTmp);
query.endKey(endKeyTmp);
query.descending(false);
query.onError(OnError.STOP);
- }
+ //}
logger.trace("query row:{}",query.toString());
ViewResult viewResult;
@@ -1666,55 +1653,34 @@ AccountingPersistenceBackendQuery {
Iterator> iterateJosn = objJson.keys();
while( iterateJosn.hasNext() ) {
String key = (String)iterateJosn.next();
-
- Float valuetmp=Float.parseFloat(objJson.get(key).toString());
-
- //logger.debug("totalFilters.getClass().getSimpleName():{} UsageStorageValue.class.getSimpleName():{}", totalFilters.getClass().getSimpleName(),UsageStorageValue.class.getSimpleName());
-
- if (key.equals("operationCount") || key.equals("dataVolume")){
-
- if (map.containsKey(key)) {
- map.put(key, valuetmp + map.get(key));
-
- // TODO verify a better method
- if (totalFilters instanceof UsageStorageValue){
- logger.debug("storageUsageRecord -designDocId:{}",designDocId);
- if (key.equals("dataVolume")){
- keyOrderingProperty=key;
- totalQuota+=totalFilters.getD()+valuetmp.doubleValue();
- }
- }
- else{
+
+ if (totalFilters instanceof UsageStorageValue){
+ JSONArray valueStorage=(JSONArray) objJson.get(key);
+ logger.debug("--storageUsageRecord -key:{} value:{}",key,valueStorage.get(0));
+ totalQuota+=Float.parseFloat(valueStorage.get(0).toString());
+ keyOrderingProperty="dataVolume";
+ }
+ else{
+ if (key.equals("operationCount") || key.equals("dataVolume")){
+ Float valuetmp=Float.parseFloat(objJson.get(key).toString());
+
+ if (map.containsKey(key)) {
+ map.put(key, valuetmp + map.get(key));
logger.debug("?UsageRecord -designDocId:{}",designDocId);
keyOrderingProperty=key;
totalQuota+=totalFilters.getD()+valuetmp.doubleValue();
}
-
- }
- else{
- map.put(key, valuetmp);
-
- // TODO verify a better method
- if (totalFilters instanceof UsageStorageValue){
- logger.debug("storageUsageRecord -designDocId:{}",designDocId);
- if (key.equals("dataVolume")){
- keyOrderingProperty=key;
-
- totalQuota+=valuetmp.doubleValue();
- }
- }
else{
+ map.put(key, valuetmp);
logger.debug("?UsageRecord -designDocId:{}",designDocId);
keyOrderingProperty=key;
-
totalQuota+=valuetmp.doubleValue();
}
}
}
}
}
- //i++;
- //} while (i getSpaceProvidersIds() {
+ String currentScope = ScopeProvider.instance.get();
+ JsonArray startKey = JsonArray.create();
+ startKey.add(currentScope);
+
+ int scopeDateGroupLevel = 2;
+ int groupLevel = scopeDateGroupLevel;
+ String designDocId = "StorageStatusRecordValue";
+ String viewName = "providerId";
+ logger.trace("designDocId:{} view:{} startKey:{} groupLevel:{}",designDocId,viewName,startKey,groupLevel);
+ ViewQuery query = ViewQuery.from(designDocId, viewName);
+
+ query.inclusiveEnd();
+ query.groupLevel(groupLevel);
+ query.startKey(startKey);
+ query.descending(false);
+ SortedSet ret = new TreeSet();
+ ViewResult viewResult;
+ try {
+ //execute query in a specify bucket
+ viewResult = connectionMap.get("AggregatedStorageStatusRecord").query(query);
+
+ } catch (Exception e) {
+ logger.error("error executing the query",e);
+ throw e;
+ }
+ for (ViewRow row : viewResult) {
+ String value =(String) row.value();
+ ret.add(value);
+
+ }
+ return ret;
+ }
+
+
+ /**
+ * used for accounting portlet section storage status
+ * @param clz
+ * @param temporalConstraint
+ * @param filters
+ * @param context
+ * @return
+ * @throws JSONException
+ */
+
+ public SortedMap> getSpaceTimeSeries(
+ Class extends AggregatedRecord, ?>> clz,
+ TemporalConstraint temporalConstraint, List filters,
+ List providersId) throws Exception {
+
+ String currentScope=null;
+ currentScope = ScopeProvider.instance.get();
+
+ JsonArray startKey = JsonArray.create();
+
+ JsonArray endKey = JsonArray.create();
+ startKey.add(currentScope);
+ endKey.add(currentScope);
+
+ AggregationMode aggregationMode = temporalConstraint
+ .getAggregationMode();
+
+ JsonArray temporalStartKey = getRangeKey(
+ temporalConstraint.getStartTime(),
+ aggregationMode, false, false);
+
+ JsonArray temporalEndKey = getRangeKey(
+ temporalConstraint.getEndTime(),
+ aggregationMode, false, false);
+ Collection keys = new TreeSet<>();
+
+
+ String designDocId = "StorageStatusUsage";
+ String viewName;
+ int groupLevel=5;
+ if (temporalConstraint.getAggregationMode().equals(AggregationMode.MONTHLY)){
+ groupLevel= 4;
+ }
+ viewName= temporalConstraint.getAggregationMode().name().toLowerCase();
+
+ if (filters != null && filters.size() != 0) {
+ // Sorting filter for call a mapreduce
+ Collections.sort(filters, new Comparator() {
+ @Override
+ public int compare(Filter filter1, Filter filter2)
+ {
+ int result =filter1.getKey().compareTo(filter2.getKey());
+ return result;
+ }
+ });
+ for (Filter filter : filters) {
+ String filterKey = filter.getKey();
+ String filterValue = filter.getValue();
+
+ if (filterKey != null && filterKey.compareTo("") != 0) {
+ if (filterValue != null && filterValue.compareTo("") != 0) {
+ if (keys.contains(filterKey)) {
+ throw new DuplicatedKeyFilterException(
+ "Only one value per Filter key is allowed");
+ }
+ startKey.add(filterValue);
+ endKey.add(filterValue);
+ keys.add(filterKey);
+ viewName=viewName+"_"+filterKey;
+ if (filterKey!="consumerId"){
+ groupLevel= groupLevel+1;
+ }
+ } else {
+ throw new KeyException(
+ String.format("Invalid %s : %s",Filter.class.getSimpleName(), filter.toString()));
+ }
+
+ } else {
+ throw new ValueException(String.format("Invalid %s : %s",Filter.class.getSimpleName(), filter.toString()));
+ }
+ }
+ }
+ for (Object temporal: temporalStartKey.toList()){
+ if (!temporal.toString().isEmpty())
+ startKey.add(temporal);
+ }
+ int count =1;
+ for (Object temporal: temporalEndKey.toList()){
+ if (!temporal.toString().isEmpty()){
+ //couchbase exclude last value
+ if (count==temporalEndKey.size())
+ temporal=(int)temporal+1;
+ endKey.add(temporal);
+ }
+ count++;
+ }
+
+ ViewQuery query = ViewQuery.from(designDocId, viewName);
+ query.inclusiveEnd();
+ query.groupLevel(groupLevel);
+ query.startKey(startKey);
+ query.endKey(endKey);
+ query.descending(false);
+
+ logger.trace("Bucket :{}, Design Doc ID : {}, View Name : {}, "
+ + "Group Level : {}, Start Key : {}, End Key : {},"
+ + "temporalStartKey :{}, temporalEndKey :{}",
+ clz.getSimpleName(),designDocId, viewName, groupLevel, startKey, endKey,temporalStartKey.toString(), temporalEndKey.toString());
+
+
+ ViewResult viewResult;
+ try {
+ //execute query in a specify bucket
+ viewResult = connectionMap.get(clz.getSimpleName()).query(query);
+
+ } catch (Exception e) {
+ logger.error(e.getLocalizedMessage());
+ throw e;
+ }
+
+ SortedMap> ret = new TreeMap<>();
+
+ for (ViewRow row : viewResult) {
+
+ JsonArray array = (JsonArray) row.key();
+ Calendar calendar = getCalendarFromArray(array);
+
+ JsonObject value = (JsonObject) row.value();
+ JSONObject obj = new JSONObject(value.toString());
+
+ //logger.trace("row: {}, value: {}, obj: {}",row.toString(),value.toString(),obj.toString());
+ for(Iterator iterator = obj.keys(); iterator.hasNext();) {
+ String key = (String) iterator.next();
+ String[] tmp=key.split("-");
+ String providerId=tmp[0];
+
+ if (providersId.contains(providerId)){
+ Long valueProvider=Long.parseLong(obj.get(key).toString().split(",")[0].replace("[",""));
+ //convert into kb
+ valueProvider=valueProvider/1024;
+
+ Filter filter= new Filter("providerId",providerId );
+ if (!ret.containsKey(filter) ){
+ SortedMap infos = new TreeMap<>();
+ infos.put(calendar, valueProvider);
+ ret.put(filter, infos);
+ }else{
+ SortedMap singleValue=ret.get(filter);
+ if (!singleValue.containsKey(calendar)){
+ //if not exist put
+ singleValue.put(calendar, valueProvider);
+ }else{
+ //if exist, update
+ singleValue.put(calendar, singleValue.get(calendar)+valueProvider);
+ }
+
+ }
+ }
+
+ }
+ }
+ //logger.trace("return map:{}",map.toString());
+ logger.trace("return ret:{}",ret.toString());
+
+ return ret;
+ }
}
diff --git a/src/test/java/org/gcube/accounting/analytics/persistence/couchbase/AccountingPersistenceQueryCouchBaseTest.java b/src/test/java/org/gcube/accounting/analytics/persistence/couchbase/AccountingPersistenceQueryCouchBaseTest.java
index d1dd07e..aa127a9 100644
--- a/src/test/java/org/gcube/accounting/analytics/persistence/couchbase/AccountingPersistenceQueryCouchBaseTest.java
+++ b/src/test/java/org/gcube/accounting/analytics/persistence/couchbase/AccountingPersistenceQueryCouchBaseTest.java
@@ -23,6 +23,7 @@ import org.gcube.accounting.analytics.UsageServiceValue;
import org.gcube.accounting.analytics.UsageStorageValue;
import org.gcube.accounting.analytics.UsageValue;
import org.gcube.accounting.analytics.persistence.AccountingPersistenceBackendQueryConfiguration;
+import org.gcube.accounting.analytics.persistence.AccountingPersistenceBackendQueryFactory;
import org.gcube.accounting.analytics.persistence.AccountingPersistenceQuery;
import org.gcube.accounting.datamodel.AggregatedUsageRecord;
import org.gcube.accounting.datamodel.aggregation.AggregatedJobUsageRecord;
@@ -88,6 +89,7 @@ public class AccountingPersistenceQueryCouchBaseTest {
//ScopeProvider.instance.set("/gcube/devNext/NextNext");
//ScopeProvider.instance.set("/gcube/devNext");
ScopeProvider.instance.set("/gcube");
+ //ScopeProvider.instance.set("/d4science.research-infrastructures.eu");
AccountingPersistenceBackendQueryConfiguration configuration = new
AccountingPersistenceBackendQueryConfiguration(AccountingPersistenceQueryCouchBase.class);
@@ -161,14 +163,14 @@ public class AccountingPersistenceQueryCouchBaseTest {
public void testTimeSeriesNoContext() throws Exception{
Calendar startTime = Calendar.getInstance();
- startTime.set(2015, Calendar.AUGUST, 20);
+ startTime.set(2017, Calendar.APRIL, 20);
Calendar endTime = Calendar.getInstance();
- endTime.set(2016, Calendar.SEPTEMBER, 29,23,59);
+ endTime.set(2017, Calendar.APRIL, 29,23,59);
List filters = new ArrayList();
Filter filter =
new Filter(AggregatedServiceUsageRecord.CALLED_METHOD, "WebProcessingService");
- filters.add(filter);
+ //filters.add(filter);
TemporalConstraint temporalConstraint =
new TemporalConstraint(startTime.getTimeInMillis(),
endTime.getTimeInMillis(), AggregationMode.DAILY);
@@ -242,7 +244,7 @@ public class AccountingPersistenceQueryCouchBaseTest {
@Test
public void getUsageValueQuotaTotal() throws Exception{
Calendar startTime = Calendar.getInstance();
- startTime.set(2015, Calendar.MAY, 1);
+ startTime.set(2017, Calendar.MAY, 1);
Calendar endTime = Calendar.getInstance();
@@ -286,7 +288,7 @@ public class AccountingPersistenceQueryCouchBaseTest {
Calendar startTimeStorage = Calendar.getInstance();
startTimeStorage.set(2015, Calendar.MAY, 1);
Calendar endTimeStorage = Calendar.getInstance();
- endTimeStorage.set(2017, Calendar.FEBRUARY, 21);
+ endTimeStorage.set(2017, Calendar.APRIL, 13);
/*TemporalConstraint temporalConstraintStorage =new TemporalConstraint(startTimeStorage.getTimeInMillis(),
endTimeStorage.getTimeInMillis(), AggregationMode.DAILY);*/
TemporalConstraint temporalConstraintStorage =null;
@@ -297,11 +299,11 @@ public class AccountingPersistenceQueryCouchBaseTest {
//richiedo la lista di dati usati totali
List listTotalFilter=new ArrayList();
- /*listTotalFilter.add(totalfilter);
+ listTotalFilter.add(totalfilter);
listTotalFilter.add(totalfilterStorageStatus);
listTotalFilter.add(totalfilterStorageStatus_2);
listTotalFilter.add(totalfilterStorageStatus_3);
- listTotalFilter.add(totalfilterStorageStatus_4);*/
+ listTotalFilter.add(totalfilterStorageStatus_4);
listTotalFilter.add(totalfilterStorageStatusPeriod);
@@ -335,7 +337,6 @@ public class AccountingPersistenceQueryCouchBaseTest {
Calendar endTime = Calendar.getInstance();
endTime.set(2016, Calendar.SEPTEMBER, 28,23,59);
-
List filters = new ArrayList();
//filters.add(new Filter(AggregatedServiceUsageRecord.SERVICE_NAME, "IS-Registry"));
//filters.add(new Filter(AggregatedServiceUsageRecord.SERVICE_CLASS, "Common"));
@@ -498,11 +499,11 @@ public class AccountingPersistenceQueryCouchBaseTest {
@Test
public void testContextService() throws Exception {
Calendar startTime = Calendar.getInstance();
- startTime.set(2016, Calendar.SEPTEMBER, 1);
+ startTime.set(2017, Calendar.APRIL, 20);
Calendar endTime = Calendar.getInstance();
- endTime.set(2016, Calendar.OCTOBER, 20,23,59);
+ endTime.set(2017, Calendar.APRIL, 28,23,59);
List filters = new ArrayList();
- filters.add(new Filter(AggregatedServiceUsageRecord.CALLED_METHOD, "WebProcessingService"));
+ //filters.add(new Filter(AggregatedServiceUsageRecord.CALLED_METHOD, "WebProcessingService"));
//filters.add(new Filter(AggregatedServiceUsageRecord.CONSUMER_ID, "alessandro.pieve"));
TemporalConstraint temporalConstraint =
new TemporalConstraint(startTime.getTimeInMillis(),
@@ -517,6 +518,7 @@ public class AccountingPersistenceQueryCouchBaseTest {
// , /gcube/devsec/TestCreation12, /gcube/devsec/TestCreation13, /gcube/devsec/TestCreation14, /gcube/devsec/TestCreation15, /gcube/devsec/TestCreation16, /gcube/devsec/TestCreation17, /gcube/devsec/TestCreation7, /gcube/devsec/TestCreation8, /gcube/devsec/TestCreation9, /gcube/devsec/TestLucio2]]
context.add("/gcube");
context.add("/gcube/devNext");
+ /*
context.add("/gcube/devNext/Luciotest");
context.add("/gcube/devNext/NextNext");
context.add("/gcube/devsec");
@@ -528,6 +530,7 @@ public class AccountingPersistenceQueryCouchBaseTest {
context.add("/gcube/devsec/preVRE");
context.add("/gcube/preprod/preVRE");
context.add("/gcube/preprod");
+ */
SortedMap> setContext =
accountingPersistenceQueryCouchBase.getContextTimeSeries(
clz, temporalConstraint, filters,
@@ -554,8 +557,139 @@ public class AccountingPersistenceQueryCouchBaseTest {
parameters.add("serviceName");
Class clz =
AggregatedServiceUsageRecord.class;
- SortedMap result= accountingPersistenceQueryCouchBase.getListUsage(clz,temporalConstraint,
- filters,context,parameters);
+ // SortedMap result= accountingPersistenceQueryCouchBase.getListUsage(clz,temporalConstraint, filters,context,parameters);
}
+
+
+
+ @Test
+ public void getRecord() throws Exception{
+ String recordId="91e1c339-d811-45d7-a13f-7385af59e3c8";
+ String type="service";
+
+ String document=accountingPersistenceQueryCouchBase.getRecord(recordId, type);
+ logger.debug("document:{}",document);
+
+
+ }
+
+
+ @Test
+ public void getQuerableKeyStorageStatus() throws Exception{
+ SortedSet keys;
+ keys = AccountingPersistenceQuery.getQuerableKeys(AggregatedStorageStatusRecord.class);
+ for (String key : keys) {
+ if (key != null && !key.isEmpty()) {
+ logger.debug("key:" +key);
+ }
+ }
+ logger.debug("List FilterKeys:" + keys.toString());
+ }
+
+ @Test
+ public void testGetSpaceProvidersIds(){
+ SortedSet listProvidersId =
+ accountingPersistenceQueryCouchBase.getSpaceProvidersIds();
+ logger.debug("Result final{}", listProvidersId);
+
+ }
+
+
+ @Test
+ public void testGetFilterValue() throws Exception{
+
+ //String key="consumerId";
+ String key="dataServiceId";
+
+ SortedSet listFilterValue =
+ accountingPersistenceQueryCouchBase.getFilterValues(AggregatedStorageStatusRecord.class, null, null, key);
+ logger.debug("Result final{}", listFilterValue);
+
+ }
+
+
+ @Test
+ public void testUsageStorage() throws Exception {
+ Calendar startTime = Calendar.getInstance();
+ startTime.set(2017, Calendar.APRIL, 13);
+ Calendar endTime = Calendar.getInstance();
+ endTime.set(2017, Calendar.APRIL, 26,23,59);
+ List filters = new ArrayList();
+ //filters.add(new Filter(AggregatedStorageStatusRecord.DATA_SERVICEID, "identifier"));
+ filters.add(new Filter(AggregatedServiceUsageRecord.CONSUMER_ID, "alessandro.pieve"));
+ TemporalConstraint temporalConstraint =
+ new TemporalConstraint(startTime.getTimeInMillis(),
+ endTime.getTimeInMillis(), AggregationMode.DAILY);
+
+
+ List providerId=new ArrayList();
+ Class clz =
+ AggregatedStorageStatusRecord.class;
+
+ //providerId.add("Rstudio");
+ providerId.add("MongoDb");
+
+ SortedMap> setContext =
+ accountingPersistenceQueryCouchBase.getSpaceTimeSeries(
+ clz,
+ temporalConstraint, filters,
+ providerId);
+
+
+
+
+
+
+ int count = setContext.size();
+ Filter firstRemovalKey = null;
+ for(Filter nf : setContext.keySet()){
+ if(--count>=0){
+ //if(pad){
+ padMapStorage(setContext.get(nf), temporalConstraint);
+
+ //}
+ }else{
+ if(firstRemovalKey==null){
+ firstRemovalKey = nf;
+ }else{
+ break;
+ }
+ }
+ }
+
+ /*
+ if(firstRemovalKey!=null){
+ return setContext.subMap(setContext.firstKey(), firstRemovalKey);
+ }
+ */
+
+
+
+ logger.debug("Result final{}", setContext);
+
+ }
+
+ public SortedMap padMapStorage(
+ SortedMap unpaddedData,
+ TemporalConstraint temporalConstraint) throws Exception {
+
+ //JSONObject jsonObject = getPaddingJSONObject(unpaddedData);
+ SortedSet sequence = temporalConstraint.getCalendarSequence();
+ Long longValuePre = null;
+ for (Calendar progressTime : sequence) {
+ Long longValue = unpaddedData.get(progressTime);
+
+ if (longValue == null) {
+ unpaddedData.put(progressTime, longValuePre);
+ }else{
+ longValuePre=longValue;
+ }
+
+ }
+ return unpaddedData;
+ }
+
+
+
}