92 lines
3.0 KiB
Java
92 lines
3.0 KiB
Java
package org.gcube.dataharvest.harvester;
|
|
|
|
import java.text.ParseException;
|
|
import java.util.ArrayList;
|
|
import java.util.Calendar;
|
|
import java.util.Date;
|
|
import java.util.List;
|
|
import java.util.SortedMap;
|
|
|
|
import org.gcube.accounting.analytics.Filter;
|
|
import org.gcube.accounting.analytics.Info;
|
|
import org.gcube.accounting.analytics.TemporalConstraint;
|
|
import org.gcube.accounting.analytics.TemporalConstraint.AggregationMode;
|
|
import org.gcube.accounting.analytics.persistence.AccountingPersistenceQuery;
|
|
import org.gcube.accounting.analytics.persistence.AccountingPersistenceQueryFactory;
|
|
import org.gcube.accounting.datamodel.AggregatedUsageRecord;
|
|
import org.gcube.accounting.datamodel.aggregation.AggregatedServiceUsageRecord;
|
|
import org.gcube.accounting.datamodel.usagerecords.ServiceUsageRecord;
|
|
import org.gcube.dataharvest.datamodel.HarvestedData;
|
|
import org.gcube.dataharvest.harvester.BasicHarvester;
|
|
import org.gcube.dataharvest.utils.DateUtils;
|
|
import org.gcube.dataharvest.utils.Utils;
|
|
import org.json.JSONObject;
|
|
import org.slf4j.Logger;
|
|
import org.slf4j.LoggerFactory;
|
|
|
|
/**
|
|
* @author Eric Perrone (ISTI - CNR)
|
|
* @author Luca Frosini (ISTI - CNR)
|
|
*/
|
|
public class MethodInvocationHarvester extends BasicHarvester {
|
|
|
|
private static Logger logger = LoggerFactory.getLogger(MethodInvocationHarvester.class);
|
|
|
|
public static final String DATAMINER_SERVICE_NAME = "dataminer";
|
|
|
|
public MethodInvocationHarvester(Date start, Date end) throws ParseException {
|
|
super(start, end);
|
|
}
|
|
|
|
@Override
|
|
public List<HarvestedData> getData() throws Exception {
|
|
try {
|
|
|
|
List<HarvestedData> data = new ArrayList<>();
|
|
|
|
AccountingPersistenceQuery accountingPersistenceQuery = AccountingPersistenceQueryFactory.getInstance();
|
|
TemporalConstraint temporalConstraint = new TemporalConstraint(startDate.getTime(), endDate.getTime(),
|
|
AggregationMode.MONTHLY);
|
|
|
|
List<Filter> filters = new ArrayList<>();
|
|
filters.add(new Filter(ServiceUsageRecord.SERVICE_NAME, DATAMINER_SERVICE_NAME));
|
|
|
|
String context = Utils.getCurrentContext();
|
|
|
|
List<String> contexts = new ArrayList<>();
|
|
contexts.add(context);
|
|
|
|
SortedMap<Filter,SortedMap<Calendar,Info>> result = accountingPersistenceQuery.getContextTimeSeries(
|
|
AggregatedServiceUsageRecord.class, temporalConstraint, filters, contexts, true);
|
|
|
|
if(result != null) {
|
|
for(Filter filter : result.keySet()) {
|
|
SortedMap<Calendar,Info> infoMap = result.get(filter);
|
|
|
|
Calendar calendar = DateUtils.dateToCalendar(startDate);
|
|
|
|
Info info = infoMap.get(calendar);
|
|
logger.debug("{} : {}", DateUtils.LAUNCH_DATE_FORMAT.format(calendar.getTime()), info);
|
|
|
|
JSONObject jsonObject = info.getValue();
|
|
long numberOfInvocation = jsonObject.getLong(AggregatedUsageRecord.OPERATION_COUNT);
|
|
|
|
HarvestedData harvestedData = new HarvestedData(HarvestedData.METHOD_INVOCATIONS, context,
|
|
numberOfInvocation);
|
|
data.add(harvestedData);
|
|
|
|
}
|
|
|
|
} else {
|
|
logger.error("No data found.");
|
|
}
|
|
|
|
return data;
|
|
|
|
} catch(Exception e) {
|
|
throw e;
|
|
}
|
|
}
|
|
|
|
}
|