diff --git a/src/main/java/org/genesys/catalog/service/DescriptorService.java b/src/main/java/org/genesys/catalog/service/DescriptorService.java index 2c61744f60d1cf351ffe544939f8bcc9a02001dd..f83b032e944b383b25b5e5c5c6b984cdeaeda9e3 100644 --- a/src/main/java/org/genesys/catalog/service/DescriptorService.java +++ b/src/main/java/org/genesys/catalog/service/DescriptorService.java @@ -172,4 +172,11 @@ public interface DescriptorService { Descriptor nextVersion(@P("descriptor") Descriptor descriptor, boolean major); void exportDescriptors(DescriptorFilter filter, OutputStream outputStream) throws IOException; + + /** + * Cont published descriptors + * + * @return the number of published descriptors + */ + long countPublished(); } diff --git a/src/main/java/org/genesys/catalog/service/PartnerService.java b/src/main/java/org/genesys/catalog/service/PartnerService.java index 4969775047cd3ac7d0386618466d5f940d006435..4b512334f11e00bd8eb3ccac938f9b9206c15eeb 100644 --- a/src/main/java/org/genesys/catalog/service/PartnerService.java +++ b/src/main/java/org/genesys/catalog/service/PartnerService.java @@ -112,4 +112,6 @@ public interface PartnerService { */ Partner removePartner(Partner partner); + long countPartners(PartnerFilter filter); + } diff --git a/src/main/java/org/genesys/catalog/service/impl/DescriptorServiceImpl.java b/src/main/java/org/genesys/catalog/service/impl/DescriptorServiceImpl.java index 85b68b2a77ccf7a17bda1fb4670c85e372fca47f..ecdbe0d3c96e83bdd9a296df09c0350472de827e 100644 --- a/src/main/java/org/genesys/catalog/service/impl/DescriptorServiceImpl.java +++ b/src/main/java/org/genesys/catalog/service/impl/DescriptorServiceImpl.java @@ -457,4 +457,9 @@ public class DescriptorServiceImpl implements DescriptorService { downloadService.writeXlsxDescriptor(descriptors, outputStream); } + @Override + public long countPublished() { + return descriptorRepository.count(descriptor.state.eq(PublishState.PUBLISHED)); + } + } diff --git a/src/main/java/org/genesys/catalog/service/impl/PartnerServiceImpl.java b/src/main/java/org/genesys/catalog/service/impl/PartnerServiceImpl.java index 79565e16d44235eafa8d69501ecf63244060df92..cdc29bbda9aa748a4c3082d3ea67fb69b705b57d 100644 --- a/src/main/java/org/genesys/catalog/service/impl/PartnerServiceImpl.java +++ b/src/main/java/org/genesys/catalog/service/impl/PartnerServiceImpl.java @@ -26,6 +26,7 @@ import org.genesys.catalog.persistence.PartnerRepository; import org.genesys.catalog.service.PartnerService; import org.genesys2.server.model.UserRole; import org.genesys2.server.security.SecurityUtils; +import org.genesys2.server.service.ElasticsearchService; import org.genesys2.util.JPAUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -58,6 +59,9 @@ public class PartnerServiceImpl implements PartnerService, InitializingBean { @Autowired private SecurityUtils securityUtils; + @Autowired + private ElasticsearchService elasticsearchService; + @Value("${partner.primary.uuid}") private UUID primaryPartnerUuid; @@ -220,6 +224,18 @@ public class PartnerServiceImpl implements PartnerService, InitializingBean { return loadedPartner; } + @Override + public long countPartners(PartnerFilter filter) { + long total = elasticsearchService.count(Partner.class, filter); + + if (total < 10000) { + // If total is below 10K, use actual count + total = partnerRepository.count(filter.buildQuery()); + } + + return total; + } + /** * Lazy load. * diff --git a/src/main/java/org/genesys2/server/api/v1/ApiInfoController.java b/src/main/java/org/genesys2/server/api/v1/ApiInfoController.java new file mode 100644 index 0000000000000000000000000000000000000000..cfc1144d6a1a04404fa3c7501f1d6e712d53bcd8 --- /dev/null +++ b/src/main/java/org/genesys2/server/api/v1/ApiInfoController.java @@ -0,0 +1,112 @@ +package org.genesys2.server.api.v1; + +import io.swagger.annotations.Api; +import org.genesys.catalog.model.filters.PartnerFilter; +import org.genesys.catalog.service.DatasetService; +import org.genesys.catalog.service.DescriptorService; +import org.genesys.catalog.service.PartnerService; +import org.genesys2.server.api.ApiBaseController; +import org.genesys2.server.service.AccessionService; +import org.genesys2.server.service.InstituteService; +import org.genesys2.server.service.SubsetService; +import org.genesys2.server.service.filter.AccessionFilter; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.InitializingBean; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; + +import java.net.UnknownHostException; + +/** + * Accession API v1 + */ +@RestController("infoApi1") +@PreAuthorize("isAuthenticated()") +@RequestMapping(ApiInfoController.CONTROLLER_URL) +@Api(tags = { "api-info" }) +public class ApiInfoController { + + private static final Logger LOG = LoggerFactory.getLogger(ApiInfoController.class); + + public static final String CONTROLLER_URL = ApiBaseController.APIv1_BASE + "/info"; + + @Value("${build.version}") + private String version; + + @Value("${build.artifactId}") + private String artifactId; + + @Value("${build.revision}") + private String revision; + + @Value("${cdn.servers}") + private String[] cdnServers; + + @Autowired + private AccessionService accessionService; + @Autowired + private DatasetService datasetService; + @Autowired + private SubsetService subsetService; + @Autowired + private InstituteService instituteService; + @Autowired + private DescriptorService descriptorService; + @Autowired + private PartnerService partnerService; + + /** + * Api info. + * + * @return the api info + */ + @RequestMapping(value = "/version", method = RequestMethod.GET) + public ApiInfo apiInfo() { + String hN; + try { + hN = java.net.InetAddress.getLocalHost().getHostName(); + } catch (final UnknownHostException e) { + LOG.error("Error getting Host Name"); + hN = ""; + } + + ApiInfo apiInfo = new ApiInfo(); + apiInfo.version = this.version; + apiInfo.artifactId = this.artifactId; + apiInfo.revision = this.revision; + apiInfo.cdnServers = this.cdnServers; + apiInfo.hostName = hN; + apiInfo.accessionCount = accessionService.countAccessions(new AccessionFilter()); + apiInfo.datasetCount = datasetService.countPublished(); + apiInfo.subsetCount = subsetService.countPublished(); + apiInfo.instituteCount = instituteService.countActive(); + apiInfo.descriptorCount = descriptorService.countPublished(); + apiInfo.partnerCount = partnerService.countPartners(new PartnerFilter()); + + return apiInfo; + } + + /** + * The Class ApiInfo. + */ + public static class ApiInfo { + public String artifactId; + public String version; + public String revision; + public String hostName; + + public String[] cdnServers; + public long accessionCount; + public long datasetCount; + public long subsetCount; + public long instituteCount; + public long descriptorCount; + public long partnerCount; + } + +} diff --git a/src/main/java/org/genesys2/server/service/SubsetService.java b/src/main/java/org/genesys2/server/service/SubsetService.java index 4617f71b08c52dee1abb55ccbea0c180f768b4d0..70fff4c74cd06fc337000e7e2afb6bb4b135d89d 100644 --- a/src/main/java/org/genesys2/server/service/SubsetService.java +++ b/src/main/java/org/genesys2/server/service/SubsetService.java @@ -42,6 +42,13 @@ public interface SubsetService { */ Page list(SubsetFilter filter, Pageable page); + /** + * Cont published subsets + * + * @return the number of published subsets + */ + long countPublished(); + /** * List current user's subsets matching the filter. * diff --git a/src/main/java/org/genesys2/server/service/impl/SubsetServiceImpl.java b/src/main/java/org/genesys2/server/service/impl/SubsetServiceImpl.java index 11be7c4d7d63a79035d763e728e8e9be9a02a6b2..27a717b004f2671e35c5ff0605c8ed7362325f53 100644 --- a/src/main/java/org/genesys2/server/service/impl/SubsetServiceImpl.java +++ b/src/main/java/org/genesys2/server/service/impl/SubsetServiceImpl.java @@ -98,6 +98,11 @@ public class SubsetServiceImpl implements SubsetService { return subsetRepository.findAll(published, page); } + @Override + public long countPublished() { + return subsetRepository.count(QSubset.subset.state.eq(PublishState.PUBLISHED)); + } + @Override @PreAuthorize("hasRole('ADMINISTRATOR') or isAuthenticated()") public Page listSubsetsForCurrentUser(SubsetFilter filter, Pageable page) {