diff --git a/filers/default/pom.xml b/filers/default/pom.xml
index 8a97354e33..8cae3c5d30 100644
--- a/filers/default/pom.xml
+++ b/filers/default/pom.xml
@@ -52,5 +52,14 @@
org.commonjava.indy
indy-subsys-metrics
+
+ org.commonjava.indy
+ indy-subsys-jaxrs
+
+
+ io.swagger
+ swagger-annotations
+ compile
+
diff --git a/filers/default/src/main/java/org/commonjava/indy/filer/def/DefaultGalleyStorageProvider.java b/filers/default/src/main/java/org/commonjava/indy/filer/def/DefaultGalleyStorageProvider.java
index 3e13dc6d5d..a0b106bcea 100644
--- a/filers/default/src/main/java/org/commonjava/indy/filer/def/DefaultGalleyStorageProvider.java
+++ b/filers/default/src/main/java/org/commonjava/indy/filer/def/DefaultGalleyStorageProvider.java
@@ -23,17 +23,13 @@
import org.commonjava.indy.content.IndyChecksumAdvisor;
import org.commonjava.indy.content.SpecialPathSetProducer;
import org.commonjava.indy.filer.def.conf.DefaultStorageProviderConfiguration;
-import org.commonjava.maven.galley.cache.pathmapped.PathMappedCacheProviderConfig;
-import org.commonjava.o11yphant.metrics.api.Meter;
-import org.commonjava.o11yphant.metrics.api.MetricRegistry;
-import org.commonjava.o11yphant.metrics.api.Timer;
-import org.commonjava.o11yphant.metrics.DefaultMetricsManager;
-import org.commonjava.indy.subsys.metrics.conf.IndyMetricsConfig;
import org.commonjava.indy.subsys.cassandra.CassandraClient;
import org.commonjava.indy.subsys.cassandra.config.CassandraConfig;
+import org.commonjava.indy.subsys.metrics.conf.IndyMetricsConfig;
import org.commonjava.maven.galley.GalleyInitException;
import org.commonjava.maven.galley.cache.CacheProviderFactory;
import org.commonjava.maven.galley.cache.partyline.PartyLineCacheProviderFactory;
+import org.commonjava.maven.galley.cache.pathmapped.PathMappedCacheProviderConfig;
import org.commonjava.maven.galley.cache.pathmapped.PathMappedCacheProviderFactory;
import org.commonjava.maven.galley.config.TransportManagerConfig;
import org.commonjava.maven.galley.io.ChecksummingTransferDecorator;
@@ -54,10 +50,14 @@
import org.commonjava.maven.galley.spi.io.TransferDecorator;
import org.commonjava.maven.galley.spi.metrics.TimingProvider;
import org.commonjava.maven.galley.transport.htcli.UploadMetadataGenTransferDecorator;
+import org.commonjava.o11yphant.metrics.DefaultMetricsManager;
+import org.commonjava.o11yphant.metrics.api.Meter;
+import org.commonjava.o11yphant.metrics.api.MetricRegistry;
+import org.commonjava.o11yphant.metrics.api.Timer;
import org.commonjava.storage.pathmapped.config.DefaultPathMappedStorageConfig;
import org.commonjava.storage.pathmapped.config.PathMappedStorageConfig;
-import org.commonjava.storage.pathmapped.pathdb.datastax.CassandraPathDB;
import org.commonjava.storage.pathmapped.metrics.MeasuredPathDB;
+import org.commonjava.storage.pathmapped.pathdb.datastax.CassandraPathDB;
import org.commonjava.storage.pathmapped.spi.PathDB;
import org.commonjava.storage.pathmapped.spi.PhysicalStore;
import org.slf4j.Logger;
@@ -75,6 +75,7 @@
import java.util.List;
import java.util.Map;
import java.util.Optional;
+import java.util.Set;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
@@ -82,10 +83,15 @@
import java.util.function.Function;
import static org.apache.commons.lang3.StringUtils.isBlank;
-import static org.commonjava.o11yphant.metrics.util.NameUtils.getSupername;
import static org.commonjava.maven.galley.io.checksum.ChecksummingDecoratorAdvisor.ChecksumAdvice.CALCULATE_AND_WRITE;
import static org.commonjava.maven.galley.io.checksum.ChecksummingDecoratorAdvisor.ChecksumAdvice.NO_DECORATE;
-import static org.commonjava.storage.pathmapped.pathdb.datastax.util.CassandraPathDBUtils.*;
+import static org.commonjava.o11yphant.metrics.util.NameUtils.getSupername;
+import static org.commonjava.storage.pathmapped.pathdb.datastax.util.CassandraPathDBUtils.PROP_CASSANDRA_HOST;
+import static org.commonjava.storage.pathmapped.pathdb.datastax.util.CassandraPathDBUtils.PROP_CASSANDRA_KEYSPACE;
+import static org.commonjava.storage.pathmapped.pathdb.datastax.util.CassandraPathDBUtils.PROP_CASSANDRA_PASS;
+import static org.commonjava.storage.pathmapped.pathdb.datastax.util.CassandraPathDBUtils.PROP_CASSANDRA_PORT;
+import static org.commonjava.storage.pathmapped.pathdb.datastax.util.CassandraPathDBUtils.PROP_CASSANDRA_REPLICATION_FACTOR;
+import static org.commonjava.storage.pathmapped.pathdb.datastax.util.CassandraPathDBUtils.PROP_CASSANDRA_USER;
@SuppressWarnings( "unused" )
@ApplicationScoped
@@ -148,6 +154,8 @@ public class DefaultGalleyStorageProvider
private CacheProviderFactory cacheProviderFactory;
+ PathDB pathDB = null;
+
public DefaultGalleyStorageProvider()
{
}
@@ -205,7 +213,6 @@ private void setupCacheProviderFactory()
logger.info( "Initializing Cassandra-based path-mapping database for content storage." );
- PathDB pathDB = null;
PathMappedStorageConfig pathMappedStorageConfig = getPathMappedStorageConfig();
if ( cassandraClient != null )
{
@@ -411,4 +418,35 @@ public synchronized CacheProvider getCacheProvider()
return cacheProvider;
}
+
+ public Set getProxySitesCache()
+ {
+ return pathDB.getProxySitesCache();
+ }
+
+ public List getProxySiteList()
+ {
+ return pathDB.getProxySiteList();
+ }
+
+ public boolean isProxySite( String site )
+ {
+ return pathDB.isProxySite( site );
+ }
+
+ public void saveProxySite( String site )
+ {
+ pathDB.saveProxySite( site );
+ }
+
+ public void deleteProxySite( String site )
+ {
+ pathDB.deleteProxySite( site );
+ }
+
+ public void deleteAllProxySite()
+ {
+ pathDB.deleteAllProxySite();
+ }
+
}
diff --git a/filers/default/src/main/java/org/commonjava/indy/filer/def/jaxrs/ProxySiteAccessResource.java b/filers/default/src/main/java/org/commonjava/indy/filer/def/jaxrs/ProxySiteAccessResource.java
new file mode 100644
index 0000000000..886086157c
--- /dev/null
+++ b/filers/default/src/main/java/org/commonjava/indy/filer/def/jaxrs/ProxySiteAccessResource.java
@@ -0,0 +1,90 @@
+package org.commonjava.indy.filer.def.jaxrs;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiResponse;
+import io.swagger.annotations.ApiResponses;
+import org.commonjava.indy.bind.jaxrs.IndyResources;
+import org.commonjava.indy.bind.jaxrs.util.REST;
+import org.commonjava.indy.filer.def.DefaultGalleyStorageProvider;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.enterprise.context.ApplicationScoped;
+import javax.inject.Inject;
+import javax.servlet.http.HttpServletRequest;
+import javax.ws.rs.DELETE;
+import javax.ws.rs.GET;
+import javax.ws.rs.PUT;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.StreamingOutput;
+import javax.ws.rs.core.UriInfo;
+import java.util.List;
+import java.util.Set;
+
+@Api( value = "Proxy Site Cache Access and Storage" )
+@Path( "/api/proxysite" )
+@ApplicationScoped
+@REST
+public class ProxySiteAccessResource
+ implements IndyResources
+{
+ protected final Logger logger = LoggerFactory.getLogger( getClass() );
+
+ @Inject
+ DefaultGalleyStorageProvider provider;
+
+ @ApiOperation( "Retrieve All Proxy Sites." )
+ @ApiResponses( { @ApiResponse( code = 404, message = "Site is not available" ),
+ @ApiResponse( code = 200, response = StreamingOutput.class, message = "Site stream" ), } )
+ @Produces( "application/json" )
+ @Path( "/all" )
+ @GET
+ public Response doGet( @Context final UriInfo uriInfo, @Context final HttpServletRequest request )
+ {
+ Set cache = provider.getProxySitesCache();
+ logger.info( "Proxy Site Cache list: {}", cache );
+ List result = provider.getProxySiteList();
+ return ( result == null || result.isEmpty() ) ?
+ Response.status( Response.Status.NOT_FOUND ).build() :
+ Response.ok( result ).build();
+ }
+
+ @ApiOperation( "Store Proxy Site." )
+ @ApiResponses( { @ApiResponse( code = 201, message = "Site was stored successfully" ) } )
+ @PUT
+ @Path( "/{site}" )
+ public Response doCreate( @PathParam( "site" ) final String site, @Context final HttpServletRequest request,
+ @Context final UriInfo uriInfo )
+ {
+ provider.saveProxySite( site );
+ return Response.created( uriInfo.getRequestUri() ).build();
+ }
+
+ @ApiOperation( "Delete Proxy Site." )
+ @ApiResponse( code = 200, message = "Delete complete." )
+ @Path( "/{site}" )
+ @DELETE
+ public Response doDelete( @PathParam( "site" ) final String site )
+ {
+ provider.deleteProxySite( site );
+ provider.getProxySitesCache().remove( site );
+ return Response.ok().build();
+ }
+
+ @ApiOperation( "Delete All Proxy Sites." )
+ @ApiResponse( code = 200, message = "Delete complete." )
+ @Path( "/all" )
+ @DELETE
+ public Response doDeleteAll()
+ {
+ provider.deleteAllProxySite();
+ provider.getProxySitesCache().clear();
+ return Response.ok().build();
+ }
+
+}
diff --git a/pom.xml b/pom.xml
index e00e6a97fc..6db5568f6c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -94,7 +94,7 @@
1.5
3.4.0
1.1.4
- 1.17
+ 1.18-SNAPSHOT
1.24
3.2.1
diff --git a/test/fixtures-core/src/main/java/org/commonjava/indy/test/fixture/core/TestCacheProvider.java b/test/fixtures-core/src/main/java/org/commonjava/indy/test/fixture/core/TestCacheProvider.java
index 9699e52dc7..12c04ecc4a 100644
--- a/test/fixtures-core/src/main/java/org/commonjava/indy/test/fixture/core/TestCacheProvider.java
+++ b/test/fixtures-core/src/main/java/org/commonjava/indy/test/fixture/core/TestCacheProvider.java
@@ -31,6 +31,7 @@
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
+import java.util.Set;
public class TestCacheProvider
implements CacheProvider
@@ -299,4 +300,22 @@ public void stopReporting()
{
lockingSupport.stopReporting();
}
+
+ @Override
+ public Set getProxySitesCache()
+ {
+ return null;
+ }
+
+ @Override
+ public boolean isProxySite( String s )
+ {
+ return false;
+ }
+
+ @Override
+ public void saveProxySite( String s )
+ {
+
+ }
}