Adding the aws lb extension
Project: http://git-wip-us.apache.org/repos/asf/stratos/repo Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/16034523 Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/16034523 Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/16034523 Branch: refs/heads/stratos-4.1.x Commit: 16034523aeb063f4d841ee2d0278a93613d670d1 Parents: b382f89 Author: gayangunarathne <[email protected]> Authored: Sat Oct 10 12:51:29 2015 +0530 Committer: gayangunarathne <[email protected]> Committed: Sat Oct 10 12:51:52 2015 +0530 ---------------------------------------------------------------------- .../load-balancer/aws-extension/INSTALL.md | 45 - .../load-balancer/aws-extension/README.md | 5 - extensions/load-balancer/aws-extension/pom.xml | 119 --- .../aws-extension/src/main/assembly/bin.xml | 91 -- .../aws-extension/src/main/bin/aws-extension.sh | 44 - .../aws-extension/src/main/conf/aws.properties | 15 - .../aws-extension/src/main/conf/jndi.properties | 22 - .../src/main/conf/log4j.properties | 40 - .../src/main/conf/thrift-client-config.xml | 27 - .../aws/extension/AWSExtensionContext.java | 101 -- .../apache/stratos/aws/extension/AWSHelper.java | 926 ------------------- .../stratos/aws/extension/AWSLoadBalancer.java | 305 ------ .../aws/extension/AWSStatisticsReader.java | 89 -- .../apache/stratos/aws/extension/Constants.java | 56 -- .../org/apache/stratos/aws/extension/Main.java | 90 -- .../aws-extension/src/main/license/LICENSE | 481 ---------- .../aws-extension/src/main/notice/NOTICE | 395 -------- .../src/main/security/client-truststore.jks | Bin 35240 -> 0 bytes .../modules/aws-extension/INSTALL.md | 45 + .../modules/aws-extension/README.md | 5 + .../load-balancer/modules/aws-extension/pom.xml | 119 +++ .../aws-extension/src/main/assembly/bin.xml | 91 ++ .../aws-extension/src/main/bin/aws-extension.sh | 44 + .../aws-extension/src/main/conf/aws.properties | 15 + .../aws-extension/src/main/conf/jndi.properties | 22 + .../src/main/conf/log4j.properties | 40 + .../src/main/conf/thrift-client-config.xml | 27 + .../aws/extension/AWSExtensionContext.java | 101 ++ .../apache/stratos/aws/extension/AWSHelper.java | 926 +++++++++++++++++++ .../stratos/aws/extension/AWSLoadBalancer.java | 305 ++++++ .../aws/extension/AWSStatisticsReader.java | 89 ++ .../apache/stratos/aws/extension/Constants.java | 56 ++ .../org/apache/stratos/aws/extension/Main.java | 90 ++ .../aws-extension/src/main/license/LICENSE | 481 ++++++++++ .../aws-extension/src/main/notice/NOTICE | 395 ++++++++ .../src/main/security/client-truststore.jks | Bin 0 -> 35240 bytes extensions/load-balancer/pom.xml | 1 + 37 files changed, 2852 insertions(+), 2851 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/stratos/blob/16034523/extensions/load-balancer/aws-extension/INSTALL.md ---------------------------------------------------------------------- diff --git a/extensions/load-balancer/aws-extension/INSTALL.md b/extensions/load-balancer/aws-extension/INSTALL.md deleted file mode 100644 index 0ab671f..0000000 --- a/extensions/load-balancer/aws-extension/INSTALL.md +++ /dev/null @@ -1,45 +0,0 @@ - # - # Licensed to the Apache Software Foundation (ASF) under one - # or more contributor license agreements. See the NOTICE file - # distributed with this work for additional information - # regarding copyright ownership. The ASF licenses this file - # to you under the Apache License, Version 2.0 (the - # "License"); you may not use this file except in compliance - # with the License. You may obtain a copy of the License at - # - # http://www.apache.org/licenses/LICENSE-2.0 - # - # Unless required by applicable law or agreed to in writing, - # software distributed under the License is distributed on an - # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - # KIND, either express or implied. See the License for the - # specific language governing permissions and limitations - # under the License. - # - -# Installing Apache Stratos AWS Extension - -Apache Stratos AWS Extension could be used for integrating AWS load balancer with Apache Stratos. Please follow -below steps to proceed with the installation: - -1. Extract org.apache.stratos.aws.extension-<version>.zip to a desired location: <aws-extension-home>. - -2. Open <aws-extension-home>/conf/aws-credentials.conf file in text editor and update AWS access key and secret key information. - -3. Open <aws-extension-home>/bin/aws-extension.sh file in a text editor and update following system properties: - ``` - # Enable/disable cep statistics publisher: - -Dcep.stats.publisher.enabled=false - - # If cep statistics publisher is enabled define the following properties: - -Dthrift.receiver.ip=127.0.0.1 - -Dthrift.receiver.port=7615 - -Dnetwork.partition.id=network-partition-1 - ``` - -4. Open <aws-extension-home>/conf/jndi.properties file in a text editor and update message broker information: - ``` - java.naming.provider.url=tcp://localhost:61616 - ``` -5. Run <aws-extension-home>/bin/aws-extension.sh as the root user. - http://git-wip-us.apache.org/repos/asf/stratos/blob/16034523/extensions/load-balancer/aws-extension/README.md ---------------------------------------------------------------------- diff --git a/extensions/load-balancer/aws-extension/README.md b/extensions/load-balancer/aws-extension/README.md deleted file mode 100644 index 75fa622..0000000 --- a/extensions/load-balancer/aws-extension/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# Apache Stratos AWS Extension - -Apache Stratos AWS extension is a load balancer extension for Amazon Web Services (AWS). It is an executable program -which can manage AWS laod balancers according to the topology, composite application model, tenant application signups -and domain mapping information received from Stratos via the message broker. http://git-wip-us.apache.org/repos/asf/stratos/blob/16034523/extensions/load-balancer/aws-extension/pom.xml ---------------------------------------------------------------------- diff --git a/extensions/load-balancer/aws-extension/pom.xml b/extensions/load-balancer/aws-extension/pom.xml deleted file mode 100644 index 65dc8fb..0000000 --- a/extensions/load-balancer/aws-extension/pom.xml +++ /dev/null @@ -1,119 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- - ~ Licensed to the Apache Software Foundation (ASF) under one - ~ or more contributor license agreements. See the NOTICE file - ~ distributed with this work for additional information - ~ regarding copyright ownership. The ASF licenses this file - ~ to you under the Apache License, Version 2.0 (the - ~ "License"); you may not use this file except in compliance - ~ with the License. You may obtain a copy of the License at - ~ - ~ http://www.apache.org/licenses/LICENSE-2.0 - ~ - ~ Unless required by applicable law or agreed to in writing, - ~ software distributed under the License is distributed on an - ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - ~ KIND, either express or implied. See the License for the - ~ specific language governing permissions and limitations - ~ under the License. - --> - -<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - <modelVersion>4.0.0</modelVersion> - - <parent> - <groupId>org.apache.stratos</groupId> - <artifactId>stratos-load-balancer-extensions</artifactId> - <version>4.1.4-SNAPSHOT</version> - </parent> - - <artifactId>org.apache.stratos.aws.extension</artifactId> - <name>Apache Stratos - AWS Extension</name> - <description>Apache Stratos AWS Extension for Load Balancing</description> - <dependencies> - <dependency> - <groupId>org.slf4j</groupId> - <artifactId>slf4j-log4j12</artifactId> - <version>1.7.5</version> - </dependency> - <dependency> - <groupId>org.apache.stratos</groupId> - <artifactId>org.apache.stratos.common</artifactId> - <version>${project.version}</version> - </dependency> - <dependency> - <groupId>org.apache.stratos</groupId> - <artifactId>org.apache.stratos.messaging</artifactId> - <version>${project.version}</version> - </dependency> - <dependency> - <groupId>org.apache.stratos</groupId> - <artifactId>org.apache.stratos.load.balancer.extension.api</artifactId> - <version>${project.version}</version> - </dependency> - <dependency> - <groupId>commons-io</groupId> - <artifactId>commons-io</artifactId> - <version>2.0</version> - </dependency> - <dependency> - <groupId>org.apache.velocity</groupId> - <artifactId>velocity</artifactId> - <version>1.7</version> - </dependency> - <dependency> - <groupId>org.wso2.andes.wso2</groupId> - <artifactId>andes-client</artifactId> - <version>0.13.wso2v8</version> - </dependency> - <dependency> - <groupId>com.amazonaws</groupId> - <artifactId>aws-java-sdk</artifactId> - <version>1.8.8</version> - </dependency> - <dependency> - <groupId>org.apache.httpcomponents.wso2</groupId> - <artifactId>httpclient</artifactId> - <version>4.2.5.wso2v1</version> - </dependency> - </dependencies> - - <build> - <plugins> - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-jar-plugin</artifactId> - <version>2.4</version> - <configuration> - <archive> - <manifest> - <mainClass>org.apache.stratos.aws.extension.Main</mainClass> - </manifest> - </archive> - </configuration> - </plugin> - <plugin> - <artifactId>maven-assembly-plugin</artifactId> - <configuration> - <descriptors> - <descriptor>src/main/assembly/bin.xml</descriptor> - </descriptors> - <archiverConfig> - <fileMode>420</fileMode> - <directoryMode>493</directoryMode> - <defaultDirectoryMode>493</defaultDirectoryMode> - </archiverConfig> - <appendAssemblyId>false</appendAssemblyId> - </configuration> - <executions> - <execution> - <phase>package</phase> - <goals> - <goal>attached</goal> - </goals> - </execution> - </executions> - </plugin> - </plugins> - </build> -</project> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/stratos/blob/16034523/extensions/load-balancer/aws-extension/src/main/assembly/bin.xml ---------------------------------------------------------------------- diff --git a/extensions/load-balancer/aws-extension/src/main/assembly/bin.xml b/extensions/load-balancer/aws-extension/src/main/assembly/bin.xml deleted file mode 100644 index ba0ad12..0000000 --- a/extensions/load-balancer/aws-extension/src/main/assembly/bin.xml +++ /dev/null @@ -1,91 +0,0 @@ -<!-- - ~ Licensed to the Apache Software Foundation (ASF) under one - ~ or more contributor license agreements. See the NOTICE file - ~ distributed with this work for additional information - ~ regarding copyright ownership. The ASF licenses this file - ~ to you under the Apache License, Version 2.0 (the - ~ "License"); you may not use this file except in compliance - ~ with the License. You may obtain a copy of the License at - ~ - ~ http://www.apache.org/licenses/LICENSE-2.0 - ~ - ~ Unless required by applicable law or agreed to in writing, - ~ software distributed under the License is distributed on an - ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - ~ KIND, either express or implied. See the License for the - ~ specific language governing permissions and limitations - ~ under the License. - --> - -<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd"> - <id>bin</id> - <formats> - <format>zip</format> - </formats> - <fileSets> - <fileSet> - <directory>${project.basedir}/src/main/bin</directory> - <outputDirectory>/bin</outputDirectory> - <fileMode>0755</fileMode> - <includes> - <include>aws-extension.sh</include> - </includes> - </fileSet> - <fileSet> - <directory>${project.basedir}/src/main/conf</directory> - <outputDirectory>/conf</outputDirectory> - <fileMode>0600</fileMode> - <includes> - <include>jndi.properties</include> - <include>log4j.properties</include> - <include>thrift-client-config.xml</include> - <include>aws.properties</include> - </includes> - </fileSet> - <fileSet> - <directory>${project.basedir}/src/main/security</directory> - <outputDirectory>/security</outputDirectory> - <fileMode>0600</fileMode> - <includes> - <include>client-truststore.jks</include> - </includes> - </fileSet> - <fileSet> - <directory>${project.basedir}</directory> - <outputDirectory>/</outputDirectory> - <fileMode>0600</fileMode> - <includes> - <include>DISCLAIMER</include> - <include>README*</include> - <include>LICENSE*</include> - <include>INSTALL*</include> - </includes> - </fileSet> - <fileSet> - <directory>${project.basedir}/src/main/license</directory> - <outputDirectory>/</outputDirectory> - <fileMode>0600</fileMode> - </fileSet> - <fileSet> - <directory>${project.basedir}/src/main/notice</directory> - <outputDirectory>/</outputDirectory> - <fileMode>0600</fileMode> - </fileSet> - </fileSets> - <dependencySets> - <dependencySet> - <outputDirectory>/lib</outputDirectory> - <excludes> - <exclude>*:icu4j*</exclude> - <exclude>*:jaxen*</exclude> - <exclude>*:jboss-transaction-api*</exclude> - <exclude>*:wrapper*</exclude> - <exclude>*:xom*</exclude> - </excludes> - <useProjectArtifact>true</useProjectArtifact> - <scope>runtime</scope> - </dependencySet> - </dependencySets> -</assembly> http://git-wip-us.apache.org/repos/asf/stratos/blob/16034523/extensions/load-balancer/aws-extension/src/main/bin/aws-extension.sh ---------------------------------------------------------------------- diff --git a/extensions/load-balancer/aws-extension/src/main/bin/aws-extension.sh b/extensions/load-balancer/aws-extension/src/main/bin/aws-extension.sh deleted file mode 100755 index 19936ae..0000000 --- a/extensions/load-balancer/aws-extension/src/main/bin/aws-extension.sh +++ /dev/null @@ -1,44 +0,0 @@ -#!/bin/bash -# -------------------------------------------------------------- -# -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# -# -------------------------------------------------------------- - -echo "Starting aws extension..." -script_path="$( cd -P "$( dirname "$SOURCE" )" && pwd )/`dirname $0`" -lib_path=${script_path}/../lib/ -class_path=`echo ${lib_path}/*.jar | tr ' ' ':'` -properties="-Djndi.properties.dir=${script_path}/../conf - -Dlog4j.properties.file.path=${script_path}/../conf/log4j.properties - -Daws.properties.file=${script_path}/../conf/aws.properties - -Djavax.net.ssl.trustStore=${script_path}/../security/client-truststore.jks - -Djavax.net.ssl.trustStorePassword=wso2carbon - -Dthrift.client.config.file.path=${script_path}/../conf/thrift-client-config.xml - -Dcep.stats.publisher.enabled=false - -Dthrift.receiver.ip=127.0.0.1 - -Dthrift.receiver.port=7615 - -Dnetwork.partition.id=network-partition-1 - -Dcluster.id=cluster-1 - -Dservice.name=service-1" - - -# Uncomment below line to enable remote debugging -#debug="-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005" - -java -cp "${class_path}" ${properties} ${debug} org.apache.stratos.aws.extension.Main $* http://git-wip-us.apache.org/repos/asf/stratos/blob/16034523/extensions/load-balancer/aws-extension/src/main/conf/aws.properties ---------------------------------------------------------------------- diff --git a/extensions/load-balancer/aws-extension/src/main/conf/aws.properties b/extensions/load-balancer/aws-extension/src/main/conf/aws.properties deleted file mode 100644 index 2bb2879..0000000 --- a/extensions/load-balancer/aws-extension/src/main/conf/aws.properties +++ /dev/null @@ -1,15 +0,0 @@ -access-key= -secret-key= -# load-balancer-prefix should contain only alphabets and dashes and should not exceed 25 characters. -load-balancer-prefix=LB- -# security group will be created if does not exist. Should contain only ASCII characters and should not exceed 255 characters. -load-balancer-security-group-name=lb-security-group -# CIDR IP which can be set as allowed source IP of incoming requests for security group mentioned in 'load-balancer-security-group-name' -# 0.0.0.0/0 allows all IPs -allowed-cidr-ip=0.0.0.0/0 -# Internet Protocol allowed for incoming requests for security group mentioned in 'load-balancer-security-group-name'. -# Comma separated e.g. tcp,udp -allowed-protocols=tcp -# statistics-interval denotes the interval in seconds for which statistics are gathered to calculate request in flight count. -# This must be multiple of 60. -statistics-interval=60 http://git-wip-us.apache.org/repos/asf/stratos/blob/16034523/extensions/load-balancer/aws-extension/src/main/conf/jndi.properties ---------------------------------------------------------------------- diff --git a/extensions/load-balancer/aws-extension/src/main/conf/jndi.properties b/extensions/load-balancer/aws-extension/src/main/conf/jndi.properties deleted file mode 100644 index 21d7420..0000000 --- a/extensions/load-balancer/aws-extension/src/main/conf/jndi.properties +++ /dev/null @@ -1,22 +0,0 @@ -# -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# - -connectionfactoryName=TopicConnectionFactory -java.naming.provider.url=tcp://localhost:61616 -java.naming.factory.initial=org.apache.activemq.jndi.ActiveMQInitialContextFactory http://git-wip-us.apache.org/repos/asf/stratos/blob/16034523/extensions/load-balancer/aws-extension/src/main/conf/log4j.properties ---------------------------------------------------------------------- diff --git a/extensions/load-balancer/aws-extension/src/main/conf/log4j.properties b/extensions/load-balancer/aws-extension/src/main/conf/log4j.properties deleted file mode 100644 index fe9ca61..0000000 --- a/extensions/load-balancer/aws-extension/src/main/conf/log4j.properties +++ /dev/null @@ -1,40 +0,0 @@ -# -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# - -# Set root logger level and appenders -log4j.rootLogger=INFO, CONSOLE_APPENDER, FILE_APPENDER - -# CONSOLE_APPENDER is set to be a ConsoleAppender. -log4j.appender.CONSOLE_APPENDER=org.apache.log4j.ConsoleAppender - -# The standard error log where all the warnings, errors and fatal errors will be logged -log4j.appender.FILE_APPENDER=org.apache.log4j.FileAppender -log4j.appender.FILE_APPENDER.File=logs/aws-extension.log -log4j.appender.FILE_APPENDER.layout=org.apache.log4j.PatternLayout -log4j.appender.FILE_APPENDER.layout.ConversionPattern=%d{ISO8601} [%X{ip}-%X{host}] [%t] %5p %c{1} %m%n -log4j.appender.FILE_APPENDER.threshold=DEBUG - -# CONSOLE_APPENDER uses PatternLayout. -log4j.appender.CONSOLE_APPENDER.layout=org.apache.log4j.PatternLayout -log4j.appender.CONSOLE_APPENDER.layout.ConversionPattern=[%d{ISO8601}] %5p - [%c{1}] %m%n - -log4j.logger.org.apache.stratos.aws.extension=INFO -log4j.logger.org.apache.stratos.load.balancer.extension.api=INFO -log4j.logger.org.apache.stratos.messaging=INFO -log4j.logger.org.wso2.andes.client=ERROR \ No newline at end of file http://git-wip-us.apache.org/repos/asf/stratos/blob/16034523/extensions/load-balancer/aws-extension/src/main/conf/thrift-client-config.xml ---------------------------------------------------------------------- diff --git a/extensions/load-balancer/aws-extension/src/main/conf/thrift-client-config.xml b/extensions/load-balancer/aws-extension/src/main/conf/thrift-client-config.xml deleted file mode 100644 index 5cacada..0000000 --- a/extensions/load-balancer/aws-extension/src/main/conf/thrift-client-config.xml +++ /dev/null @@ -1,27 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- - ~ Licensed to the Apache Software Foundation (ASF) under one - ~ or more contributor license agreements. See the NOTICE file - ~ distributed with this work for additional information - ~ regarding copyright ownership. The ASF licenses this file - ~ to you under the Apache License, Version 2.0 (the - ~ "License"); you may not use this file except in compliance - ~ with the License. You may obtain a copy of the License at - ~ - ~ http://www.apache.org/licenses/LICENSE-2.0 - ~ - ~ Unless required by applicable law or agreed to in writing, - ~ software distributed under the License is distributed on an - ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - ~ KIND, either express or implied. See the License for the - ~ specific language governing permissions and limitations - ~ under the License. - --> - -<!-- Apache thrift client configuration for publishing statistics to WSO2 CEP --> -<thriftClientConfiguration> - <username>admin</username> - <password>admin</password> - <ip>localhost</ip> - <port>7611</port> -</thriftClientConfiguration> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/stratos/blob/16034523/extensions/load-balancer/aws-extension/src/main/java/org/apache/stratos/aws/extension/AWSExtensionContext.java ---------------------------------------------------------------------- diff --git a/extensions/load-balancer/aws-extension/src/main/java/org/apache/stratos/aws/extension/AWSExtensionContext.java b/extensions/load-balancer/aws-extension/src/main/java/org/apache/stratos/aws/extension/AWSExtensionContext.java deleted file mode 100644 index d3da969..0000000 --- a/extensions/load-balancer/aws-extension/src/main/java/org/apache/stratos/aws/extension/AWSExtensionContext.java +++ /dev/null @@ -1,101 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.apache.stratos.aws.extension; - -import org.apache.commons.lang.StringUtils; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -/** - * AWS Load Balancer context to read and store system properties. - */ -public class AWSExtensionContext { - private static final Log log = LogFactory.getLog(AWSExtensionContext.class); - private static volatile AWSExtensionContext context; - - private boolean cepStatsPublisherEnabled; - private String thriftReceiverIp; - private String thriftReceiverPort; - private String networkPartitionId; - private String clusterId; - private String serviceName; - - private AWSExtensionContext() { - this.cepStatsPublisherEnabled = Boolean.getBoolean(Constants.CEP_STATS_PUBLISHER_ENABLED); - this.thriftReceiverIp = System.getProperty(Constants.THRIFT_RECEIVER_IP); - this.thriftReceiverPort = System.getProperty(Constants.THRIFT_RECEIVER_PORT); - this.networkPartitionId = System.getProperty(Constants.NETWORK_PARTITION_ID); - this.clusterId = System.getProperty(Constants.CLUSTER_ID); - this.serviceName = System.getProperty(Constants.SERVICE_NAME); - - if (log.isDebugEnabled()) { - log.debug(Constants.CEP_STATS_PUBLISHER_ENABLED + " = " + cepStatsPublisherEnabled); - log.debug(Constants.THRIFT_RECEIVER_IP + " = " + thriftReceiverIp); - log.debug(Constants.THRIFT_RECEIVER_PORT + " = " + thriftReceiverPort); - log.debug(Constants.NETWORK_PARTITION_ID + " = " + networkPartitionId); - log.debug(Constants.CLUSTER_ID + " = " + clusterId); - } - } - - public static AWSExtensionContext getInstance() { - if (context == null) { - synchronized (AWSExtensionContext.class) { - if (context == null) { - context = new AWSExtensionContext(); - } - } - } - return context; - } - - public void validate() { - validateSystemProperty(Constants.CEP_STATS_PUBLISHER_ENABLED); - validateSystemProperty(Constants.CLUSTER_ID); - - if (cepStatsPublisherEnabled) { - validateSystemProperty(Constants.THRIFT_RECEIVER_IP); - validateSystemProperty(Constants.THRIFT_RECEIVER_PORT); - validateSystemProperty(Constants.NETWORK_PARTITION_ID); - } - } - - private void validateSystemProperty(String propertyName) { - String value = System.getProperty(propertyName); - if (StringUtils.isEmpty(value)) { - throw new RuntimeException("System property was not found: " + propertyName); - } - } - - public boolean isCEPStatsPublisherEnabled() { - return cepStatsPublisherEnabled; - } - - public String getNetworkPartitionId() { - return networkPartitionId; - } - - public String getClusterId() { - return clusterId; - } - - public String getServiceName() { - return serviceName; - } -} http://git-wip-us.apache.org/repos/asf/stratos/blob/16034523/extensions/load-balancer/aws-extension/src/main/java/org/apache/stratos/aws/extension/AWSHelper.java ---------------------------------------------------------------------- diff --git a/extensions/load-balancer/aws-extension/src/main/java/org/apache/stratos/aws/extension/AWSHelper.java b/extensions/load-balancer/aws-extension/src/main/java/org/apache/stratos/aws/extension/AWSHelper.java deleted file mode 100644 index a8164e7..0000000 --- a/extensions/load-balancer/aws-extension/src/main/java/org/apache/stratos/aws/extension/AWSHelper.java +++ /dev/null @@ -1,926 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.apache.stratos.aws.extension; - -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Date; -import java.util.HashSet; -import java.util.List; -import java.util.Properties; -import java.util.Set; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.atomic.AtomicInteger; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.apache.stratos.load.balancer.common.domain.*; -import org.apache.stratos.load.balancer.extension.api.exception.LoadBalancerExtensionException; -import org.joda.time.DateTime; -import org.joda.time.DateTimeZone; - -import com.amazonaws.AmazonClientException; -import com.amazonaws.ClientConfiguration; -import com.amazonaws.auth.BasicAWSCredentials; -import com.amazonaws.services.cloudwatch.AmazonCloudWatchClient; -import com.amazonaws.services.cloudwatch.model.Datapoint; -import com.amazonaws.services.cloudwatch.model.Dimension; -import com.amazonaws.services.cloudwatch.model.GetMetricStatisticsRequest; -import com.amazonaws.services.cloudwatch.model.GetMetricStatisticsResult; -import com.amazonaws.services.ec2.AmazonEC2Client; -import com.amazonaws.services.ec2.model.AuthorizeSecurityGroupIngressRequest; -import com.amazonaws.services.ec2.model.CreateSecurityGroupRequest; -import com.amazonaws.services.ec2.model.CreateSecurityGroupResult; -import com.amazonaws.services.ec2.model.DescribeSecurityGroupsRequest; -import com.amazonaws.services.ec2.model.DescribeSecurityGroupsResult; -import com.amazonaws.services.ec2.model.IpPermission; -import com.amazonaws.services.ec2.model.SecurityGroup; -import com.amazonaws.services.elasticloadbalancing.AmazonElasticLoadBalancingClient; -import com.amazonaws.services.elasticloadbalancing.model.*; - -public class AWSHelper { - private String awsAccessKey; - private String awsSecretKey; - private String lbPrefix; - private String lbSecurityGroupName; - private String lbSecurityGroupDescription; - private String allowedCidrIpForLBSecurityGroup; - private int statisticsInterval; - - private AtomicInteger lbSequence; - - private List<String> allowedProtocolsForLBSecurityGroup; - - private ConcurrentHashMap<String, String> regionToSecurityGroupIdMap; - - private BasicAWSCredentials awsCredentials; - private ClientConfiguration clientConfiguration; - - AmazonElasticLoadBalancingClient elbClient; - AmazonEC2Client ec2Client; - private AmazonCloudWatchClient cloudWatchClient; - - private static final Log log = LogFactory.getLog(AWSHelper.class); - - public AWSHelper() throws LoadBalancerExtensionException { - // Read values for awsAccessKey, awsSecretKey etc. from config file - - String awsPropertiesFile = System - .getProperty(Constants.AWS_PROPERTIES_FILE); - - Properties properties = new Properties(); - - InputStream inputStream = null; - - try { - inputStream = new FileInputStream(awsPropertiesFile); - - properties.load(inputStream); - - this.awsAccessKey = properties - .getProperty(Constants.AWS_ACCESS_KEY); - this.awsSecretKey = properties - .getProperty(Constants.AWS_SECRET_KEY); - - if (this.awsAccessKey.isEmpty() || this.awsSecretKey.isEmpty()) { - throw new LoadBalancerExtensionException( - "Invalid AWS credentials."); - } - - this.lbPrefix = properties.getProperty(Constants.LB_PREFIX); - - if (this.lbPrefix.isEmpty() - || this.lbPrefix.length() > Constants.LOAD_BALANCER_PREFIX_MAX_LENGTH) { - throw new LoadBalancerExtensionException( - "Invalid load balancer prefix."); - } - - lbSequence = new AtomicInteger(1); - - this.lbSecurityGroupName = properties - .getProperty(Constants.LOAD_BALANCER_SECURITY_GROUP_NAME); - - if (this.lbSecurityGroupName.isEmpty() - || this.lbSecurityGroupName.length() > Constants.SECURITY_GROUP_NAME_MAX_LENGTH) { - throw new LoadBalancerExtensionException( - "Invalid load balancer security group name."); - } - - this.allowedCidrIpForLBSecurityGroup = properties - .getProperty(Constants.ALLOWED_CIDR_IP_KEY); - - if (this.allowedCidrIpForLBSecurityGroup.isEmpty()) { - throw new LoadBalancerExtensionException( - "Invalid allowed CIDR IP."); - } - - String allowedProtocols = properties - .getProperty(Constants.ALLOWED_PROTOCOLS); - - if (allowedProtocols.isEmpty()) { - throw new LoadBalancerExtensionException( - "Please specify at least one Internet protocol."); - } - - String[] protocols = allowedProtocols.split(","); - - this.allowedProtocolsForLBSecurityGroup = new ArrayList<String>(); - - for (String protocol : protocols) { - this.allowedProtocolsForLBSecurityGroup.add(protocol); - } - - String interval = properties - .getProperty(Constants.STATISTICS_INTERVAL); - - if (interval == null || interval.isEmpty()) { - this.statisticsInterval = Constants.STATISTICS_INTERVAL_MULTIPLE_OF; - } else { - try { - this.statisticsInterval = Integer.parseInt(interval); - - if (this.statisticsInterval - % Constants.STATISTICS_INTERVAL_MULTIPLE_OF != 0) { - this.statisticsInterval = Constants.STATISTICS_INTERVAL_MULTIPLE_OF; - } - } catch (NumberFormatException e) { - log.warn("Invalid statistics interval. Setting it to 15."); - this.statisticsInterval = 15; - } - } - - this.lbSecurityGroupDescription = Constants.LOAD_BALANCER_SECURITY_GROUP_DESCRIPTION; - - regionToSecurityGroupIdMap = new ConcurrentHashMap<String, String>(); - - awsCredentials = new BasicAWSCredentials(awsAccessKey, awsSecretKey); - clientConfiguration = new ClientConfiguration(); - - elbClient = new AmazonElasticLoadBalancingClient(awsCredentials, - clientConfiguration); - - ec2Client = new AmazonEC2Client(awsCredentials, clientConfiguration); - - cloudWatchClient = new AmazonCloudWatchClient(awsCredentials, - clientConfiguration); - - } catch (IOException e) { - log.error("Error reading aws configuration file."); - throw new LoadBalancerExtensionException( - "Error reading aws configuration file.", e); - } finally { - try { - inputStream.close(); - } catch (Exception e) { - log.warn("Failed to close input stream to aws configuration file."); - } - } - } - - public int getStatisticsInterval() { - return statisticsInterval; - } - - public int getNextLBSequence() { - return lbSequence.getAndIncrement(); - } - - public String getLbSecurityGroupName() { - return lbSecurityGroupName; - } - - public List<String> getAllowedProtocolsForLBSecurityGroup() { - return allowedProtocolsForLBSecurityGroup; - } - - /** - * Creates a load balancer and returns its DNS name. Useful when a new - * cluster is added. - * - * @param name - * of the load balancer to be created - * @param listeners - * to be attached to the load balancer - * @param region - * in which the load balancer needs to be created - * @return DNS name of newly created load balancer - * @throws LoadBalancerExtensionException - */ - public String createLoadBalancer(String name, List<Listener> listeners, - String region) throws LoadBalancerExtensionException { - - log.info("Creating load balancer " + name); - - CreateLoadBalancerRequest createLoadBalancerRequest = new CreateLoadBalancerRequest( - name); - - createLoadBalancerRequest.setListeners(listeners); - - Set<String> availabilityZones = new HashSet<String>(); - availabilityZones.add(getAvailabilityZoneFromRegion(region)); - - createLoadBalancerRequest.setAvailabilityZones(availabilityZones); - - try { - String securityGroupId = getSecurityGroupIdForRegion(region); - - List<String> securityGroups = new ArrayList<String>(); - securityGroups.add(securityGroupId); - - createLoadBalancerRequest.setSecurityGroups(securityGroups); - - elbClient.setEndpoint(String.format( - Constants.ELB_ENDPOINT_URL_FORMAT, region)); - - CreateLoadBalancerResult clbResult = elbClient - .createLoadBalancer(createLoadBalancerRequest); - - return clbResult.getDNSName(); - - } catch (AmazonClientException e) { - throw new LoadBalancerExtensionException( - "Could not create load balancer " + name, e); - } - } - - /** - * Deletes the load balancer with the name provided. Useful when a cluster, - * with which this load balancer was associated, is removed. - * - * @param loadBalancerName - * to be deleted - * @param region - * of the laod balancer - */ - public void deleteLoadBalancer(String loadBalancerName, String region) { - - log.info("Deleting load balancer " + loadBalancerName); - - DeleteLoadBalancerRequest deleteLoadBalancerRequest = new DeleteLoadBalancerRequest(); - deleteLoadBalancerRequest.setLoadBalancerName(loadBalancerName); - - try { - elbClient.setEndpoint(String.format( - Constants.ELB_ENDPOINT_URL_FORMAT, region)); - - elbClient.deleteLoadBalancer(deleteLoadBalancerRequest); - log.info("Deleted load balancer " + loadBalancerName); - } catch (AmazonClientException e) { - log.error("Could not delete load balancer : " + loadBalancerName, e); - } - } - - /** - * Attaches provided instances to the load balancer. Useful when new - * instances get added to the cluster with which this load balancer is - * associated. - * - * @param loadBalancerName - * @param instances - * to attached to the load balancer - * @param region - * of the load balancer - */ - public void registerInstancesToLoadBalancer(String loadBalancerName, - List<Instance> instances, String region) { - - log.info("Registering following instance(s) to load balancer " - + loadBalancerName); - - for (Instance instance : instances) { - log.info(instance.getInstanceId()); - } - - RegisterInstancesWithLoadBalancerRequest registerInstancesWithLoadBalancerRequest = new RegisterInstancesWithLoadBalancerRequest( - loadBalancerName, instances); - - try { - elbClient.setEndpoint(String.format( - Constants.ELB_ENDPOINT_URL_FORMAT, region)); - - elbClient - .registerInstancesWithLoadBalancer(registerInstancesWithLoadBalancerRequest); - - } catch (AmazonClientException e) { - log.error("Could not register instances to load balancer " - + loadBalancerName, e); - } - } - - /** - * Detaches provided instances from the load balancer, associated with some - * cluster. Useful when instances are removed from the cluster with which - * this load balancer is associated. - * - * @param loadBalancerName - * @param instances - * to be de-registered from load balancer - * @param region - * of the load balancer - */ - public void deregisterInstancesFromLoadBalancer(String loadBalancerName, - List<Instance> instances, String region) { - - log.info("De-registering following instance(s) from load balancer " - + loadBalancerName); - - for (Instance instance : instances) { - log.info(instance.getInstanceId()); - } - - DeregisterInstancesFromLoadBalancerRequest deregisterInstancesFromLoadBalancerRequest = new DeregisterInstancesFromLoadBalancerRequest( - loadBalancerName, instances); - - try { - elbClient.setEndpoint(String.format( - Constants.ELB_ENDPOINT_URL_FORMAT, region)); - - elbClient - .deregisterInstancesFromLoadBalancer(deregisterInstancesFromLoadBalancerRequest); - - } catch (AmazonClientException e) { - log.error("Could not de-register instances from load balancer " - + loadBalancerName, e); - } - } - - /** - * Returns description of the load balancer which is helpful in determining - * instances, listeners associated with load balancer - * - * @param loadBalancerName - * @param region - * of the load balancer - * @return description of the load balancer - */ - private LoadBalancerDescription getLoadBalancerDescription( - String loadBalancerName, String region) { - - List<String> loadBalancers = new ArrayList<String>(); - loadBalancers.add(loadBalancerName); - - DescribeLoadBalancersRequest describeLoadBalancersRequest = new DescribeLoadBalancersRequest( - loadBalancers); - - try { - elbClient.setEndpoint(String.format( - Constants.ELB_ENDPOINT_URL_FORMAT, region)); - - DescribeLoadBalancersResult result = elbClient - .describeLoadBalancers(describeLoadBalancersRequest); - - if (result.getLoadBalancerDescriptions() != null - && result.getLoadBalancerDescriptions().size() > 0) - return result.getLoadBalancerDescriptions().get(0); - } catch (AmazonClientException e) { - log.error("Could not find description of load balancer " - + loadBalancerName, e); - } - - return null; - } - - /** - * Returns instances attached to the load balancer. Useful when deciding if - * all attached instances are required or some should be detached. - * - * @param loadBalancerName - * @param region - * @return list of instances attached - */ - public List<Instance> getAttachedInstances(String loadBalancerName, - String region) { - try { - LoadBalancerDescription lbDescription = getLoadBalancerDescription( - loadBalancerName, region); - - if (lbDescription == null) { - log.warn("Could not find description of load balancer " - + loadBalancerName); - return null; - } - - return lbDescription.getInstances(); - - } catch (AmazonClientException e) { - log.error("Could not find instances attached load balancer " - + loadBalancerName, e); - return null; - } - } - - /** - * Returns all the listeners attached to the load balancer. Useful while - * deciding if all the listeners are necessary or some should be removed. - * - * @param loadBalancerName - * @param region - * @return list of instances attached to load balancer - */ - public List<Listener> getAttachedListeners(String loadBalancerName, - String region) { - try { - LoadBalancerDescription lbDescription = getLoadBalancerDescription( - loadBalancerName, region); - - if (lbDescription == null) { - log.warn("Could not find description of load balancer " - + loadBalancerName); - return null; - } - - List<Listener> listeners = new ArrayList<Listener>(); - - List<ListenerDescription> listenerDescriptions = lbDescription - .getListenerDescriptions(); - - for (ListenerDescription listenerDescription : listenerDescriptions) { - listeners.add(listenerDescription.getListener()); - } - - return listeners; - - } catch (AmazonClientException e) { - log.error("Could not find description of load balancer " - + loadBalancerName); - return null; - } - - } - - /** - * Checks if the security group is already present in the given region. If - * yes, then returns its group id. If not, present the returns null. - * - * @param groupName - * to be checked for presence. - * @param region - * @return id of the security group - */ - public String getSecurityGroupId(String groupName, String region) { - if (groupName == null || groupName.isEmpty()) { - return null; - } - - DescribeSecurityGroupsRequest describeSecurityGroupsRequest = new DescribeSecurityGroupsRequest(); - - List<String> groupNames = new ArrayList<String>(); - groupNames.add(groupName); - - describeSecurityGroupsRequest.setGroupNames(groupNames); - - try { - ec2Client.setEndpoint(String.format( - Constants.EC2_ENDPOINT_URL_FORMAT, region)); - - DescribeSecurityGroupsResult describeSecurityGroupsResult = ec2Client - .describeSecurityGroups(describeSecurityGroupsRequest); - - List<SecurityGroup> securityGroups = describeSecurityGroupsResult - .getSecurityGroups(); - - if (securityGroups != null && securityGroups.size() > 0) { - return securityGroups.get(0).getGroupId(); - } - } catch (AmazonClientException e) { - log.debug("Could not describe security groups.", e); - } - - return null; - } - - /** - * Creates security group with the given name in the given region - * - * @param groupName - * to be created - * @param description - * @param region - * in which the security group to be created - * @return Id of the security group created - * @throws LoadBalancerExtensionException - */ - public String createSecurityGroup(String groupName, String description, - String region) throws LoadBalancerExtensionException { - if (groupName == null || groupName.isEmpty()) { - throw new LoadBalancerExtensionException( - "Invalid Security Group Name."); - } - - CreateSecurityGroupRequest createSecurityGroupRequest = new CreateSecurityGroupRequest(); - createSecurityGroupRequest.setGroupName(groupName); - createSecurityGroupRequest.setDescription(description); - - try { - ec2Client.setEndpoint(String.format( - Constants.EC2_ENDPOINT_URL_FORMAT, region)); - - CreateSecurityGroupResult createSecurityGroupResult = ec2Client - .createSecurityGroup(createSecurityGroupRequest); - - return createSecurityGroupResult.getGroupId(); - - } catch (AmazonClientException e) { - log.error("Could not create security group.", e); - throw new LoadBalancerExtensionException( - "Could not create security group.", e); - } - - } - - /** - * Adds inbound rule to the security group which allows users to access load - * balancer at specified port and using the specified protocol. Port - * specified should be a proxy port mentioned in the port mappings of the - * cartridge. - * - * @param groupId - * to which this rule to be added - * @param region - * of the security group - * @param protocol - * with which load balancer can be accessed - * @param port - * at which load balancer can be accessed - * @throws LoadBalancerExtensionException - */ - public void addInboundRuleToSecurityGroup(String groupId, String region, - String protocol, int port) throws LoadBalancerExtensionException { - if (groupId == null || groupId.isEmpty()) { - throw new LoadBalancerExtensionException( - "Invalid security group Id for addInboundRuleToSecurityGroup."); - } - - boolean ruleAlreadyPresent = false; - - DescribeSecurityGroupsRequest describeSecurityGroupsRequest = new DescribeSecurityGroupsRequest(); - - List<String> groupIds = new ArrayList<String>(); - groupIds.add(groupId); - - describeSecurityGroupsRequest.setGroupIds(groupIds); - - SecurityGroup secirutyGroup = null; - - try { - ec2Client.setEndpoint(String.format( - Constants.EC2_ENDPOINT_URL_FORMAT, region)); - - DescribeSecurityGroupsResult describeSecurityGroupsResult = ec2Client - .describeSecurityGroups(describeSecurityGroupsRequest); - - List<SecurityGroup> securityGroups = describeSecurityGroupsResult - .getSecurityGroups(); - - if (securityGroups != null && securityGroups.size() > 0) { - secirutyGroup = securityGroups.get(0); - } - } catch (AmazonClientException e) { - log.error("Could not describe security groups.", e); - } - - if (secirutyGroup != null) { - List<IpPermission> existingPermissions = secirutyGroup - .getIpPermissions(); - - IpPermission neededPermission = new IpPermission(); - neededPermission.setFromPort(port); - neededPermission.setToPort(port); - neededPermission.setIpProtocol(protocol); - - Collection<String> ipRanges = new HashSet<String>(); - ipRanges.add(this.allowedCidrIpForLBSecurityGroup); - - neededPermission.setIpRanges(ipRanges); - - if (existingPermissions.contains(neededPermission)) { - ruleAlreadyPresent = true; - } - } - - if (!ruleAlreadyPresent) { - AuthorizeSecurityGroupIngressRequest authorizeSecurityGroupIngressRequest = new AuthorizeSecurityGroupIngressRequest(); - authorizeSecurityGroupIngressRequest.setGroupId(groupId); - authorizeSecurityGroupIngressRequest - .setCidrIp(this.allowedCidrIpForLBSecurityGroup); - authorizeSecurityGroupIngressRequest.setFromPort(port); - authorizeSecurityGroupIngressRequest.setToPort(port); - authorizeSecurityGroupIngressRequest.setIpProtocol(protocol); - - try { - ec2Client.setEndpoint(String.format( - Constants.EC2_ENDPOINT_URL_FORMAT, region)); - - ec2Client - .authorizeSecurityGroupIngress(authorizeSecurityGroupIngressRequest); - - } catch (AmazonClientException e) { - throw new LoadBalancerExtensionException( - "Could not add inbound rule to security group " - + groupId + ".", e); - } - } - } - - /** - * Returns the security group id for the given region if it is already - * present. If it is not already present then creates a new security group - * in that region. - * - * @param region - * @return Id of the security group - * @throws LoadBalancerExtensionException - */ - public String getSecurityGroupIdForRegion(String region) - throws LoadBalancerExtensionException { - if (region == null) - return null; - - if (this.regionToSecurityGroupIdMap.contains(region)) { - return this.regionToSecurityGroupIdMap.get(region); - } else { - // Get the the security group id if it is already present. - String securityGroupId = getSecurityGroupId( - this.lbSecurityGroupName, region); - - if (securityGroupId == null) { - securityGroupId = createSecurityGroup(this.lbSecurityGroupName, - this.lbSecurityGroupDescription, region); - } - - this.regionToSecurityGroupIdMap.put(region, securityGroupId); - - return securityGroupId; - } - } - - /** - * Retrieves the total number of requests that were made to the load - * balancer during the given time interval in the past - * - * @param loadBalancerName - * @param region - * @param timeInterval - * in seconds which must be multiple of 60 - * @return number of requests made - */ - public int getRequestCount(String loadBalancerName, String region, - int timeInterval) { - int count = 0; - - try { - GetMetricStatisticsRequest request = new GetMetricStatisticsRequest(); - request.setMetricName(Constants.REQUEST_COUNT_METRIC_NAME); - request.setNamespace(Constants.CLOUD_WATCH_NAMESPACE_NAME); - - Date currentTime = new DateTime(DateTimeZone.UTC).toDate(); - Date pastTime = new DateTime(DateTimeZone.UTC).minusSeconds( - timeInterval).toDate(); - - request.setStartTime(pastTime); - request.setEndTime(currentTime); - - request.setPeriod(timeInterval); - - HashSet<String> statistics = new HashSet<String>(); - statistics.add(Constants.SUM_STATISTICS_NAME); - request.setStatistics(statistics); - - HashSet<Dimension> dimensions = new HashSet<Dimension>(); - Dimension loadBalancerDimension = new Dimension(); - loadBalancerDimension - .setName(Constants.LOAD_BALANCER_DIMENTION_NAME); - loadBalancerDimension.setValue(loadBalancerName); - dimensions.add(loadBalancerDimension); - request.setDimensions(dimensions); - - cloudWatchClient.setEndpoint(String.format( - Constants.CLOUD_WATCH_ENDPOINT_URL_FORMAT, region)); - - GetMetricStatisticsResult result = cloudWatchClient - .getMetricStatistics(request); - - List<Datapoint> dataPoints = result.getDatapoints(); - - if (dataPoints != null && dataPoints.size() > 0) { - count = dataPoints.get(0).getSum().intValue(); - } - - } catch (AmazonClientException e) { - log.error( - "Could not get request count statistics of load balancer " - + loadBalancerName, e); - } - - return count; - } - - /** - * Retrieves total number of responses generated by all instances attached - * to the load balancer during the time interval in the past. - * - * @param loadBalancerName - * @param region - * @param timeInterval - * in seconds which must be multiple of 60 - * @return number of responses generated - */ - public int getAllResponsesCount(String loadBalancerName, String region, - int timeInterval) { - int total = 0; - - Date currentTime = new DateTime(DateTimeZone.UTC).toDate(); - Date pastTime = new DateTime(DateTimeZone.UTC).minusSeconds( - timeInterval).toDate(); - - total += getResponseCountForMetric(loadBalancerName, region, - Constants.HTTP_RESPONSE_2XX, pastTime, currentTime, - timeInterval); - total += getResponseCountForMetric(loadBalancerName, region, - Constants.HTTP_RESPONSE_3XX, pastTime, currentTime, - timeInterval); - total += getResponseCountForMetric(loadBalancerName, region, - Constants.HTTP_RESPONSE_4XX, pastTime, currentTime, - timeInterval); - total += getResponseCountForMetric(loadBalancerName, region, - Constants.HTTP_RESPONSE_5XX, pastTime, currentTime, - timeInterval); - - return total; - } - - /** - * Retrieves the number of responses generated for a particular response - * code like 2XX, 3XX, 4XX, 5XX - * - * @param loadBalancerName - * @param region - * @param metricName - * which is one among HTTPCode_Backend_2XX or - * HTTPCode_Backend_3XX or HTTPCode_Backend_4XX or - * HTTPCode_Backend_5XX - * @param startTime - * of the window to be scanned - * @param endTime - * of the window to be scanned - * @param timeInterval - * in seconds - * @return number for response for this metric - */ - public int getResponseCountForMetric(String loadBalancerName, - String region, String metricName, Date startTime, Date endTime, - int timeInterval) { - int count = 0; - - try { - GetMetricStatisticsRequest request = new GetMetricStatisticsRequest(); - request.setMetricName(metricName); - request.setNamespace(Constants.CLOUD_WATCH_NAMESPACE_NAME); - - request.setStartTime(startTime); - request.setEndTime(endTime); - - request.setPeriod(timeInterval); - - HashSet<String> statistics = new HashSet<String>(); - statistics.add(Constants.SUM_STATISTICS_NAME); - request.setStatistics(statistics); - - HashSet<Dimension> dimensions = new HashSet<Dimension>(); - Dimension loadBalancerDimension = new Dimension(); - loadBalancerDimension - .setName(Constants.LOAD_BALANCER_DIMENTION_NAME); - loadBalancerDimension.setValue(loadBalancerName); - dimensions.add(loadBalancerDimension); - request.setDimensions(dimensions); - - cloudWatchClient.setEndpoint(String.format( - Constants.CLOUD_WATCH_ENDPOINT_URL_FORMAT, region)); - - GetMetricStatisticsResult result = cloudWatchClient - .getMetricStatistics(request); - - List<Datapoint> dataPoints = result.getDatapoints(); - - if (dataPoints != null && dataPoints.size() > 0) { - count = dataPoints.get(0).getSum().intValue(); - } - - } catch (AmazonClientException e) { - log.error("Could not get the statistics for metric " + metricName - + " of load balancer " + loadBalancerName, e); - } - - return count; - } - - /** - * Returns the Listeners required for the service. Listeners are derived - * from the proxy port, port and protocol values of the service. - * - * @param service - * @return list of listeners required for the service - */ - public List<Listener> getRequiredListeners(Member member) { - List<Listener> listeners = new ArrayList<Listener>(); - - Collection<Port> ports = member.getPorts(); - - for (Port port : ports) { - int instancePort = port.getValue(); - int proxyPort = port.getProxy(); - String protocol = port.getProtocol().toUpperCase(); - String instanceProtocol = protocol; - - Listener listener = new Listener(protocol, proxyPort, instancePort); - listener.setInstanceProtocol(instanceProtocol); - - listeners.add(listener); - } - - return listeners; - } - - /** - * Constructs name of the load balancer to be associated with the cluster - * - * @param clusterId - * @return name of the load balancer - * @throws LoadBalancerExtensionException - */ - public String generateLoadBalancerName() - throws LoadBalancerExtensionException { - String name = null; - - name = lbPrefix + getNextLBSequence(); - - if (name.length() > Constants.LOAD_BALANCER_NAME_MAX_LENGTH) - throw new LoadBalancerExtensionException( - "Load balanacer name length (32 characters) exceeded"); - - return name; - } - - /** - * Extract instance id in IaaS side from member instance name - * - * @param memberInstanceName - * @return instance id in IaaS - */ - public String getAWSInstanceName(String memberInstanceName) { - if (memberInstanceName.contains("/")) { - return memberInstanceName - .substring(memberInstanceName.indexOf("/") + 1); - } else { - return memberInstanceName; - } - } - - /** - * Extract IaaS region from member instance name - * - * @param memberInstanceName - * @return IaaS region to which member belongs - */ - public String getAWSRegion(String memberInstanceName) { - if (memberInstanceName.contains("/")) { - return memberInstanceName.substring(0, - memberInstanceName.indexOf("/")); - } else { - return null; - } - } - - /** - * Get availability zone from region - * - * @param region - * @return Availability zone of IaaS - */ - public String getAvailabilityZoneFromRegion(String region) { - if (region != null) { - return region + "a"; - } else - return null; - } -} http://git-wip-us.apache.org/repos/asf/stratos/blob/16034523/extensions/load-balancer/aws-extension/src/main/java/org/apache/stratos/aws/extension/AWSLoadBalancer.java ---------------------------------------------------------------------- diff --git a/extensions/load-balancer/aws-extension/src/main/java/org/apache/stratos/aws/extension/AWSLoadBalancer.java b/extensions/load-balancer/aws-extension/src/main/java/org/apache/stratos/aws/extension/AWSLoadBalancer.java deleted file mode 100644 index 4621339..0000000 --- a/extensions/load-balancer/aws-extension/src/main/java/org/apache/stratos/aws/extension/AWSLoadBalancer.java +++ /dev/null @@ -1,305 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.apache.stratos.aws.extension; - -import com.amazonaws.services.elasticloadbalancing.model.Instance; -import com.amazonaws.services.elasticloadbalancing.model.Listener; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.apache.stratos.load.balancer.common.domain.Cluster; -import org.apache.stratos.load.balancer.common.domain.Member; -import org.apache.stratos.load.balancer.common.domain.Service; -import org.apache.stratos.load.balancer.common.domain.Topology; -import org.apache.stratos.load.balancer.extension.api.LoadBalancer; -import org.apache.stratos.load.balancer.extension.api.exception.LoadBalancerExtensionException; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashSet; -import java.util.List; -import java.util.concurrent.ConcurrentHashMap; - -public class AWSLoadBalancer implements LoadBalancer { - - private static final Log log = LogFactory.getLog(AWSLoadBalancer.class); - - // A map <clusterId, load balancer info> to store load balancer information - // against the cluster id - private static ConcurrentHashMap<String, LoadBalancerInfo> clusterIdToLoadBalancerMap = new ConcurrentHashMap<String, LoadBalancerInfo>(); - - // Object used to invoke methods related to AWS API - private AWSHelper awsHelper; - - public AWSLoadBalancer() throws LoadBalancerExtensionException { - awsHelper = new AWSHelper(); - } - - /* - * configure method iterates over topology and configures the AWS load - * balancers needed. Configuration may involve creating a new load balancer - * for a cluster, updating existing load balancers or deleting unwanted load - * balancers. - */ - public boolean configure(Topology topology) - throws LoadBalancerExtensionException { - - log.info("AWS load balancer extension is being reconfigured."); - - HashSet<String> activeClusters = new HashSet<String>(); - - for (Service service : topology.getServices()) { - for (Cluster cluster : service.getClusters()) { - // Check if a load balancer is created for this cluster - if (clusterIdToLoadBalancerMap.containsKey(cluster - .getClusterId())) { - // A load balancer is already present for this cluster - // Get the load balancer and update it. - - if (log.isDebugEnabled()) { - log.debug("Load balancer for cluster " - + cluster.getClusterId() - + " is already present."); - } - - LoadBalancerInfo loadBalancerInfo = clusterIdToLoadBalancerMap - .get(cluster.getClusterId()); - - String loadBalancerName = loadBalancerInfo.getName(); - String region = loadBalancerInfo.getRegion(); - - // Get all the instances attached - // Attach newly added instances to load balancer - - // attachedInstances list is useful in finding out what - // all new instances which - // should be attached to this load balancer. - List<Instance> attachedInstances = awsHelper - .getAttachedInstances(loadBalancerName, region); - - // clusterMembers stores all the members of a cluster. - Collection<Member> clusterMembers = cluster.getMembers(); - - if (clusterMembers.size() > 0) { - activeClusters.add(cluster.getClusterId()); - - List<Instance> instancesToAddToLoadBalancer = new ArrayList<Instance>(); - - for (Member member : clusterMembers) { - // if instance id of member is not in - // attachedInstances - // add this to instancesToAddToLoadBalancer - Instance instance = new Instance( - awsHelper.getAWSInstanceName(member - .getInstanceId())); - - if (attachedInstances == null - || !attachedInstances.contains(instance)) { - instancesToAddToLoadBalancer.add(instance); - - if (log.isDebugEnabled()) { - log.debug("Instance " - + awsHelper - .getAWSInstanceName(member - .getInstanceId()) - + " needs to be registered to load balancer " - + loadBalancerName); - } - - } - } - - if (instancesToAddToLoadBalancer.size() > 0) - awsHelper.registerInstancesToLoadBalancer( - loadBalancerName, - instancesToAddToLoadBalancer, region); - } - - } else { - // Create a new load balancer for this cluster - Collection<Member> clusterMembers = cluster.getMembers(); - - if (clusterMembers.size() > 0) { - // a unique load balancer name with user-defined - // prefix and a sequence number. - String loadBalancerName = awsHelper - .generateLoadBalancerName(); - - String region = awsHelper.getAWSRegion(clusterMembers - .iterator().next().getInstanceId()); - - // list of AWS listeners obtained using port - // mappings of one of the members of the cluster. - List<Listener> listenersForThisCluster = awsHelper - .getRequiredListeners(clusterMembers.iterator() - .next()); - - // DNS name of load balancer which was created. - // This is used in the domain mapping of this - // cluster. - String loadBalancerDNSName = awsHelper - .createLoadBalancer(loadBalancerName, - listenersForThisCluster, region); - - // Add the inbound rule the security group of the load - // balancer - // For each listener, add a new rule with load - // balancer port as allowed protocol in the security - // group. - for (Listener listener : listenersForThisCluster) { - int port = listener.getLoadBalancerPort(); - - for (String protocol : awsHelper - .getAllowedProtocolsForLBSecurityGroup()) { - awsHelper - .addInboundRuleToSecurityGroup( - awsHelper.getSecurityGroupId( - awsHelper - .getLbSecurityGroupName(), - region), region, - protocol, port); - } - } - - log.info("Load balancer '" + loadBalancerDNSName - + "' created for cluster '" - + cluster.getClusterId()); - - // Register instances in the cluster to load balancer - List<Instance> instances = new ArrayList<Instance>(); - - for (Member member : clusterMembers) { - String instanceId = member.getInstanceId(); - - if (log.isDebugEnabled()) { - log.debug("Instance " - + awsHelper - .getAWSInstanceName(instanceId) - + " needs to be registered to load balancer " - + loadBalancerName); - } - - Instance instance = new Instance(); - instance.setInstanceId(awsHelper - .getAWSInstanceName(instanceId)); - - instances.add(instance); - } - - awsHelper.registerInstancesToLoadBalancer( - loadBalancerName, instances, region); - - LoadBalancerInfo loadBalancerInfo = new LoadBalancerInfo( - loadBalancerName, region); - - clusterIdToLoadBalancerMap.put(cluster.getClusterId(), - loadBalancerInfo); - activeClusters.add(cluster.getClusterId()); - } - } - } - } - - // Find out clusters which were present earlier but are not now. - List<String> clustersToRemoveFromMap = new ArrayList<String>(); - - for (String clusterId : clusterIdToLoadBalancerMap.keySet()) { - if (!activeClusters.contains(clusterId)) { - clustersToRemoveFromMap.add(clusterId); - - if (log.isDebugEnabled()) { - log.debug("Load balancer for cluster " + clusterId - + " needs to be removed."); - } - - } - } - - // Delete load balancers associated with these clusters. - for (String clusterId : clustersToRemoveFromMap) { - // Remove load balancer for this cluster. - awsHelper.deleteLoadBalancer( - clusterIdToLoadBalancerMap.get(clusterId).getName(), - clusterIdToLoadBalancerMap.get(clusterId).getRegion()); - clusterIdToLoadBalancerMap.remove(clusterId); - } - - activeClusters.clear(); - log.info("AWS load balancer extension was reconfigured as per the topology."); - return true; - } - - /* - * start method is called after extension if configured first time. Does - * nothing but logs the message. - */ - public void start() throws LoadBalancerExtensionException { - - log.info("AWS load balancer extension started."); - } - - /* - * reload method is called every time after extension if configured. Does - * nothing but logs the message. - */ - public void reload() throws LoadBalancerExtensionException { - // Check what is appropriate to do here. - log.info("AWS load balancer extension reloaded."); - } - - /* - * stop method deletes load balancers for all clusters in the topology. - */ - public void stop() throws LoadBalancerExtensionException { - // Remove all load balancers - for (LoadBalancerInfo loadBalancerInfo : clusterIdToLoadBalancerMap - .values()) { - // Remove load balancer - awsHelper.deleteLoadBalancer(loadBalancerInfo.getName(), - loadBalancerInfo.getRegion()); - } - } - - public static ConcurrentHashMap<String, LoadBalancerInfo> getClusterIdToLoadBalancerMap() { - return clusterIdToLoadBalancerMap; - } -} - -/** - * Used to store load balancer name and the region in which it is created. This - * helps in finding region while calling API methods to modify/delete a load - * balancer. - */ -class LoadBalancerInfo { - private String name; - private String region; - - public LoadBalancerInfo(String name, String region) { - this.name = name; - this.region = region; - } - - public String getName() { - return name; - } - - public String getRegion() { - return region; - } -} http://git-wip-us.apache.org/repos/asf/stratos/blob/16034523/extensions/load-balancer/aws-extension/src/main/java/org/apache/stratos/aws/extension/AWSStatisticsReader.java ---------------------------------------------------------------------- diff --git a/extensions/load-balancer/aws-extension/src/main/java/org/apache/stratos/aws/extension/AWSStatisticsReader.java b/extensions/load-balancer/aws-extension/src/main/java/org/apache/stratos/aws/extension/AWSStatisticsReader.java deleted file mode 100644 index 55aca3d..0000000 --- a/extensions/load-balancer/aws-extension/src/main/java/org/apache/stratos/aws/extension/AWSStatisticsReader.java +++ /dev/null @@ -1,89 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.apache.stratos.aws.extension; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.apache.stratos.common.constants.StratosConstants; -import org.apache.stratos.load.balancer.common.statistics.LoadBalancerStatisticsReader; -import org.apache.stratos.load.balancer.common.topology.TopologyProvider; -import org.apache.stratos.load.balancer.extension.api.exception.LoadBalancerExtensionException; - -import java.util.concurrent.ConcurrentHashMap; - -/** - * AWS statistics reader. - */ -public class AWSStatisticsReader implements LoadBalancerStatisticsReader { - - private static final Log log = LogFactory.getLog(AWSStatisticsReader.class); - - private TopologyProvider topologyProvider; - private String clusterInstanceId; - - private AWSHelper awsHelper; - - public AWSStatisticsReader(TopologyProvider topologyProvider) - throws LoadBalancerExtensionException { - this.topologyProvider = topologyProvider; - this.clusterInstanceId = System.getProperty( - StratosConstants.CLUSTER_INSTANCE_ID, - StratosConstants.NOT_DEFINED); - - awsHelper = new AWSHelper(); - } - - @Override - public String getClusterInstanceId() { - return clusterInstanceId; - } - - @Override - public int getInFlightRequestCount(String clusterId) { - - int inFlightRequestCount = 0; - - ConcurrentHashMap<String, LoadBalancerInfo> clusterIdToLoadBalancerMap = AWSLoadBalancer - .getClusterIdToLoadBalancerMap(); - - // Check if load balancer info is available for this cluster. - // If yes, then find difference between total requests made to the load balancer and - // total responses generated by instances attached to it. - if (clusterIdToLoadBalancerMap.containsKey(clusterId)) { - LoadBalancerInfo loadBalancerInfo = clusterIdToLoadBalancerMap - .get(clusterId); - - String loadBalancerName = loadBalancerInfo.getName(); - String region = loadBalancerInfo.getRegion(); - - // In flight request count = total requests - total responses - inFlightRequestCount = awsHelper.getRequestCount(loadBalancerName, - region, awsHelper.getStatisticsInterval()) - - awsHelper.getAllResponsesCount(loadBalancerName, region, - awsHelper.getStatisticsInterval()); - - if (inFlightRequestCount < 0) - inFlightRequestCount = 0; - - } - - return inFlightRequestCount; - } -} http://git-wip-us.apache.org/repos/asf/stratos/blob/16034523/extensions/load-balancer/aws-extension/src/main/java/org/apache/stratos/aws/extension/Constants.java ---------------------------------------------------------------------- diff --git a/extensions/load-balancer/aws-extension/src/main/java/org/apache/stratos/aws/extension/Constants.java b/extensions/load-balancer/aws-extension/src/main/java/org/apache/stratos/aws/extension/Constants.java deleted file mode 100644 index 30ada5c..0000000 --- a/extensions/load-balancer/aws-extension/src/main/java/org/apache/stratos/aws/extension/Constants.java +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.apache.stratos.aws.extension; - -/** - * AWS proxy extension constants. - */ -public class Constants { - public static final String CEP_STATS_PUBLISHER_ENABLED = "cep.stats.publisher.enabled"; - public static final String THRIFT_RECEIVER_IP = "thrift.receiver.ip"; - public static final String THRIFT_RECEIVER_PORT = "thrift.receiver.port"; - public static final String NETWORK_PARTITION_ID = "network.partition.id"; - public static final String CLUSTER_ID = "cluster.id"; - public static final String SERVICE_NAME = "service.name"; - public static final String AWS_PROPERTIES_FILE = "aws.properties.file"; - public static final String AWS_ACCESS_KEY = "access-key"; - public static final String AWS_SECRET_KEY = "secret-key"; - public static final String LB_PREFIX = "load-balancer-prefix"; - public static final String LOAD_BALANCER_SECURITY_GROUP_NAME = "load-balancer-security-group-name"; - public static final String LOAD_BALANCER_SECURITY_GROUP_DESCRIPTION = "Security group for load balancers created for Apache Stratos."; - public static final String ELB_ENDPOINT_URL_FORMAT = "elasticloadbalancing.%s.amazonaws.com"; - public static final String EC2_ENDPOINT_URL_FORMAT = "ec2.%s.amazonaws.com"; - public static final String CLOUD_WATCH_ENDPOINT_URL_FORMAT = "monitoring.%s.amazonaws.com"; - public static final String ALLOWED_CIDR_IP_KEY = "allowed-cidr-ip"; - public static final String ALLOWED_PROTOCOLS = "allowed-protocols"; - public static final int LOAD_BALANCER_NAME_MAX_LENGTH = 32; - public static final int LOAD_BALANCER_PREFIX_MAX_LENGTH = 25; - public static final int SECURITY_GROUP_NAME_MAX_LENGTH = 255; - public static final String REQUEST_COUNT_METRIC_NAME = "RequestCount"; - public static final String CLOUD_WATCH_NAMESPACE_NAME = "AWS/ELB"; - public static final String SUM_STATISTICS_NAME = "Sum"; - public static final String LOAD_BALANCER_DIMENTION_NAME = "LoadBalancerName"; - public static final String HTTP_RESPONSE_2XX = "HTTPCode_Backend_2XX"; - public static final String HTTP_RESPONSE_3XX = "HTTPCode_Backend_3XX"; - public static final String HTTP_RESPONSE_4XX = "HTTPCode_Backend_4XX"; - public static final String HTTP_RESPONSE_5XX = "HTTPCode_Backend_5XX"; - public static final String STATISTICS_INTERVAL = "statistics-interval"; - public static final int STATISTICS_INTERVAL_MULTIPLE_OF = 60; -} http://git-wip-us.apache.org/repos/asf/stratos/blob/16034523/extensions/load-balancer/aws-extension/src/main/java/org/apache/stratos/aws/extension/Main.java ---------------------------------------------------------------------- diff --git a/extensions/load-balancer/aws-extension/src/main/java/org/apache/stratos/aws/extension/Main.java b/extensions/load-balancer/aws-extension/src/main/java/org/apache/stratos/aws/extension/Main.java deleted file mode 100644 index 73fa971..0000000 --- a/extensions/load-balancer/aws-extension/src/main/java/org/apache/stratos/aws/extension/Main.java +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.apache.stratos.aws.extension; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.apache.log4j.PropertyConfigurator; -import org.apache.stratos.common.threading.StratosThreadPool; -import org.apache.stratos.load.balancer.common.topology.TopologyProvider; -import org.apache.stratos.load.balancer.extension.api.LoadBalancerExtension; - -import java.util.concurrent.ExecutorService; - -/** - * AWS extension main class. - */ - -public class Main { - private static final Log log = LogFactory.getLog(Main.class); - private static ExecutorService executorService; - - public static void main(String[] args) { - - LoadBalancerExtension extension = null; - try { - // Configure log4j properties - PropertyConfigurator.configure(System - .getProperty("log4j.properties.file.path")); - - if (log.isInfoEnabled()) { - log.info("AWS extension started"); - } - - executorService = StratosThreadPool.getExecutorService( - "aws.extension.thread.pool", 10); - // Validate runtime parameters - AWSExtensionContext.getInstance().validate(); - TopologyProvider topologyProvider = new TopologyProvider(); - AWSStatisticsReader statisticsReader = AWSExtensionContext - .getInstance().isCEPStatsPublisherEnabled() ? new AWSStatisticsReader( - topologyProvider) : null; - extension = new LoadBalancerExtension(new AWSLoadBalancer(), - statisticsReader, topologyProvider); - extension.setExecutorService(executorService); - extension.execute(); - - // Add shutdown hook - final Thread mainThread = Thread.currentThread(); - final LoadBalancerExtension finalExtension = extension; - Runtime.getRuntime().addShutdownHook(new Thread() { - public void run() { - try { - if (finalExtension != null) { - log.info("Shutting aws extension..."); - finalExtension.stop(); - } - mainThread.join(); - } catch (Exception e) { - log.error(e); - } - } - }); - } catch (Exception e) { - if (log.isErrorEnabled()) { - log.error(e); - } - if (extension != null) { - log.info("Shutting aws extension..."); - extension.stop(); - } - } - } -}
