- Move all the Aggregation-related code from "RepositoryService" into the new "AggregationService".
- Add info about the thrown exceptions.
This commit is contained in:
parent
1a4df2b852
commit
a40c1b3e44
|
@ -1,7 +1,7 @@
|
|||
# This script can create the local "dnet-repository" and copy the "settings-dnet.xml" file there.
|
||||
# It also builds the project, using the aforementioned settings file.
|
||||
# Then it can run the project locally.
|
||||
# By giving different options, the user can either install and run locally, just install or just run the project.
|
||||
# By giving different options, the user can either install and run locally, just install (arg: 2) or just run (arg: 1) the project.
|
||||
|
||||
|
||||
# For error-handling, we cannot use the "set -e" since: it has problems https://mywiki.wooledge.org/BashFAQ/105
|
||||
|
|
|
@ -7,10 +7,7 @@ import eu.dnetlib.repo.manager.domain.RepositorySummaryInfo;
|
|||
import eu.dnetlib.repo.manager.domain.UsageSummary;
|
||||
import eu.dnetlib.repo.manager.exception.BrokerException;
|
||||
import eu.dnetlib.repo.manager.exception.RepositoryServiceException;
|
||||
import eu.dnetlib.repo.manager.service.BrokerService;
|
||||
import eu.dnetlib.repo.manager.service.DashboardService;
|
||||
import eu.dnetlib.repo.manager.service.PiWikService;
|
||||
import eu.dnetlib.repo.manager.service.RepositoryService;
|
||||
import eu.dnetlib.repo.manager.service.*;
|
||||
import io.swagger.annotations.Api;
|
||||
import org.json.JSONException;
|
||||
import org.mitre.openid.connect.model.OIDCAuthenticationToken;
|
||||
|
@ -33,6 +30,9 @@ public class DashboardController {
|
|||
@Autowired
|
||||
private RepositoryService repositoryService;
|
||||
|
||||
@Autowired
|
||||
private AggregationService aggregationService;
|
||||
|
||||
@Autowired
|
||||
private BrokerService brokerService;
|
||||
|
||||
|
@ -57,12 +57,12 @@ public class DashboardController {
|
|||
@PathVariable("repoId") String repoId,
|
||||
@RequestParam(name = "size", required = false, defaultValue = "20") int size) throws JSONException {
|
||||
|
||||
List<AggregationInfo> aggregationInfo = repositoryService.getRepositoryAggregations(repoId, 0, size);
|
||||
List<AggregationInfo> aggregationInfo = aggregationService.getRepositoryAggregations(repoId, 0, size);
|
||||
CollectionMonitorSummary collectionMonitorSummary = new CollectionMonitorSummary();
|
||||
collectionMonitorSummary.setAggregationInfo(aggregationInfo);
|
||||
size = 0;
|
||||
do {
|
||||
aggregationInfo = repositoryService.getRepositoryAggregations(repoId, size, size + 50);
|
||||
aggregationInfo = aggregationService.getRepositoryAggregations(repoId, size, size + 50);
|
||||
for (AggregationInfo aggregationDetail : aggregationInfo) {
|
||||
if (aggregationDetail.isIndexedVersion()) {
|
||||
collectionMonitorSummary.setLastIndexedVersion(aggregationDetail);
|
||||
|
|
|
@ -6,6 +6,7 @@ import eu.dnetlib.repo.manager.domain.dto.RepositoryTerms;
|
|||
import eu.dnetlib.repo.manager.domain.dto.User;
|
||||
import eu.dnetlib.repo.manager.exception.RepositoryServiceException;
|
||||
import eu.dnetlib.repo.manager.exception.ResourceNotFoundException;
|
||||
import eu.dnetlib.repo.manager.service.AggregationService;
|
||||
import eu.dnetlib.repo.manager.service.RepositoryService;
|
||||
import eu.dnetlib.repo.manager.service.security.AuthorizationService;
|
||||
import eu.dnetlib.repo.manager.utils.JsonUtils;
|
||||
|
@ -37,12 +38,16 @@ public class RepositoryController {
|
|||
private static final Logger logger = Logger.getLogger(RepositoryController.class);
|
||||
|
||||
private final RepositoryService repositoryService;
|
||||
|
||||
private final AggregationService aggregationService;
|
||||
|
||||
private final AuthorizationService authorizationService;
|
||||
|
||||
@Autowired
|
||||
RepositoryController(RepositoryService repositoryService,
|
||||
AuthorizationService authorizationService) {
|
||||
AggregationService aggregationService, AuthorizationService authorizationService) {
|
||||
this.repositoryService = repositoryService;
|
||||
this.aggregationService = aggregationService;
|
||||
this.authorizationService = authorizationService;
|
||||
}
|
||||
|
||||
|
@ -121,14 +126,14 @@ public class RepositoryController {
|
|||
produces = MediaType.APPLICATION_JSON_VALUE)
|
||||
@ResponseBody
|
||||
public List<AggregationInfo> getRepositoryAggregations(@PathVariable("id") String id) throws JSONException {
|
||||
return repositoryService.getRepositoryAggregations(id, 0, 20);
|
||||
return aggregationService.getRepositoryAggregations(id, 0, 20);
|
||||
}
|
||||
|
||||
@RequestMapping(value = "/getRepositoryAggregationsByYear/{id}", method = RequestMethod.GET,
|
||||
produces = MediaType.APPLICATION_JSON_VALUE)
|
||||
@ResponseBody
|
||||
public Map<String, List<AggregationInfo>> getRepositoryAggregationsByYear(@PathVariable("id") String id) throws JSONException {
|
||||
return repositoryService.getRepositoryAggregationsByYear(id);
|
||||
return aggregationService.getRepositoryAggregationsByYear(id);
|
||||
}
|
||||
|
||||
@RequestMapping(value = "/getRepositoriesByName/{name:.+}/{page}/{size}/", method = RequestMethod.GET,
|
||||
|
|
|
@ -0,0 +1,16 @@
|
|||
package eu.dnetlib.repo.manager.service;
|
||||
|
||||
import eu.dnetlib.enabling.datasources.common.AggregationInfo;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public interface AggregationService {
|
||||
|
||||
List<AggregationInfo> getRepositoryAggregations(String id);
|
||||
|
||||
List<AggregationInfo> getRepositoryAggregations(String id, int from, int size);
|
||||
|
||||
Map<String, List<AggregationInfo>> getRepositoryAggregationsByYear(String id);
|
||||
|
||||
}
|
|
@ -0,0 +1,92 @@
|
|||
package eu.dnetlib.repo.manager.service;
|
||||
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import eu.dnetlib.enabling.datasources.common.AggregationInfo;
|
||||
import eu.dnetlib.repo.manager.domain.AggregationHistoryResponse;
|
||||
import org.apache.log4j.Logger;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.web.client.RestClientException;
|
||||
import org.springframework.web.client.RestTemplate;
|
||||
import org.springframework.web.util.UriComponents;
|
||||
import org.springframework.web.util.UriComponentsBuilder;
|
||||
|
||||
import java.util.Comparator;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static eu.dnetlib.repo.manager.utils.DateUtils.getYear;
|
||||
|
||||
@Service("aggregationService")
|
||||
public class AggregationServiceImpl implements AggregationService {
|
||||
|
||||
private static final Logger logger = Logger.getLogger(AggregationServiceImpl.class);
|
||||
|
||||
|
||||
@Value("${services.provide.clients.dsm}")
|
||||
private String baseAddress;
|
||||
|
||||
private final RestTemplate restTemplate;
|
||||
|
||||
private final ObjectMapper objectMapper;
|
||||
|
||||
|
||||
public AggregationServiceImpl(RestTemplate restTemplate, ObjectMapper objectMapper) {
|
||||
this.restTemplate = restTemplate;
|
||||
this.objectMapper = objectMapper;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public List<AggregationInfo> getRepositoryAggregations(String id) throws RestClientException {
|
||||
|
||||
logger.debug("Retrieving aggregations for repository with id : " + id);
|
||||
UriComponents uriComponents = getAggregationHistory(id);
|
||||
|
||||
AggregationHistoryResponse rs = restTemplate.getForObject(uriComponents.toUri(), AggregationHistoryResponse.class);
|
||||
|
||||
return rs != null ? rs.getAggregationInfo() : null;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public List<AggregationInfo> getRepositoryAggregations(String id, int from, int size) throws RestClientException {
|
||||
|
||||
List<AggregationInfo> res = getRepositoryAggregations(id);
|
||||
return (res != null) ? res.subList(from, Math.min(from + size, res.size())) : null;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public Map<String, List<AggregationInfo>> getRepositoryAggregationsByYear(String id) throws RestClientException {
|
||||
logger.debug("Retrieving aggregations (by year) for repository with id : " + id);
|
||||
List<AggregationInfo> aggregationHistory = getRepositoryAggregations(id);
|
||||
if ( aggregationHistory != null ) {
|
||||
Map<String, List<AggregationInfo>> aggregationByYear = new HashMap<>();
|
||||
return aggregationHistory.size() == 0 ? aggregationByYear : createYearMap(aggregationHistory);
|
||||
} else
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
private UriComponents getAggregationHistory(String repoId) {
|
||||
return UriComponentsBuilder
|
||||
.fromHttpUrl(baseAddress + "/ds/aggregationhistory/")
|
||||
.path(repoId)
|
||||
.build().expand(repoId).encode();
|
||||
}
|
||||
|
||||
|
||||
private Map<String, List<AggregationInfo>> createYearMap(List<AggregationInfo> aggregationHistory) {
|
||||
|
||||
aggregationHistory = aggregationHistory.stream()
|
||||
.sorted(Comparator.comparing(AggregationInfo::getDate).reversed())
|
||||
.collect(Collectors.toList());
|
||||
|
||||
return aggregationHistory.stream()
|
||||
.collect(Collectors.groupingBy(item -> getYear(item.getDate())));
|
||||
}
|
||||
|
||||
}
|
|
@ -23,6 +23,9 @@ public class DashboardServiceImpl implements DashboardService {
|
|||
@Autowired
|
||||
private RepositoryService repositoryService;
|
||||
|
||||
@Autowired
|
||||
private AggregationService aggregationService;
|
||||
|
||||
@Autowired
|
||||
private BrokerService brokerService;
|
||||
|
||||
|
@ -43,7 +46,7 @@ public class DashboardServiceImpl implements DashboardService {
|
|||
|
||||
//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<AggregationInfo> aggregationInfoList = repositoryService.getRepositoryAggregations(repository.getId(), 0, 20);
|
||||
List<AggregationInfo> aggregationInfoList = aggregationService.getRepositoryAggregations(repository.getId(), 0, 20);
|
||||
for (AggregationInfo aggregationInfo : aggregationInfoList) {
|
||||
if (aggregationInfo.isIndexedVersion()) {
|
||||
repositorySummaryInfo.setRecordsCollected(aggregationInfo.getNumberOfRecords());
|
||||
|
@ -68,7 +71,6 @@ public class DashboardServiceImpl implements DashboardService {
|
|||
for (BrowseEntry browseEntry : events)
|
||||
totalEvents += browseEntry.getSize();
|
||||
repositorySummaryInfo.setEnrichmentEvents(totalEvents);
|
||||
|
||||
} catch (BrokerException e) {
|
||||
logger.error("Exception getting broker events for repository: " + repository.getId(), e);
|
||||
}
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
package eu.dnetlib.repo.manager.service;
|
||||
|
||||
import eu.dnetlib.enabling.datasources.common.AggregationInfo;
|
||||
import eu.dnetlib.repo.manager.domain.*;
|
||||
import eu.dnetlib.repo.manager.exception.RepositoryServiceException;
|
||||
import eu.dnetlib.repo.manager.exception.ResourceNotFoundException;
|
||||
|
@ -43,12 +42,6 @@ public interface RepositoryService {
|
|||
|
||||
Repository getRepositoryById(String id) throws JSONException, ResourceNotFoundException;
|
||||
|
||||
List<AggregationInfo> getRepositoryAggregations(String id) throws JSONException;
|
||||
|
||||
List<AggregationInfo> getRepositoryAggregations(String id, int from, int size) throws JSONException;
|
||||
|
||||
Map<String, List<AggregationInfo>> getRepositoryAggregationsByYear(String id) throws JSONException;
|
||||
|
||||
List<Repository> getRepositoriesByName(String name,
|
||||
String page,
|
||||
String size) throws JSONException;
|
||||
|
|
|
@ -7,7 +7,6 @@ import com.google.gson.JsonObject;
|
|||
import eu.dnetlib.api.functionality.ValidatorServiceException;
|
||||
import eu.dnetlib.domain.enabling.Vocabulary;
|
||||
import eu.dnetlib.domain.functionality.validator.JobForValidation;
|
||||
import eu.dnetlib.enabling.datasources.common.AggregationInfo;
|
||||
import eu.dnetlib.repo.manager.domain.*;
|
||||
import eu.dnetlib.repo.manager.domain.dto.Role;
|
||||
import eu.dnetlib.repo.manager.domain.dto.User;
|
||||
|
@ -46,9 +45,6 @@ import java.io.IOException;
|
|||
import java.sql.Timestamp;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static eu.dnetlib.repo.manager.utils.DateUtils.getYear;
|
||||
|
||||
@Service("repositoryService")
|
||||
public class RepositoryServiceImpl implements RepositoryService {
|
||||
|
@ -409,47 +405,6 @@ public class RepositoryServiceImpl implements RepositoryService {
|
|||
}
|
||||
|
||||
|
||||
@Override
|
||||
public List<AggregationInfo> getRepositoryAggregations(String id) {
|
||||
|
||||
LOGGER.debug("Retrieving aggregations for repository with id : " + id);
|
||||
UriComponents uriComponents = getAggregationHistory(id);
|
||||
|
||||
AggregationHistoryResponse rs = restTemplate.getForObject(uriComponents.toUri(), AggregationHistoryResponse.class);
|
||||
|
||||
return rs != null ? rs.getAggregationInfo() : null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<AggregationInfo> getRepositoryAggregations(String id, int from, int size) {
|
||||
|
||||
List<AggregationInfo> res = getRepositoryAggregations(id);
|
||||
return (res != null) ? res.subList(from, Math.min(from + size, res.size())) : null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, List<AggregationInfo>> getRepositoryAggregationsByYear(String id) {
|
||||
LOGGER.debug("Retrieving aggregations (by year) for repository with id : " + id);
|
||||
|
||||
List<AggregationInfo> aggregationHistory = getRepositoryAggregations(id);
|
||||
if ( aggregationHistory != null ) {
|
||||
Map<String, List<AggregationInfo>> aggregationByYear = new HashMap<>();
|
||||
return aggregationHistory.size() == 0 ? aggregationByYear : createYearMap(aggregationHistory);
|
||||
} else
|
||||
return null;
|
||||
}
|
||||
|
||||
private Map<String, List<AggregationInfo>> createYearMap(List<AggregationInfo> aggregationHistory) {
|
||||
|
||||
aggregationHistory = aggregationHistory.stream()
|
||||
.sorted(Comparator.comparing(AggregationInfo::getDate).reversed())
|
||||
.collect(Collectors.toList());
|
||||
|
||||
return aggregationHistory.stream()
|
||||
.collect(Collectors.groupingBy(item -> getYear(item.getDate())));
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public List<Repository> getRepositoriesByName(String name,
|
||||
String page,
|
||||
|
@ -1023,12 +978,6 @@ public class RepositoryServiceImpl implements RepositoryService {
|
|||
return null;
|
||||
}
|
||||
|
||||
private UriComponents getAggregationHistory(String repoId) {
|
||||
return UriComponentsBuilder
|
||||
.fromHttpUrl(baseAddress + "/ds/aggregationhistory/")
|
||||
.path(repoId)
|
||||
.build().expand(repoId).encode();
|
||||
}
|
||||
|
||||
private UriComponents searchDatasource(String page, String size) {
|
||||
|
||||
|
|
Loading…
Reference in New Issue