diff --git a/backend/pom.xml b/backend/pom.xml
index a17640a3e..24b8b525e 100644
--- a/backend/pom.xml
+++ b/backend/pom.xml
@@ -167,6 +167,12 @@
4.4
compile
+
+ joda-time
+ joda-time
+ 2.13.0
+ compile
+
diff --git a/backend/src/main/java/uk/ac/ebi/spot/ols/controller/api/v2/V2StatisticsController.java b/backend/src/main/java/uk/ac/ebi/spot/ols/controller/api/v2/V2StatisticsController.java
index 7f767b89f..9217eaea0 100644
--- a/backend/src/main/java/uk/ac/ebi/spot/ols/controller/api/v2/V2StatisticsController.java
+++ b/backend/src/main/java/uk/ac/ebi/spot/ols/controller/api/v2/V2StatisticsController.java
@@ -35,7 +35,7 @@ public class V2StatisticsController {
@Operation(description = "Get Whole System Statistics. Components in all ontologies are taken into consideration")
@RequestMapping(path = "/stats", produces = {MediaType.APPLICATION_JSON_VALUE, MediaTypes.HAL_JSON_VALUE}, method = RequestMethod.GET)
public HttpEntity getStatistics() throws ResourceNotFoundException, IOException {
- return new ResponseEntity<>( computeStats("*:*"), HttpStatus.OK);
+ return new ResponseEntity<>( computeStats("*:*", null), HttpStatus.OK);
}
@Operation(description = "Get Schema and Classification based Statistics. Possible schema keys and possible classification values of particular keys can be inquired with /api/ontologies/schemakeys and /api/ontologies/schemavalues methods respectively.")
@@ -53,6 +53,7 @@ public HttpEntity getStatistics(
@RequestParam(value = "lang", defaultValue = "en") String lang) throws ResourceNotFoundException, IOException{
ontologyIds = ontologyRepository.filterOntologyIDs(schemas,classifications,ontologyIds,exclusive,filterOption,lang);
+ String lastLoaded = ontologyRepository.getLastLoaded(ontologyIds,lang).toString();
StringBuilder sb = new StringBuilder();
String queryString = "none";
if(ontologyIds != null){
@@ -61,7 +62,7 @@ public HttpEntity getStatistics(
}
queryString = sb.toString().substring(0,sb.toString().lastIndexOf(" OR "));
}
- return new ResponseEntity<>( computeStats(queryString), HttpStatus.OK);
+ return new ResponseEntity<>( computeStats(queryString, lastLoaded), HttpStatus.OK);
}
@Operation(description = "Get Composite Schema based Statistics. All schemas with their respective classifications under the classifications variable will be computed.")
@RequestMapping(path = "/allstatsbyschema", produces = {MediaType.APPLICATION_JSON_VALUE, MediaTypes.HAL_JSON_VALUE}, method = RequestMethod.GET)
@@ -82,11 +83,11 @@ HttpEntity getStatisticsBySchema(
return new ResponseEntity<>( summaries, HttpStatus.OK);
}
- private V2Statistics computeStats(String queryString) throws IOException {
+ private V2Statistics computeStats(String queryString, String lastLoaded) throws IOException {
Map coreStatus = solrClient.getCoreStatus();
Map indexStatus = (Map) coreStatus.get("index");
- String lastModified = (String) indexStatus.get("lastModified");
+ String lastModified = lastLoaded == null ? (String) indexStatus.get("lastModified") : lastLoaded;
SolrQuery query = new SolrQuery();
query.setQuery(queryString);
diff --git a/backend/src/main/java/uk/ac/ebi/spot/ols/repository/v2/V2OntologyRepository.java b/backend/src/main/java/uk/ac/ebi/spot/ols/repository/v2/V2OntologyRepository.java
index ff7e478b9..ffa237f25 100644
--- a/backend/src/main/java/uk/ac/ebi/spot/ols/repository/v2/V2OntologyRepository.java
+++ b/backend/src/main/java/uk/ac/ebi/spot/ols/repository/v2/V2OntologyRepository.java
@@ -20,6 +20,9 @@
import uk.ac.ebi.spot.ols.repository.transforms.RemoveLiteralDatatypesTransform;
import uk.ac.ebi.spot.ols.repository.v2.helpers.V2DynamicFilterParser;
import uk.ac.ebi.spot.ols.repository.v2.helpers.V2SearchFieldsParser;
+
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
import java.util.*;
import java.io.IOException;
@@ -103,6 +106,19 @@ public Set getOntologies(String lang){
return entities;
}
+ public LocalDateTime getLastLoaded(Collection ontologies,String lang){
+ LocalDateTime lastLoaded = LocalDateTime.MIN;
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSSSSSSS");
+ for (V2Entity entity : getOntologies(lang)){
+ if (ontologies.contains(entity.any().get("ontologyId").toString())){
+ LocalDateTime dateTime = LocalDateTime.parse(entity.any().get("loaded").toString(), formatter);
+ if (dateTime.isAfter(lastLoaded))
+ lastLoaded = dateTime;
+ }
+ }
+ return lastLoaded;
+ }
+
public Collection filterOntologyIDs(Collection schemas, Collection classifications, Collection ontologies, boolean exclusiveFilter, FilterOption filterOption, String lang){
if (schemas != null)
schemas.remove("");