146 lines
5.0 KiB
Java
146 lines
5.0 KiB
Java
package org.gcube.dataharvest.harvester;
|
|
|
|
import java.util.Date;
|
|
import java.util.List;
|
|
import java.util.Locale;
|
|
import java.text.DateFormat;
|
|
import java.text.ParseException;
|
|
import java.text.SimpleDateFormat;
|
|
import java.util.ArrayList;
|
|
import java.util.Calendar;
|
|
|
|
import org.gcube.dataharvest.AccountingDataHarvesterPlugin;
|
|
import org.gcube.dataharvest.datamodel.Harvest;
|
|
import org.gcube.dataharvest.utils.Utils;
|
|
import org.slf4j.Logger;
|
|
import org.slf4j.LoggerFactory;
|
|
import org.apache.commons.lang.Validate;
|
|
import org.gcube.common.homelibrary.home.Home;
|
|
import org.gcube.common.homelibrary.home.HomeLibrary;
|
|
import org.gcube.common.homelibrary.home.HomeManager;
|
|
import org.gcube.common.homelibrary.home.exceptions.HomeNotFoundException;
|
|
import org.gcube.common.homelibrary.home.exceptions.InternalErrorException;
|
|
import org.gcube.common.homelibrary.home.exceptions.UserNotFoundException;
|
|
import org.gcube.common.homelibrary.home.workspace.WorkspaceItem;
|
|
import org.gcube.common.homelibrary.home.workspace.accounting.AccountingEntry;
|
|
import org.gcube.common.homelibrary.home.workspace.exceptions.InsufficientPrivilegesException;
|
|
import org.gcube.common.homelibrary.home.workspace.exceptions.ItemAlreadyExistException;
|
|
import org.gcube.common.homelibrary.home.workspace.exceptions.ItemNotFoundException;
|
|
import org.gcube.common.homelibrary.home.workspace.exceptions.WorkspaceFolderNotFoundException;
|
|
import org.gcube.common.homelibrary.home.workspace.exceptions.WrongDestinationException;
|
|
import org.gcube.common.homelibrary.jcr.repository.JCRRepository;
|
|
import org.gcube.common.homelibrary.jcr.workspace.JCRWorkspace;
|
|
import org.gcube.common.homelibrary.jcr.workspace.JCRWorkspaceItem;
|
|
import org.gcube.common.homelibrary.model.exceptions.RepositoryException;
|
|
import org.gcube.common.scope.api.ScopeProvider;
|
|
|
|
public class DataMethodDownloadHarvester extends BasicHarvester {
|
|
private Date startDate, endDate;
|
|
private DateFormat format;
|
|
private final String SCOPE = "/d4science.research-infrastructures.eu/gCubeApps/SoBigData.eu";
|
|
private static Logger logger = LoggerFactory.getLogger(DataMethodDownloadHarvester.class);
|
|
private int count = 0;
|
|
|
|
public DataMethodDownloadHarvester(String start, String end) throws ParseException {
|
|
super(start, end);
|
|
//ScopeProvider.instance.set(SCOPE);
|
|
}
|
|
|
|
public DataMethodDownloadHarvester(Date start, Date end) throws ParseException {
|
|
super(start, end);
|
|
//ScopeProvider.instance.set(SCOPE);
|
|
}
|
|
|
|
@Override
|
|
public List<Harvest> getData() throws Exception {
|
|
ArrayList<Harvest> data = new ArrayList<Harvest>();
|
|
ScopeProvider.instance.set(SCOPE);
|
|
String[] vres = getActiveVREs(true);
|
|
for (String vre : vres) {
|
|
try {
|
|
count = 0;
|
|
|
|
logger.error("HomeManager manager = HomeLibrary.getHomeManagerFactory().getHomeManager()");
|
|
|
|
HomeManager manager = HomeLibrary.getHomeManagerFactory().getHomeManager();
|
|
|
|
String user = getVREName(vre) + "-Manager";
|
|
|
|
logger.error("Home home = manager.getHome(user)");
|
|
|
|
Home home = manager.getHome(user);
|
|
|
|
logger.error("JCRWorkspace ws = (JCRWorkspace) home.getWorkspace()");
|
|
|
|
JCRWorkspace ws = (JCRWorkspace) home.getWorkspace();
|
|
|
|
logger.error("ws.getItemByPath...");
|
|
|
|
JCRWorkspaceItem item = (JCRWorkspaceItem) ws
|
|
.getItemByPath("/Workspace/MySpecialFolders/" + getVREName(vre));
|
|
|
|
logger.debug("Analyzing " + vre + " from " + startDate.toString() + " to " + endDate.toString());
|
|
|
|
logger.error("Before getStats()");
|
|
getStats(item, startDate, endDate);
|
|
logger.error("After getStats()");
|
|
Harvest harvest = new Harvest(Harvest.DATA_METHOD_DOWNLOAD, vre, count);
|
|
data.add(harvest);
|
|
logger.debug(harvest.toString());
|
|
} catch (Exception e) {
|
|
logger.error("DataMethodDownloadHarvester: Error processing VRE: " + vre + "\n" +
|
|
e.getLocalizedMessage());
|
|
}
|
|
}
|
|
return data;
|
|
}
|
|
|
|
|
|
private void getStats(WorkspaceItem root, Date start, Date end) throws InternalErrorException {
|
|
List<? extends WorkspaceItem> children;
|
|
if (root.isFolder()) {
|
|
children = root.getChildren();
|
|
for (WorkspaceItem child : children)
|
|
getStats(child, start, end);
|
|
} else {
|
|
try {
|
|
|
|
List<AccountingEntry> accounting = root.getAccounting();
|
|
for (AccountingEntry entry : accounting) {
|
|
|
|
switch (entry.getEntryType()) {
|
|
case CREATE:
|
|
case UPDATE:
|
|
case READ:
|
|
Calendar calendar = entry.getDate();
|
|
if (calendar.after(Utils.dateToCalendar(start)) && calendar.before(Utils.dateToCalendar(end))) {
|
|
count++;
|
|
}
|
|
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
|
|
}
|
|
} catch (Exception e) {
|
|
logger.error("DataMethodDownloadHarvester: " + e.getLocalizedMessage());
|
|
throw new InternalErrorException(e.getLocalizedMessage());
|
|
}
|
|
}
|
|
}
|
|
|
|
private static String getVREName(String vre) {
|
|
Validate.notNull(vre, "scope must be not null");
|
|
|
|
String newName;
|
|
if (vre.startsWith(JCRRepository.PATH_SEPARATOR))
|
|
newName = vre.replace(JCRRepository.PATH_SEPARATOR, "-").substring(1);
|
|
else
|
|
newName = vre.replace(JCRRepository.PATH_SEPARATOR, "-");
|
|
return newName;
|
|
}
|
|
|
|
}
|