diff options
Diffstat (limited to 'catalog-fe/src/main/java/org/openecomp/sdc/fe/impl/PluginStatusBL.java')
-rw-r--r-- | catalog-fe/src/main/java/org/openecomp/sdc/fe/impl/PluginStatusBL.java | 60 |
1 files changed, 57 insertions, 3 deletions
diff --git a/catalog-fe/src/main/java/org/openecomp/sdc/fe/impl/PluginStatusBL.java b/catalog-fe/src/main/java/org/openecomp/sdc/fe/impl/PluginStatusBL.java index 14b76d4679..a2b0adb4fe 100644 --- a/catalog-fe/src/main/java/org/openecomp/sdc/fe/impl/PluginStatusBL.java +++ b/catalog-fe/src/main/java/org/openecomp/sdc/fe/impl/PluginStatusBL.java @@ -26,28 +26,46 @@ import org.apache.http.HttpStatus; import org.apache.http.client.config.RequestConfig; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpHead; +import org.apache.http.config.Registry; +import org.apache.http.config.RegistryBuilder; +import org.apache.http.conn.socket.ConnectionSocketFactory; +import org.apache.http.conn.socket.PlainConnectionSocketFactory; +import org.apache.http.conn.ssl.NoopHostnameVerifier; +import org.apache.http.conn.ssl.SSLConnectionSocketFactory; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; +import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; + import org.openecomp.sdc.common.log.wrappers.Logger; import org.openecomp.sdc.exception.InvalidArgumentException; import org.openecomp.sdc.fe.config.ConfigurationManager; import org.openecomp.sdc.fe.config.PluginsConfiguration; import org.openecomp.sdc.fe.config.PluginsConfiguration.Plugin; +import org.openecomp.sdc.fe.utils.JettySSLUtils; import java.io.IOException; +import java.security.GeneralSecurityException; public class PluginStatusBL { private static final Logger log = Logger.getLogger(PluginStatusBL.class.getName()); + private static final String MAX_CONNECTION_POOL = "maxOutgoingConnectionPoolTotal"; + private static final String MAX_ROUTE_POOL = "maxOutgoingPerRoute"; private final Gson gson; - private final CloseableHttpClient client; + private CloseableHttpClient client; private final PluginsConfiguration pluginsConfiguration; private RequestConfig requestConfig; public PluginStatusBL() { this.pluginsConfiguration = ConfigurationManager.getConfigurationManager().getPluginsConfiguration(); - this.client = HttpClients.createDefault(); this.gson = new GsonBuilder().setPrettyPrinting().create(); + // check if we have secure connections in the plugin list, if not - we won't bother with it + try { + this.client = getPooledClient(this.hasSecuredPlugins()); + } catch (Exception e){ + log.error("Could not initialize the Https client: {}", e.getMessage()); + log.debug("Exception:",e); + } } public PluginStatusBL(CloseableHttpClient client) { @@ -58,6 +76,39 @@ public class PluginStatusBL { } + private boolean hasSecuredPlugins() { + if (this.getPluginsList() != null) { + return pluginsConfiguration.getPluginsList().stream() + .anyMatch(plugin -> plugin.getPluginDiscoveryUrl().toLowerCase().startsWith("https")); + } + return false; + + } + + private CloseableHttpClient getPooledClient(boolean isSecured) throws GeneralSecurityException, IOException { + final PoolingHttpClientConnectionManager poolingConnManager; + if (!isSecured) { + poolingConnManager + = new PoolingHttpClientConnectionManager(); + } else { + SSLConnectionSocketFactory s = new SSLConnectionSocketFactory( + JettySSLUtils.getSslContext(), + new NoopHostnameVerifier()); + + Registry<ConnectionSocketFactory> registry = RegistryBuilder.<ConnectionSocketFactory>create() + .register("http", new PlainConnectionSocketFactory()) + .register("https", s) + .build(); + poolingConnManager + = new PoolingHttpClientConnectionManager(registry); + } + int maxTotal = System.getProperties().containsKey(MAX_CONNECTION_POOL) ? Integer.parseInt(System.getProperty(MAX_CONNECTION_POOL)) : 5; + int routeMax = System.getProperties().containsKey(MAX_ROUTE_POOL) ? Integer.parseInt(System.getProperty(MAX_ROUTE_POOL)) : 20; + poolingConnManager.setMaxTotal(maxTotal); + poolingConnManager.setDefaultMaxPerRoute(routeMax); + return HttpClients.custom().setConnectionManager(poolingConnManager).setSSLHostnameVerifier(new NoopHostnameVerifier()).build(); + } + public String getPluginsList() { String result = null; @@ -107,7 +158,10 @@ public class PluginStatusBL { HttpHead head = new HttpHead(plugin.getPluginDiscoveryUrl()); head.setConfig(this.requestConfig); - + if (this.client == null) { + log.debug("The plugin {} will not run because https is not configured on the FE server",plugin.getPluginId()); + return false; + } try (CloseableHttpResponse response = this.client.execute(head)) { result = response != null && response.getStatusLine().getStatusCode() == HttpStatus.SC_OK; log.debug("The plugin {} is {} with result {}", plugin.getPluginId(), (result ? "online" : "offline"), result); |