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("");