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.AggregatedJobUsageRecord; 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 getData() throws Exception { try { List data = new ArrayList<>(); AccountingPersistenceQuery accountingPersistenceQuery = AccountingPersistenceQueryFactory.getInstance(); TemporalConstraint temporalConstraint = new TemporalConstraint(startDate.getTime(), endDate.getTime(), AggregationMode.MONTHLY); List filters = new ArrayList<>(); //filters.add(new Filter(ServiceUsageRecord.SERVICE_NAME, DATAMINER_SERVICE_NAME)); String context = Utils.getCurrentContext(); List contexts = new ArrayList<>(); contexts.add(context); //SortedMap> result = accountingPersistenceQuery.getContextTimeSeries( // AggregatedServiceUsageRecord.class, temporalConstraint, filters, contexts, true); SortedMap> result = accountingPersistenceQuery.getContextTimeSeries( AggregatedJobUsageRecord.class, temporalConstraint, filters, contexts, true); if(result != null) { for(Filter filter : result.keySet()) { SortedMap 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; } } }