diff --git a/dspace-api/src/main/java/org/dspace/app/metrics/dao/CrisMetricsDAO.java b/dspace-api/src/main/java/org/dspace/app/metrics/dao/CrisMetricsDAO.java index fc717d2c7992..833db67adaaa 100644 --- a/dspace-api/src/main/java/org/dspace/app/metrics/dao/CrisMetricsDAO.java +++ b/dspace-api/src/main/java/org/dspace/app/metrics/dao/CrisMetricsDAO.java @@ -42,6 +42,9 @@ public interface CrisMetricsDAO extends GenericDAO { public CrisMetrics findLastMetricByResourceIdAndMetricsTypes(Context context, String metricType, UUID resourceId) throws SQLException; + public List findLastMetricsByResourceId(Context context, UUID resourceId, + Integer limit, Integer offset) throws SQLException; + public CrisMetrics uniqueLastMetricByResourceIdAndResourceTypeIdAndMetricsType(Context context, String metricType, UUID resource, boolean last) throws SQLException; diff --git a/dspace-api/src/main/java/org/dspace/app/metrics/dao/CrisMetricsDAOImpl.java b/dspace-api/src/main/java/org/dspace/app/metrics/dao/CrisMetricsDAOImpl.java index 6fc2f7575abe..fef5f1493f15 100644 --- a/dspace-api/src/main/java/org/dspace/app/metrics/dao/CrisMetricsDAOImpl.java +++ b/dspace-api/src/main/java/org/dspace/app/metrics/dao/CrisMetricsDAOImpl.java @@ -107,6 +107,19 @@ public CrisMetrics findLastMetricByResourceIdAndMetricsTypes(Context context, St return singleResult(context, criteriaQuery); } + @Override + public List findLastMetricsByResourceId(Context context, UUID resourceId, + Integer limit, Integer offset) throws SQLException { + CriteriaBuilder criteriaBuilder = getCriteriaBuilder(context); + CriteriaQuery criteriaQuery = getCriteriaQuery(criteriaBuilder, CrisMetrics.class); + Root crisMetricsRoot = criteriaQuery.from(CrisMetrics.class); + Join join = crisMetricsRoot.join(CrisMetrics_.resource); + criteriaQuery.where( + criteriaBuilder.and(criteriaBuilder.equal(crisMetricsRoot.get(CrisMetrics_.last), true), + criteriaBuilder.equal(join.get(DSpaceObject_.id), resourceId))); + return list(context, criteriaQuery, false, CrisMetrics.class, limit, offset); + } + @Override public CrisMetrics uniqueLastMetricByResourceIdAndResourceTypeIdAndMetricsType(Context context, String metricType, UUID resource, boolean last) throws SQLException { diff --git a/dspace-api/src/main/java/org/dspace/app/metrics/service/CrisMetricsService.java b/dspace-api/src/main/java/org/dspace/app/metrics/service/CrisMetricsService.java index 53a2c2023c42..c73fccf2acfe 100644 --- a/dspace-api/src/main/java/org/dspace/app/metrics/service/CrisMetricsService.java +++ b/dspace-api/src/main/java/org/dspace/app/metrics/service/CrisMetricsService.java @@ -47,6 +47,9 @@ public interface CrisMetricsService { public CrisMetrics findLastMetricByResourceIdAndMetricsTypes(Context context, String metricType, UUID resourceUuid) throws SQLException; + public List findLastMetricsByResourceId(Context context, UUID resourceUuid, + Integer limit, Integer offset) throws SQLException; + public CrisMetrics uniqueLastMetricByResourceIdAndResourceTypeIdAndMetricsType(Context context, String metricType, UUID resourceUuid, boolean last) throws SQLException; diff --git a/dspace-api/src/main/java/org/dspace/app/metrics/service/CrisMetricsServiceImpl.java b/dspace-api/src/main/java/org/dspace/app/metrics/service/CrisMetricsServiceImpl.java index 98fdeb346cba..9457a078f52e 100644 --- a/dspace-api/src/main/java/org/dspace/app/metrics/service/CrisMetricsServiceImpl.java +++ b/dspace-api/src/main/java/org/dspace/app/metrics/service/CrisMetricsServiceImpl.java @@ -96,6 +96,12 @@ public CrisMetrics findLastMetricByResourceIdAndMetricsTypes(Context context, St return this.crisMetricsDAO.findLastMetricByResourceIdAndMetricsTypes(context, metricType, resourceId); } + @Override + public List findLastMetricsByResourceId(Context context, UUID resourceId, + Integer limit, Integer offset) throws SQLException { + return this.crisMetricsDAO.findLastMetricsByResourceId(context, resourceId, limit, offset); + } + @Override public CrisMetrics uniqueLastMetricByResourceIdAndResourceTypeIdAndMetricsType( Context context, String metricType, UUID resource, boolean last) throws SQLException { diff --git a/dspace-api/src/main/java/org/dspace/discovery/IndexClient.java b/dspace-api/src/main/java/org/dspace/discovery/IndexClient.java index 48a5b45f69df..d1ab2506f0dc 100644 --- a/dspace-api/src/main/java/org/dspace/discovery/IndexClient.java +++ b/dspace-api/src/main/java/org/dspace/discovery/IndexClient.java @@ -174,7 +174,23 @@ public void internalRun() throws Exception { handler.logInfo("Done with indexing"); if (metricUpdate) { - updateCrisMetricsInSolrDocService.performUpdate(context, handler, true); + if (indexableObjects.isPresent()) { + final String param = indexClientOptions == IndexClientOptions.REMOVE ? + commandLine.getOptionValue('r') : + commandLine.getOptionValue('i'); + UUID uuid = null; + try { + uuid = UUID.fromString(param); + } catch (Exception e) { + uuid = HandleServiceFactory.getInstance() + .getHandleService().resolveToObject(context, param).getID(); + } + + updateCrisMetricsInSolrDocService.performUpdate(context, handler, true, uuid); + + } else { + updateCrisMetricsInSolrDocService.performUpdate(context, handler, true); + } } } diff --git a/dspace-api/src/main/java/org/dspace/metrics/UpdateCrisMetricsInSolrDocService.java b/dspace-api/src/main/java/org/dspace/metrics/UpdateCrisMetricsInSolrDocService.java index 4f1e8bcc2602..d1a5788db9f8 100644 --- a/dspace-api/src/main/java/org/dspace/metrics/UpdateCrisMetricsInSolrDocService.java +++ b/dspace-api/src/main/java/org/dspace/metrics/UpdateCrisMetricsInSolrDocService.java @@ -8,6 +8,7 @@ package org.dspace.metrics; import java.sql.SQLException; import java.util.List; +import java.util.UUID; import org.apache.commons.lang3.StringUtils; import org.apache.logging.log4j.LogManager; @@ -36,8 +37,14 @@ public class UpdateCrisMetricsInSolrDocService { IndexingService.class.getName(), IndexingService.class); public void performUpdate(Context context, DSpaceRunnableHandler handler, boolean optimize) { + performUpdate(context, handler, optimize, null); + } + + public void performUpdate(Context context, DSpaceRunnableHandler handler, boolean optimize, UUID resourceUuid) { try { - List metrics = crisMetricsService.findAllLast(context,-1,-1); + List metrics = resourceUuid == null + ? crisMetricsService.findAllLast(context,-1,-1) + : crisMetricsService.findLastMetricsByResourceId(context, resourceUuid, -1, -1); handler.logInfo("Metric update start"); for (CrisMetrics metric : metrics) { try {