package org.gcube.dataharvest.harvester.sobigdata; import java.text.ParseException; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.Iterator; import java.util.List; import java.util.Set; 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.aggregation.AggregatedServiceUsageRecord; import org.gcube.accounting.datamodel.usagerecords.ServiceUsageRecord; import org.gcube.dataharvest.datamodel.HarvestedData; import org.gcube.dataharvest.harvester.BasicHarvester; 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 MethodInvocationHarvester(Date start, Date end) throws ParseException { super(start, end); } @Override public List getData() throws Exception { try { logger.debug("MethodInvocationHarvester::getData()"); ArrayList data = new ArrayList(); AccountingPersistenceQuery accountingPersistenceQuery = AccountingPersistenceQueryFactory.getInstance(); Calendar start = Calendar.getInstance(); Calendar end = Calendar.getInstance(); start.setTime(startDate); end.setTime(endDate); TemporalConstraint temporalConstraint = new TemporalConstraint(start.getTimeInMillis(), end.getTimeInMillis(), AggregationMode.MONTHLY); List filters = new ArrayList<>(); filters.add(new Filter(ServiceUsageRecord.CALLED_METHOD, "tag")); List contexts = new ArrayList<>(); contexts.add("/d4science.research-infrastructures.eu/SoBigData/TagMe"); logger.debug("MethodInvocationHarvester::getData()::getContextTimeSeries"); SortedMap> result = accountingPersistenceQuery.getContextTimeSeries( AggregatedServiceUsageRecord.class, temporalConstraint, filters, contexts, true); if(result == null) { logger.error("No data found."); } else { Set ks = result.keySet(); if(ks != null) { Iterator ksi = ks.iterator(); while(ksi.hasNext()) { // System.out.println("" + ksi.next().toString()); logger.debug("Filter: " + ksi.next().toString()); } } } return data; } catch(Exception x) { StackTraceElement[] ste = x.getStackTrace(); String errorMessage = "MethodInvocationHarvester: " + x.getLocalizedMessage(); for(StackTraceElement s : ste) { errorMessage += "\n" + s.toString(); } logger.error(errorMessage); throw x; } } }