package org.gcube.dataharvest; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.SortedSet; import java.util.TreeSet; import org.gcube.common.scope.impl.ScopeBean; import org.gcube.common.scope.impl.ScopeBean.Type; import org.gcube.dataharvest.datamodel.HarvestedData; import org.gcube.dataharvest.harvester.MethodInvocationHarvester; import org.gcube.dataharvest.harvester.VREAccessesHarvester; import org.gcube.dataharvest.harvester.sobigdata.DataMethodDownloadHarvester; import org.gcube.dataharvest.harvester.sobigdata.ResourceCatalogueHarvester; import org.gcube.dataharvest.harvester.sobigdata.TagMeMethodInvocationHarvester; import org.gcube.dataharvest.utils.ContextAuthorization; import org.gcube.dataharvest.utils.ContextTest; import org.gcube.dataharvest.utils.DateUtils; import org.gcube.dataharvest.utils.AggregationType; import org.gcube.dataharvest.utils.Utils; import org.gcube.resourcemanagement.support.server.managers.context.ContextManager; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class AccountingDataHarvesterPluginTest extends ContextTest { private static Logger logger = LoggerFactory.getLogger(AccountingDataHarvesterPluginTest.class); public static final String SO_BIG_DATA_CONTEXT = "/d4science.research-infrastructures.eu/SoBigData"; public static SortedSet getContexts() throws Exception{ SortedSet contexts = new TreeSet<>(); LinkedHashMap map = ContextManager.readContexts(); for(String scope : map.keySet()) { try { String context = map.get(scope).toString(); contexts.add(context); }catch (Exception e) { throw e; } } return contexts; } // @Test public void launch() { try { org.gcube.dataharvest.utils.Utils.setContext(ROOT); DataHarvestPluginDeclaration dataHarvestPluginDeclaration = new DataHarvestPluginDeclaration(); AccountingDataHarvesterPlugin accountingDataHarvesterPlugin = new AccountingDataHarvesterPlugin( dataHarvestPluginDeclaration); Map inputs = new HashMap<>(); AggregationType aggregationType = AggregationType.MONTHLY; inputs.put(AccountingDataHarvesterPlugin.MEASURE_TYPE_INPUT_PARAMETER, aggregationType.name()); inputs.put(AccountingDataHarvesterPlugin.GET_VRE_USERS_INPUT_PARAMETER, false); inputs.put(AccountingDataHarvesterPlugin.RERUN_INPUT_PARAMETER, true); inputs.put(AccountingDataHarvesterPlugin.DRY_RUN_INPUT_PARAMETER, true); /* Calendar from = DateUtils.getStartCalendar(2016, Calendar.SEPTEMBER, 1); String fromDate = DateUtils.LAUNCH_DATE_FORMAT.format(from.getTime()); logger.trace("{} is {}", AccountingDataHarvesterPlugin.START_DATE_INPUT_PARAMETER, fromDate); inputs.put(AccountingDataHarvesterPlugin.START_DATE_INPUT_PARAMETER, fromDate); */ accountingDataHarvesterPlugin.launch(inputs); logger.info("End."); } catch(Exception e) { logger.error("", e); } } // @Test public void launchOldData() { try { org.gcube.dataharvest.utils.Utils.setContext(ROOT); DataHarvestPluginDeclaration dataHarvestPluginDeclaration = new DataHarvestPluginDeclaration(); AccountingDataHarvesterPlugin accountingDataHarvesterPlugin = new AccountingDataHarvesterPlugin( dataHarvestPluginDeclaration); Map inputs = new HashMap<>(); AggregationType aggregationType = AggregationType.MONTHLY; inputs.put(AccountingDataHarvesterPlugin.MEASURE_TYPE_INPUT_PARAMETER, aggregationType.name()); inputs.put(AccountingDataHarvesterPlugin.GET_VRE_USERS_INPUT_PARAMETER, false); inputs.put(AccountingDataHarvesterPlugin.RERUN_INPUT_PARAMETER, true); inputs.put(AccountingDataHarvesterPlugin.DRY_RUN_INPUT_PARAMETER, true); Calendar from = DateUtils.getStartCalendar(2016, Calendar.SEPTEMBER, 1); Calendar runbeforeDate = DateUtils.getStartCalendar(2018, Calendar.JUNE, 1); while(from.before(runbeforeDate)) { String fromDate = DateUtils.LAUNCH_DATE_FORMAT.format(from.getTime()); logger.trace("{} is {}", AccountingDataHarvesterPlugin.START_DATE_INPUT_PARAMETER, fromDate); inputs.put(AccountingDataHarvesterPlugin.START_DATE_INPUT_PARAMETER, fromDate); // accountingDataHarvesterPlugin.launch(inputs); from.add(aggregationType.getCalendarField(), 1); } logger.info("End."); } catch(Exception e) { logger.error("", e); } } // @Test public void testScopeBean() throws Exception { org.gcube.dataharvest.utils.Utils.setContext(ROOT); SortedSet contexts = getContexts(); AggregationType aggregationType = AggregationType.MONTHLY; Date start = DateUtils.getStartCalendar(2018, Calendar.MARCH, 1).getTime(); // start = DateUtils.getPreviousPeriod(measureType).getTime(); Date end = DateUtils.getEndDateFromStartDate(aggregationType, start, 1); logger.info("\n\n\n"); for(String context : contexts) { ScopeBean scopeBean = new ScopeBean(context); // logger.debug("FullName {} - Name {}", scopeBean.toString(), scopeBean.name()); try { if(scopeBean.is(Type.VRE) && start.equals(DateUtils.getPreviousPeriod(aggregationType).getTime())) { logger.info("Harvesting (VRE Users) for {} from {} to {}", context, DateUtils.format(start), DateUtils.format(end)); }else { logger.info("--- Not Harvesting (VRE Users) for {} from {} to {}", context, DateUtils.format(start), DateUtils.format(end)); } if((context.startsWith(AccountingDataHarvesterPlugin.SO_BIG_DATA_VO) || context.startsWith(AccountingDataHarvesterPlugin.SO_BIG_DATA_EU_VRE) || context.startsWith(AccountingDataHarvesterPlugin.SO_BIG_DATA_IT_VRE)) && start.before(DateUtils.getStartCalendar(2018, Calendar.APRIL, 1).getTime())) { logger.info("--- Not Harvesting (SoBigData Check) for {} from {} to {}", context, DateUtils.format(start), DateUtils.format(end)); } else { logger.info("Harvesting (SoBigData Check) for {} from {} to {}", context, DateUtils.format(start), DateUtils.format(end)); } } catch(Exception e) { logger.error("Error harvesting Social Interactions for {}", context, e); } } } @Test public void testVREAccessesHarvester() { try { org.gcube.dataharvest.utils.Utils.setContext(ROOT); AggregationType measureType = AggregationType.MONTHLY; // Date start = DateUtils.getStartCalendar(2015, Calendar.FEBRUARY, 1).getTime(); // Date end = DateUtils.getStartCalendar(2019, Calendar.FEBRUARY, 1).getTime(); Date start = DateUtils.getPreviousPeriod(measureType).getTime(); Date end = DateUtils.getEndDateFromStartDate(measureType, start, 1); AccountingDataHarvesterPlugin accountingDataHarvesterPlugin = new AccountingDataHarvesterPlugin(null); accountingDataHarvesterPlugin.getConfigParameters(); ContextAuthorization contextAuthorization = new ContextAuthorization(); SortedSet contexts = contextAuthorization.getContexts(); VREAccessesHarvester vreAccessesHarvester = null; ArrayList data = new ArrayList(); for(String context : contexts) { // Setting the token for the context Utils.setContext(contextAuthorization.getTokenForContext(context)); ScopeBean scopeBean = new ScopeBean(context); if(vreAccessesHarvester == null) { if(scopeBean.is(Type.INFRASTRUCTURE)) { vreAccessesHarvester = new VREAccessesHarvester(start, end); }else { // This code should be never used because the scopes are sorted by fullname ScopeBean parent = scopeBean.enclosingScope(); while(!parent.is(Type.INFRASTRUCTURE)) { parent = scopeBean.enclosingScope(); } // Setting back token for the context Utils.setContext(contextAuthorization.getTokenForContext(parent.toString())); vreAccessesHarvester = new VREAccessesHarvester(start, end); // Setting back token for the context Utils.setContext(contextAuthorization.getTokenForContext(context)); } } try { if(context.startsWith(AccountingDataHarvesterPlugin.SO_BIG_DATA_VO) && start.before(DateUtils.getStartCalendar(2018, Calendar.APRIL, 1).getTime())) { logger.info("Not Harvesting VREs Accesses for {} from {} to {}", context, DateUtils.format(start), DateUtils.format(end)); } else { // Collecting Google Analytics Data for VREs Accesses List harvested = vreAccessesHarvester.getData(); data.addAll(harvested); } } catch(Exception e) { logger.error("Error harvesting Social Interactions for {}", context, e); } } logger.debug("{}", data); } catch(Exception e) { logger.error("", e); } } @Test public void testMethodInvocation() { try { org.gcube.dataharvest.utils.Utils.setContext(StockAssessment); AggregationType measureType = AggregationType.MONTHLY; Date start = DateUtils.getPreviousPeriod(measureType).getTime(); Date end = DateUtils.getEndDateFromStartDate(measureType, start, 1); MethodInvocationHarvester methodInvocationHarvester = new MethodInvocationHarvester(start, end); List harvestedData = methodInvocationHarvester.getData(); logger.debug("{}", harvestedData); } catch(Exception e) { logger.error("", e); } } @Test public void testTagMeMethodInvocation() { try { org.gcube.dataharvest.utils.Utils.setContext(TAGME); AggregationType measureType = AggregationType.MONTHLY; Date start = DateUtils.getPreviousPeriod(measureType).getTime(); Date end = DateUtils.getEndDateFromStartDate(measureType, start, 1); TagMeMethodInvocationHarvester methodInvocationHarvester = new TagMeMethodInvocationHarvester(start, end); List harvestedData = methodInvocationHarvester.getData(); logger.debug("{}", harvestedData); } catch(Exception e) { logger.error("", e); } } @Test public void testFilteringGenericResource() { try { org.gcube.dataharvest.utils.Utils.setContext(RESOURCE_CATALOGUE); AggregationType measureType = AggregationType.MONTHLY; Date start = DateUtils.getPreviousPeriod(measureType).getTime(); Date end = DateUtils.getEndDateFromStartDate(measureType, start, 1); SortedSet contexts = getContexts(); AccountingDataHarvesterPlugin accountingDataHarvesterPlugin = new AccountingDataHarvesterPlugin(null); accountingDataHarvesterPlugin.getConfigParameters(); ResourceCatalogueHarvester resourceCatalogueHarvester = new ResourceCatalogueHarvester(start, end, contexts); SortedSet validContexts = resourceCatalogueHarvester.getValidContexts(contexts, SO_BIG_DATA_CONTEXT + "/"); logger.info("Valid Contexts {}", validContexts); } catch(Exception e) { logger.error("", e); } } @Test public void testResourceCatalogueHarvester() { try { org.gcube.dataharvest.utils.Utils.setContext(RESOURCE_CATALOGUE); AggregationType measureType = AggregationType.MONTHLY; // Date start = DateUtils.getStartCalendar(2015, Calendar.FEBRUARY, 1).getTime(); // Date end = DateUtils.getStartCalendar(2019, Calendar.FEBRUARY, 1).getTime(); Date start = DateUtils.getPreviousPeriod(measureType).getTime(); Date end = DateUtils.getEndDateFromStartDate(measureType, start, 1); AccountingDataHarvesterPlugin accountingDataHarvesterPlugin = new AccountingDataHarvesterPlugin(null); accountingDataHarvesterPlugin.getConfigParameters(); SortedSet contexts = getContexts(); ResourceCatalogueHarvester resourceCatalogueHarvester = new ResourceCatalogueHarvester(start, end, contexts); List data = resourceCatalogueHarvester.getData(); logger.debug("{}", data); } catch(Exception e) { logger.error("", e); } } @Test public void testDataMethodDownloadHarvester() { try { org.gcube.dataharvest.utils.Utils.setContext(RESOURCE_CATALOGUE); AggregationType measureType = AggregationType.MONTHLY; // Date start = DateUtils.getStartCalendar(2015, Calendar.FEBRUARY, 1).getTime(); // Date end = DateUtils.getStartCalendar(2019, Calendar.FEBRUARY, 1).getTime(); Date start = DateUtils.getPreviousPeriod(measureType).getTime(); Date end = DateUtils.getEndDateFromStartDate(measureType, start, 1); AccountingDataHarvesterPlugin accountingDataHarvesterPlugin = new AccountingDataHarvesterPlugin(null); accountingDataHarvesterPlugin.getConfigParameters(); SortedSet contexts = getContexts(); DataMethodDownloadHarvester resourceCatalogueHarvester = new DataMethodDownloadHarvester(start, end, contexts); List data = resourceCatalogueHarvester.getData(); logger.debug("{}", data); } catch(Exception e) { logger.error("", e); } } }