Skip to content

Commit

Permalink
better api/index/status data #702
Browse files Browse the repository at this point in the history
  • Loading branch information
pdurbin committed Dec 15, 2014
1 parent 09699b6 commit d20352d
Show file tree
Hide file tree
Showing 2 changed files with 89 additions and 18 deletions.
45 changes: 43 additions & 2 deletions src/main/java/edu/harvard/iq/dataverse/IndexServiceBean.java
Original file line number Diff line number Diff line change
Expand Up @@ -1028,7 +1028,11 @@ private String getDesiredCardState(Map<DatasetVersion.VersionState, Boolean> des
return "Desired state for existence of cards: " + desiredCards + "\n";
}

public List findStaleDataverses() {
/**
* @return Dataverses that should be reindexed either because they have
* never been indexed or their index time is before their modification time.
*/
public List findStaleOrMissingDataverses() {
List<Dataverse> staleDataverses = new ArrayList<>();
for (Dataverse dataverse : dataverseService.findAll()) {
if (dataverse.equals(dataverseService.findRootDataverse())) {
Expand All @@ -1041,7 +1045,11 @@ public List findStaleDataverses() {
return staleDataverses;
}

public List findStaleDatasets() {
/**
* @return Datasets that should be reindexed either because they have never
* been indexed or their index time is before their modification time.
*/
public List findStaleOrMissingDatasets() {
List<Dataset> staleDatasets = new ArrayList<>();
for (Dataset dataset : datasetService.findAll()) {
if (stale(dataset)) {
Expand All @@ -1064,4 +1072,37 @@ private boolean stale(DvObject dvObject) {
return false;
}

public List<Long> findDataversesInSolrOnly() {
SolrServer solrServer = new HttpSolrServer("http://" + systemConfig.getSolrHostColonPort() + "/solr");
SolrQuery solrQuery = new SolrQuery();
solrQuery.setQuery("*");
solrQuery.setRows(Integer.SIZE);
solrQuery.addFilterQuery(SearchFields.TYPE + ":" + "dataverses");
List<Long> dataversesInSolrOnly = new ArrayList<>();
try {
QueryResponse queryResponse = solrServer.query(solrQuery);
SolrDocumentList results = queryResponse.getResults();
for (SolrDocument solrDocument : results) {
Object idObject = solrDocument.getFieldValue(SearchFields.ENTITY_ID);
if (idObject != null) {
try {
long id = (Long) idObject;
Dataverse dataverseToFind = dataverseService.find(id);
if (dataverseToFind == null) {
dataversesInSolrOnly.add(id);
}
} catch (ClassCastException ex) {
}
}
}
} catch (SolrServerException ex) {
return null;
}
return dataversesInSolrOnly;
}

public List<Long> findDatasetsInSolrOnly() {
return new ArrayList<>();
}

}
62 changes: 46 additions & 16 deletions src/main/java/edu/harvard/iq/dataverse/api/Index.java
Original file line number Diff line number Diff line change
Expand Up @@ -74,13 +74,21 @@ public String indexAll() {
}
}

/**
* @todo return Response rather than String
*/
@GET
@Path("{type}/{id}")
public String indexTypeById(@PathParam("type") String type, @PathParam("id") Long id) {
try {
if (type.equals("dataverses")) {
Dataverse dataverse = dataverseService.find(id);
return indexService.indexDataverse(dataverse) + "\n";
if (dataverse != null) {
return indexService.indexDataverse(dataverse) + "\n";
} else {
String response = indexService.removeSolrDocFromIndex(IndexServiceBean.solrDocIdentifierDataverse + id);
return "Could not find dataverse with id of " + id + ". Result from deletion attempt: " + response;
}
} else if (type.equals("datasets")) {
Dataset dataset = datasetService.find(id);
return indexService.indexDataset(dataset) + "\n";
Expand Down Expand Up @@ -140,26 +148,48 @@ public Response indexPermissions(@PathParam("id") Long id) {
@GET
@Path("status")
public Response indexStatus() {
List<Dataverse> staleDataverses = indexService.findStaleDataverses();
List<Dataset> staleDatasets = indexService.findStaleDatasets();

JsonObjectBuilder staleCounts = Json.createObjectBuilder()
.add("dataverses", staleDataverses.size())
.add("datasets", staleDatasets.size());
List<Dataverse> stateOrMissingDataverses = indexService.findStaleOrMissingDataverses();
List<Dataset> staleOrMissingDatasets = indexService.findStaleOrMissingDatasets();
List<Long> dataversesInSolrOnly = indexService.findDataversesInSolrOnly();
List<Long> datasetsInSolrOnly = indexService.findDatasetsInSolrOnly();

JsonArrayBuilder staleDataverseIds = Json.createArrayBuilder();
for (Dataverse staleDataverse : staleDataverses) {
staleDataverseIds.add(staleDataverse.getId());
JsonArrayBuilder jsonStateOrMissingDataverses = Json.createArrayBuilder();
for (Dataverse dataverse : stateOrMissingDataverses) {
jsonStateOrMissingDataverses.add(dataverse.getId());
}
JsonArrayBuilder staleDatasetIds = Json.createArrayBuilder();
for (Dataset staleDataset : staleDatasets) {
staleDatasetIds.add(staleDataset.getId());
JsonArrayBuilder datasetsInDatabaseButNotSolr = Json.createArrayBuilder();
for (Dataset dataset : staleOrMissingDatasets) {
datasetsInDatabaseButNotSolr.add(dataset.getId());
}

JsonArrayBuilder dataversesInSolrButNotDatabase = Json.createArrayBuilder();
JsonArrayBuilder datasetsInSolrButNotDatabase = Json.createArrayBuilder();
JsonObjectBuilder contentInDatabaseButStaleInOrMissingFromSolr = Json.createObjectBuilder();
if (dataversesInSolrOnly != null && datasetsInSolrOnly != null) {
for (Long dataverseId : dataversesInSolrOnly) {
dataversesInSolrButNotDatabase.add(dataverseId);
}
for (Long datasetId : datasetsInSolrOnly) {
datasetsInSolrButNotDatabase.add(datasetId);
}
contentInDatabaseButStaleInOrMissingFromSolr = Json.createObjectBuilder()
.add("dataverses", jsonStateOrMissingDataverses)
.add("datasets", datasetsInDatabaseButNotSolr);
}

JsonObjectBuilder contentInSolrButNotDatabase = Json.createObjectBuilder()
.add("dataverses", dataversesInSolrButNotDatabase)
.add("datasets", datasetsInSolrButNotDatabase);

JsonObjectBuilder permissions = Json.createObjectBuilder()
.add("dataverses", "FIXME")
.add("datasets", "FIXME")
.add("files", "FIXME");

JsonObjectBuilder data = Json.createObjectBuilder()
.add("staleCounts", staleCounts)
.add("staleDataverseIds", staleDataverseIds)
.add("staleDatasetIds", staleDatasetIds);
.add("contentInDatabaseButStaleInOrMissingFromIndex", contentInDatabaseButStaleInOrMissingFromSolr)
.add("contentInIndexButNotDatabase", contentInSolrButNotDatabase)
.add("permissions", permissions);

return okResponse(data);
}
Expand Down

0 comments on commit d20352d

Please sign in to comment.