package eu.dnetlib.repo.manager.service; import eu.dnetlib.repo.manager.domain.*; import eu.dnetlib.repo.manager.domain.broker.BrowseEntry; import org.apache.log4j.Logger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; 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 RepositoryService repositoryService; @Autowired private BrokerService brokerService; @Override public List getRepositoriesSummaryInfo(String userEmail, String page, String size) { List repositorySummaryInfoList = new ArrayList<>(); try { List repositoriesOfUser = repositoryService.getRepositoriesSnippetsOfUser(userEmail, page, size); for (RepositorySnippet 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? long start = System.currentTimeMillis(); List aggregationDetailsList = repositoryService.getRepositoryAggregations(repository.getId(), 0, 20); for (AggregationDetails aggregationDetails : aggregationDetailsList) { if (aggregationDetails.getIndexedVersion()) { repositorySummaryInfo.setRecordsCollected(aggregationDetails.getNumberOfRecords()); repositorySummaryInfo.setLastIndexedVersion(aggregationDetails.getDate()); break; } } long end = System.currentTimeMillis(); System.out.println("Got repo aggregations in " + (end - start) + "ms"); 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); } return repositorySummaryInfoList; } }