package eu.dnetlib.repo.manager.service; import eu.dnetlib.domain.data.Repository; import eu.dnetlib.repo.manager.domain.RepositorySummaryInfo; import eu.dnetlib.repo.manager.shared.AggregationDetails; import eu.dnetlib.repo.manager.shared.BrokerException; import eu.dnetlib.repo.manager.shared.MetricsInfo; import eu.dnetlib.repo.manager.shared.RepositoryServiceException; import eu.dnetlib.repo.manager.shared.broker.BrowseEntry; import org.apache.log4j.Logger; import org.json.JSONException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.web.bind.annotation.PathVariable; import javax.xml.ws.ServiceMode; import java.util.ArrayList; import java.util.List; @Service("dashboardService") public class DashboardServiceImpl implements DashboardService { private static final Logger logger = Logger.getLogger(DashboardServiceImpl.class); @Autowired private EmailUtils emailUtils; @Autowired private RepositoryService repositoryService; @Autowired private BrokerService brokerService; @Override public List getRepositoriesSummaryInfo(@PathVariable("userEmail") String userEmail, @PathVariable("page") String page, @PathVariable("size") String size) throws JSONException { List repositorySummaryInfoList = new ArrayList<>(); try { List repositoriesOfUser = repositoryService.getRepositoriesOfUser(userEmail, page, size); for(Repository repository: repositoriesOfUser) { RepositorySummaryInfo repositorySummaryInfo = new RepositorySummaryInfo(); repositorySummaryInfo.setId(repository.getId()); repositorySummaryInfo.setRepositoryName(repository.getOfficialName()); repositorySummaryInfo.setLogoURL(repository.getLogoUrl()); //TODO getRepositoryAggregations returns only the 20 more recent items. Is it positive that we will find an indexed version there? List aggregationDetailsList = repositoryService.getRepositoryAggregations(repository.getId()); for(AggregationDetails aggregationDetails: aggregationDetailsList) { if(aggregationDetails.getIndexedVersion()) { repositorySummaryInfo.setRecordsCollected(aggregationDetails.getNumberOfRecords()); repositorySummaryInfo.setLastIndexedVersion(aggregationDetails.getDate()); break; } } try { MetricsInfo metricsInfo = repositoryService.getMetricsInfoForRepository(repository.getId()); repositorySummaryInfo.setTotalDownloads(metricsInfo.getMetricsNumbers().getTotalDownloads()); repositorySummaryInfo.setTotalViews(metricsInfo.getMetricsNumbers().getTotalViews()); } catch (RepositoryServiceException e) { logger.error("Exception getting metrics info for repository: " + repository.getId(), e); } try { List events = brokerService.getTopicsForDatasource(repository.getOfficialName()); Long totalEvents = 0L; for(BrowseEntry browseEntry: events) totalEvents += browseEntry.getSize(); repositorySummaryInfo.setEnrichmentEvents(totalEvents); } catch (BrokerException e) { logger.error("Exception getting broker events for repository: " + repository.getId(), e); } repositorySummaryInfoList.add(repositorySummaryInfo); } } catch (Exception e) { logger.error("Something baad happened!", e); e.printStackTrace(); } return repositorySummaryInfoList; } }