Skip to content

Commit

Permalink
basic proxy support - to be enhanced with config page and more option…
Browse files Browse the repository at this point in the history
…s, such as windows proxies, passwords, etc. Intended to be reviewed by Joe Sondow
  • Loading branch information
krogeman committed Sep 16, 2012
1 parent a6a127e commit 3a66770
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 8 deletions.
13 changes: 10 additions & 3 deletions grails-app/services/com/netflix/asgard/AwsClientService.groovy
Expand Up @@ -15,6 +15,7 @@
*/
package com.netflix.asgard

import com.amazonaws.ClientConfiguration
import com.amazonaws.services.autoscaling.AmazonAutoScalingClient
import com.amazonaws.services.cloudwatch.AmazonCloudWatchClient
import com.amazonaws.services.ec2.AmazonEC2Client
Expand Down Expand Up @@ -43,13 +44,16 @@ class AwsClientService implements InitializingBean {
static transactional = false

def grailsApplication
def secretService
def secretService
def configService

/**
* Interface names mapped to ClientTypes wrapper objects. For each interface name, a real and fake concrete class
* type should be provided.
*/
private Map<String, Class> interfaceSimpleNamesToAwsClientClasses
private Map<String, Class> interfaceSimpleNamesToAwsClientClasses

private ClientConfiguration clientConfiguration

void afterPropertiesSet() {
interfaceSimpleNamesToAwsClientClasses = [
Expand All @@ -64,11 +68,14 @@ class AwsClientService implements InitializingBean {
AmazonSNS: concrete(AmazonSNSClient, MockAmazonSnsClient),
AmazonSQS: concrete(AmazonSQSClient, MockAmazonSqsClient)
]
clientConfiguration = new ClientConfiguration()
clientConfiguration.proxyHost = configService.proxyHost
clientConfiguration.proxyPort = configService.proxyPort
}

public <T> T create(Class<T> interfaceType) {
Class implementationType = interfaceSimpleNamesToAwsClientClasses[interfaceType.simpleName]
implementationType.newInstance(secretService.awsCredentials) as T
implementationType.newInstance(secretService.awsCredentials, clientConfiguration) as T
}

Class concrete(Class real, Class fake) {
Expand Down
20 changes: 19 additions & 1 deletion grails-app/services/com/netflix/asgard/ConfigService.groovy
Expand Up @@ -252,7 +252,25 @@ class ConfigService {
*/
int getHttpConnPoolMaxForRoute() {
grailsApplication.config.httpConnPool?.maxSize ?: 5
}
}

/** HTTP proxy settings */

String getProxyHost() {
grailsApplication.config.proxy?.host ?: null
}

int getProxyPort() {
grailsApplication.config.proxy?.port ?: -1
}

String getProxyUserName() {
grailsApplication.config.proxy?.userName ?: null
}

String getProxyPassword() {
grailsApplication.config.proxy?.password ?: null
}

/**
* @return Default Security Groups.
Expand Down
14 changes: 10 additions & 4 deletions grails-app/services/com/netflix/asgard/RestClientService.groovy
Expand Up @@ -20,16 +20,18 @@ import grails.converters.JSON
import grails.converters.XML
import groovy.util.slurpersupport.GPathResult
import java.util.concurrent.TimeUnit
import org.apache.http.HttpEntity
import org.apache.http.HttpEntity
import org.apache.http.HttpHost
import org.apache.http.HttpResponse
import org.apache.http.client.HttpClient
import org.apache.http.client.HttpClient
import org.apache.http.client.entity.UrlEncodedFormEntity
import org.apache.http.client.methods.HttpDelete
import org.apache.http.client.methods.HttpGet
import org.apache.http.client.methods.HttpPost
import org.apache.http.client.methods.HttpPut
import org.apache.http.client.methods.HttpUriRequest
import org.apache.http.conn.params.ConnManagerPNames
import org.apache.http.conn.params.ConnManagerPNames
import org.apache.http.conn.params.ConnRoutePNames
import org.apache.http.entity.StringEntity
import org.apache.http.impl.client.DefaultHttpClient
import org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager
Expand All @@ -49,7 +51,11 @@ class RestClientService implements InitializingBean {
final ThreadSafeClientConnManager connectionManager = new ThreadSafeClientConnManager()
final HttpClient httpClient = new DefaultHttpClient(connectionManager)

public void afterPropertiesSet() throws Exception {
public void afterPropertiesSet() throws Exception {
if (configService.proxyHost) {
final HttpHost proxy = new HttpHost(configService.proxyHost, configService.proxyPort, "http")
httpClient.params.setParameter(ConnRoutePNames.DEFAULT_PROXY, proxy)
}
// Switch to ClientPNames.CONN_MANAGER_TIMEOUT when upgrading http-client 4.2
httpClient.params.setLongParameter(ConnManagerPNames.TIMEOUT, configService.httpConnPoolTimeout)
connectionManager.maxTotal = configService.httpConnPoolMaxSize
Expand Down

0 comments on commit 3a66770

Please sign in to comment.