diff --git a/src/main/java/org/commonjava/indy/service/repository/controller/StatsController.java b/src/main/java/org/commonjava/indy/service/repository/controller/StatsController.java index 3aae35e..cf5648c 100644 --- a/src/main/java/org/commonjava/indy/service/repository/controller/StatsController.java +++ b/src/main/java/org/commonjava/indy/service/repository/controller/StatsController.java @@ -22,6 +22,7 @@ import org.commonjava.indy.service.repository.model.StoreKey; import org.commonjava.indy.service.repository.model.dto.EndpointView; import org.commonjava.indy.service.repository.model.dto.EndpointViewListing; +import org.commonjava.indy.service.repository.model.dto.ListArtifactStoreDTO; import org.commonjava.indy.service.repository.model.version.Versioning; import jakarta.enterprise.context.ApplicationScoped; @@ -57,13 +58,14 @@ public Versioning getVersionInfo() return versioning; } - public EndpointViewListing getEndpointsListing( final String baseUri, final JaxRsUriFormatter uriFormatter ) - throws IndyWorkflowException + public EndpointViewListing getEndpointsListing( final String baseUri, final JaxRsUriFormatter uriFormatter, final String page ) + throws IndyWorkflowException { final List stores; try { - stores = new ArrayList<>( dataManager.getAllArtifactStores() ); + ListArtifactStoreDTO result = dataManager.getAllArtifactStores(page); + stores = new ArrayList<>( result.getItems() ); } catch ( final IndyDataException e ) { @@ -89,6 +91,12 @@ public EndpointViewListing getEndpointsListing( final String baseUri, final JaxR return new EndpointViewListing( points ); } + public EndpointViewListing getEndpointsListing( final String baseUri, final JaxRsUriFormatter uriFormatter ) + throws IndyWorkflowException + { + return getEndpointsListing( baseUri, uriFormatter, "" ); + } + public Map> getAllStoreKeys() throws IndyWorkflowException { diff --git a/src/main/java/org/commonjava/indy/service/repository/data/StoreDataManager.java b/src/main/java/org/commonjava/indy/service/repository/data/StoreDataManager.java index 0ad8534..769c996 100644 --- a/src/main/java/org/commonjava/indy/service/repository/data/StoreDataManager.java +++ b/src/main/java/org/commonjava/indy/service/repository/data/StoreDataManager.java @@ -82,6 +82,12 @@ Optional getArtifactStore( StoreKey key ) Set getAllArtifactStores() throws IndyDataException; + /** + * Return the full list of {@link ArtifactStore} instances of a given {@link StoreType} (hosted, remote, or group) available on the system. + */ + ListArtifactStoreDTO getAllArtifactStores(String page) + throws IndyDataException; + /** * Return the {@link ArtifactStore} instances as a {@link Stream}. */ diff --git a/src/main/java/org/commonjava/indy/service/repository/data/cassandra/CassandraStoreDataManager.java b/src/main/java/org/commonjava/indy/service/repository/data/cassandra/CassandraStoreDataManager.java index 4032fc2..6717d58 100644 --- a/src/main/java/org/commonjava/indy/service/repository/data/cassandra/CassandraStoreDataManager.java +++ b/src/main/java/org/commonjava/indy/service/repository/data/cassandra/CassandraStoreDataManager.java @@ -143,10 +143,19 @@ public void clear( ChangeSummary summary ) // @WithSpan public Set getAllArtifactStores() { - Set dtxArtifactStoreSet = storeQuery.getAllArtifactStores(); + ListArtifactStoreDTO result = getAllArtifactStores(""); + return result.getItems(); + } + + @Override + // @WithSpan + public ListArtifactStoreDTO getAllArtifactStores(String page) + { + ListDtxArtifactStoreDTO result = storeQuery.getAllArtifactStores(page); + Set dtxArtifactStoreSet = result.getItems(); Set artifactStoreSet = new HashSet<>(); dtxArtifactStoreSet.forEach( dtxArtifactStore -> artifactStoreSet.add( toArtifactStore( dtxArtifactStore ) ) ); - return artifactStoreSet; + return new ListArtifactStoreDTO(artifactStoreSet, page, result.getNextPage()); } @Override diff --git a/src/main/java/org/commonjava/indy/service/repository/data/cassandra/CassandraStoreQuery.java b/src/main/java/org/commonjava/indy/service/repository/data/cassandra/CassandraStoreQuery.java index cfb11d8..dc961ab 100644 --- a/src/main/java/org/commonjava/indy/service/repository/data/cassandra/CassandraStoreQuery.java +++ b/src/main/java/org/commonjava/indy/service/repository/data/cassandra/CassandraStoreQuery.java @@ -181,16 +181,40 @@ public Set getArtifactStoresByPkgAndType( String packageType, return result.getItems(); } - public Set getAllArtifactStores() + public ListDtxArtifactStoreDTO getAllArtifactStores( String page ) { - BoundStatement bound = preparedArtifactStoresQuery.bind(); + + if (!page.isEmpty()) { + PagingState currentPage = PagingState.fromString( page ); + bound.setPagingState( currentPage ); + } + ResultSet result = session.execute( bound ); + PagingState nextPage = result.getExecutionInfo().getPagingState(); + int remaining = result.getAvailableWithoutFetching(); + + if (!page.isEmpty()) { + remaining = Math.min( remaining, config.cassandraPageSize ); + } + Set dtxArtifactStoreSet = new HashSet<>(); - result.forEach( row -> dtxArtifactStoreSet.add( toDtxArtifactStore( row ) ) ); + for (Row row: result) + { + dtxArtifactStoreSet.add( toDtxArtifactStore( row ) ); + if (--remaining == 0) { + break; + } + } + + return new ListDtxArtifactStoreDTO( dtxArtifactStoreSet, page, nextPage.toString() ); + } - return dtxArtifactStoreSet; + public Set getAllArtifactStores() + { + ListDtxArtifactStoreDTO result = getAllArtifactStores(""); + return result.getItems(); } public Boolean isEmpty() diff --git a/src/main/java/org/commonjava/indy/service/repository/data/mem/MemoryStoreDataManager.java b/src/main/java/org/commonjava/indy/service/repository/data/mem/MemoryStoreDataManager.java index a769dc2..8796f7c 100644 --- a/src/main/java/org/commonjava/indy/service/repository/data/mem/MemoryStoreDataManager.java +++ b/src/main/java/org/commonjava/indy/service/repository/data/mem/MemoryStoreDataManager.java @@ -121,6 +121,12 @@ public Set getAllArtifactStores() return new HashSet<>( stores.values() ); } + @Override + public ListArtifactStoreDTO getAllArtifactStores(String page) + { + return new ListArtifactStoreDTO(new HashSet<>( stores.values() ), page, ""); + } + @Override public Map getArtifactStoresByKey() { diff --git a/src/main/java/org/commonjava/indy/service/repository/jaxrs/version/StatsHandler.java b/src/main/java/org/commonjava/indy/service/repository/jaxrs/version/StatsHandler.java index d3a9e2d..a7f2356 100644 --- a/src/main/java/org/commonjava/indy/service/repository/jaxrs/version/StatsHandler.java +++ b/src/main/java/org/commonjava/indy/service/repository/jaxrs/version/StatsHandler.java @@ -15,6 +15,7 @@ */ package org.commonjava.indy.service.repository.jaxrs.version; +import jakarta.ws.rs.QueryParam; import org.commonjava.indy.service.repository.controller.StatsController; import org.commonjava.indy.service.repository.exception.IndyWorkflowException; import org.commonjava.indy.service.repository.jaxrs.ResponseHelper; @@ -114,14 +115,14 @@ public Response getPackageTypeNames() @Path( "/all-endpoints" ) @GET @Produces( APPLICATION_JSON ) - public Response getAllEndpoints( @Context final UriInfo uriInfo ) + public Response getAllEndpoints( @QueryParam( "page") String page, @Context final UriInfo uriInfo ) { Response response; try { final String baseUri = uriInfo.getBaseUriBuilder().path( Constants.API_PREFIX ).build().toString(); - final EndpointViewListing listing = statsController.getEndpointsListing( baseUri, uriFormatter ); + final EndpointViewListing listing = statsController.getEndpointsListing( baseUri, uriFormatter, page ); response = responseHelper.formatOkResponseWithJsonEntity( listing ); logger.info( "\n\n\n\n\n\n{} Sent all-endpoints:\n\n{}\n\n\n\n\n\n\n", new Date(), listing );