package org.gcube.dataharvest; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; import java.util.SortedSet; import org.gcube.accounting.accounting.summary.access.AccountingDao; import org.gcube.accounting.accounting.summary.access.model.ScopeDescriptor; import org.gcube.accounting.accounting.summary.access.model.internal.Dimension; import org.gcube.accounting.accounting.summary.access.model.update.AccountingRecord; import org.gcube.common.authorization.client.exceptions.ObjectNotFound; import org.gcube.common.scope.impl.ScopeBean; import org.gcube.dataharvest.harvester.JupyterAccessesHarvester; import org.gcube.dataharvest.utils.AggregationType; import org.gcube.dataharvest.utils.ContextAuthorization; import org.gcube.dataharvest.utils.ContextTest; import org.gcube.dataharvest.utils.DateUtils; import org.junit.Ignore; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * * @author Giancarlo Panichi (ISTI CNR) * */ public class AccountingDataHarvesterJupyterTest extends ContextTest { private static Logger logger = LoggerFactory.getLogger(AccountingDataHarvesterJupyterTest.class); public static final String ROOT = "/d4science.research-infrastructures.eu"; // private static final String SCOPE = "/d4science.research-infrastructures.eu/D4OS/Blue-CloudLab"; protected AccountingDao getAccountingDao() throws ObjectNotFound, Exception { AccountingDao dao = AccountingDao.get(); Set scopeDescriptorSet = dao.getContexts(); Map scopeDescriptorMap = new HashMap<>(); for (ScopeDescriptor scopeDescriptor : scopeDescriptorSet) { scopeDescriptorMap.put(scopeDescriptor.getId(), scopeDescriptor); } AccountingDashboardHarvesterPlugin.scopeDescriptors.set(scopeDescriptorMap); Set dimensionSet = dao.getDimensions(); Map dimensionMap = new HashMap<>(); for (Dimension dimension : dimensionSet) { dimensionMap.put(dimension.getId(), dimension); } AccountingDashboardHarvesterPlugin.dimensions.set(dimensionMap); return dao; } @Ignore @Test public void testJupyterAccessesHarvester() throws Exception { try { ContextTest.setContextByName(ROOT); AccountingDao dao = getAccountingDao(); List starts = new ArrayList<>(); starts.add(DateUtils.getStartCalendar(2021, Calendar.JANUARY, 1).getTime()); starts.add(DateUtils.getStartCalendar(2021, Calendar.FEBRUARY, 1).getTime()); starts.add(DateUtils.getStartCalendar(2021, Calendar.MARCH, 1).getTime()); starts.add(DateUtils.getStartCalendar(2021, Calendar.APRIL, 1).getTime()); starts.add(DateUtils.getStartCalendar(2021, Calendar.MAY, 1).getTime()); AggregationType measureType = AggregationType.MONTHLY; ContextAuthorization contextAuthorization = new ContextAuthorization(); SortedSet contexts = contextAuthorization.getContexts(); /* SortedSet contexts = new TreeSet<>(); contexts.add("/d4science.research-infrastructures.eu/D4OS/Blue-CloudLab"); contexts.add("/d4science.research-infrastructures.eu/D4OS/Zoo-Phytoplankton_EOV"); contexts.add("/d4science.research-infrastructures.eu/D4OS/MarineEnvironmentalIndicators"); */ List accountingRecords = new ArrayList<>(); Set scopeDescriptorSet = dao.getContexts(); Map scopeDescriptorMap = new HashMap<>(); for (ScopeDescriptor scopeDescriptor : scopeDescriptorSet) { scopeDescriptorMap.put(scopeDescriptor.getId(), scopeDescriptor); } AccountingDashboardHarvesterPlugin.scopeDescriptors.set(scopeDescriptorMap); for (Date start : starts) { Date end = DateUtils.getEndDateFromStartDate(measureType, start, 1); ContextTest.setContextByName(ROOT); JupyterAccessesHarvester jupyterAccessesHarvester = new JupyterAccessesHarvester(start, end); for(String context : contexts) { ContextTest.setContext(contextAuthorization.getTokenForContext(context)); ScopeBean scopeBean = new ScopeBean(context); ScopeDescriptor actualScopeDescriptor = scopeDescriptorMap.get(context); if (actualScopeDescriptor == null) { actualScopeDescriptor = new ScopeDescriptor(scopeBean.name(), context); } AccountingDashboardHarvesterPlugin.scopeDescriptor.set(actualScopeDescriptor); List harvested = jupyterAccessesHarvester.getAccountingRecords(); accountingRecords.addAll(harvested); } } // logger.debug("{}", accountingRecords); logger.debug("Going to insert {}", accountingRecords); ContextTest.setContextByName(ROOT); dao.insertRecords(accountingRecords.toArray(new AccountingRecord[1])); } catch (Throwable e) { logger.error(e.getLocalizedMessage(), e); throw e; } } }