Repository: camel Updated Branches: refs/heads/master 148333845 -> 0fd87c9dc
CAMEL-8851 Camel-AWS EC2: Enabling/Disabling monitoring on instances Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/7567990f Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/7567990f Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/7567990f Branch: refs/heads/master Commit: 7567990f2537af6b82fd619f1d99c900e328427b Parents: 1483338 Author: Andrea Cosentino <anco...@gmail.com> Authored: Wed Jun 10 09:20:30 2015 +0200 Committer: Andrea Cosentino <anco...@gmail.com> Committed: Wed Jun 10 10:59:51 2015 +0200 ---------------------------------------------------------------------- .../camel/component/aws/ec2/EC2Operations.java | 4 +- .../camel/component/aws/ec2/EC2Producer.java | 50 ++++++++++++++++- .../component/aws/ec2/AmazonEC2ClientMock.java | 48 +++++++++++++++++ .../aws/ec2/EC2ComponentSpringTest.java | 43 +++++++++++++++ .../component/aws/ec2/EC2OperationsTest.java | 6 ++- .../component/aws/ec2/EC2ProducerTest.java | 56 ++++++++++++++++++++ .../aws/ec2/EC2ComponentSpringTest-context.xml | 8 +++ 7 files changed, 212 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/7567990f/components/camel-aws/src/main/java/org/apache/camel/component/aws/ec2/EC2Operations.java ---------------------------------------------------------------------- diff --git a/components/camel-aws/src/main/java/org/apache/camel/component/aws/ec2/EC2Operations.java b/components/camel-aws/src/main/java/org/apache/camel/component/aws/ec2/EC2Operations.java index e602f7a..2cc6968 100644 --- a/components/camel-aws/src/main/java/org/apache/camel/component/aws/ec2/EC2Operations.java +++ b/components/camel-aws/src/main/java/org/apache/camel/component/aws/ec2/EC2Operations.java @@ -24,5 +24,7 @@ public enum EC2Operations { terminateInstances, describeInstances, describeInstancesStatus, - rebootInstances + rebootInstances, + monitorInstances, + unmonitorInstances } http://git-wip-us.apache.org/repos/asf/camel/blob/7567990f/components/camel-aws/src/main/java/org/apache/camel/component/aws/ec2/EC2Producer.java ---------------------------------------------------------------------- diff --git a/components/camel-aws/src/main/java/org/apache/camel/component/aws/ec2/EC2Producer.java b/components/camel-aws/src/main/java/org/apache/camel/component/aws/ec2/EC2Producer.java index d28e5af..a1fdc94 100644 --- a/components/camel-aws/src/main/java/org/apache/camel/component/aws/ec2/EC2Producer.java +++ b/components/camel-aws/src/main/java/org/apache/camel/component/aws/ec2/EC2Producer.java @@ -25,6 +25,8 @@ import com.amazonaws.services.ec2.model.DescribeInstanceStatusResult; import com.amazonaws.services.ec2.model.DescribeInstancesRequest; import com.amazonaws.services.ec2.model.DescribeInstancesResult; import com.amazonaws.services.ec2.model.InstanceType; +import com.amazonaws.services.ec2.model.MonitorInstancesRequest; +import com.amazonaws.services.ec2.model.MonitorInstancesResult; import com.amazonaws.services.ec2.model.RebootInstancesRequest; import com.amazonaws.services.ec2.model.RunInstancesRequest; import com.amazonaws.services.ec2.model.RunInstancesResult; @@ -34,6 +36,8 @@ import com.amazonaws.services.ec2.model.StopInstancesRequest; import com.amazonaws.services.ec2.model.StopInstancesResult; import com.amazonaws.services.ec2.model.TerminateInstancesRequest; import com.amazonaws.services.ec2.model.TerminateInstancesResult; +import com.amazonaws.services.ec2.model.UnmonitorInstancesRequest; +import com.amazonaws.services.ec2.model.UnmonitorInstancesResult; import org.apache.camel.Endpoint; import org.apache.camel.Exchange; @@ -77,7 +81,13 @@ public class EC2Producer extends DefaultProducer { break; case rebootInstances: rebootInstances(getEndpoint().getEc2Client(), exchange); - break; + break; + case monitorInstances: + monitorInstances(getEndpoint().getEc2Client(), exchange); + break; + case unmonitorInstances: + unmonitorInstances(getEndpoint().getEc2Client(), exchange); + break; default: throw new IllegalArgumentException("Unsupported operation"); } @@ -272,4 +282,42 @@ public class EC2Producer extends DefaultProducer { throw ase; } } + + private void monitorInstances(AmazonEC2Client ec2Client, Exchange exchange) { + Collection instanceIds; + MonitorInstancesRequest request = new MonitorInstancesRequest(); + if (ObjectHelper.isNotEmpty(exchange.getIn().getHeader(EC2Constants.INSTANCES_IDS))) { + instanceIds = exchange.getIn().getHeader(EC2Constants.INSTANCES_IDS, Collection.class); + request.withInstanceIds(instanceIds); + } else { + throw new IllegalArgumentException("Instances Ids must be specified"); + } + MonitorInstancesResult result; + try { + result = ec2Client.monitorInstances(request); + } catch (AmazonServiceException ase) { + LOG.trace("Monitor Instances command returned the error code {}", ase.getErrorCode()); + throw ase; + } + exchange.getIn().setBody(result); + } + + private void unmonitorInstances(AmazonEC2Client ec2Client, Exchange exchange) { + Collection instanceIds; + UnmonitorInstancesRequest request = new UnmonitorInstancesRequest(); + if (ObjectHelper.isNotEmpty(exchange.getIn().getHeader(EC2Constants.INSTANCES_IDS))) { + instanceIds = exchange.getIn().getHeader(EC2Constants.INSTANCES_IDS, Collection.class); + request.withInstanceIds(instanceIds); + } else { + throw new IllegalArgumentException("Instances Ids must be specified"); + } + UnmonitorInstancesResult result; + try { + result = ec2Client.unmonitorInstances(request); + } catch (AmazonServiceException ase) { + LOG.trace("Unmonitor Instances command returned the error code {}", ase.getErrorCode()); + throw ase; + } + exchange.getIn().setBody(result); + } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/camel/blob/7567990f/components/camel-aws/src/test/java/org/apache/camel/component/aws/ec2/AmazonEC2ClientMock.java ---------------------------------------------------------------------- diff --git a/components/camel-aws/src/test/java/org/apache/camel/component/aws/ec2/AmazonEC2ClientMock.java b/components/camel-aws/src/test/java/org/apache/camel/component/aws/ec2/AmazonEC2ClientMock.java index 60c87f9..b714ebe 100644 --- a/components/camel-aws/src/test/java/org/apache/camel/component/aws/ec2/AmazonEC2ClientMock.java +++ b/components/camel-aws/src/test/java/org/apache/camel/component/aws/ec2/AmazonEC2ClientMock.java @@ -18,6 +18,7 @@ package org.apache.camel.component.aws.ec2; import java.util.ArrayList; import java.util.Collection; +import java.util.Iterator; import com.amazonaws.AmazonServiceException; import com.amazonaws.auth.BasicAWSCredentials; @@ -28,11 +29,16 @@ import com.amazonaws.services.ec2.model.DescribeInstancesRequest; import com.amazonaws.services.ec2.model.DescribeInstancesResult; import com.amazonaws.services.ec2.model.GroupIdentifier; import com.amazonaws.services.ec2.model.Instance; +import com.amazonaws.services.ec2.model.InstanceMonitoring; import com.amazonaws.services.ec2.model.InstanceState; import com.amazonaws.services.ec2.model.InstanceStateChange; import com.amazonaws.services.ec2.model.InstanceStateName; import com.amazonaws.services.ec2.model.InstanceStatus; import com.amazonaws.services.ec2.model.InstanceType; +import com.amazonaws.services.ec2.model.MonitorInstancesRequest; +import com.amazonaws.services.ec2.model.MonitorInstancesResult; +import com.amazonaws.services.ec2.model.Monitoring; +import com.amazonaws.services.ec2.model.MonitoringState; import com.amazonaws.services.ec2.model.RebootInstancesRequest; import com.amazonaws.services.ec2.model.Reservation; import com.amazonaws.services.ec2.model.RunInstancesRequest; @@ -43,6 +49,8 @@ import com.amazonaws.services.ec2.model.StopInstancesRequest; import com.amazonaws.services.ec2.model.StopInstancesResult; import com.amazonaws.services.ec2.model.TerminateInstancesRequest; import com.amazonaws.services.ec2.model.TerminateInstancesResult; +import com.amazonaws.services.ec2.model.UnmonitorInstancesRequest; +import com.amazonaws.services.ec2.model.UnmonitorInstancesResult; public class AmazonEC2ClientMock extends AmazonEC2Client { @@ -232,4 +240,44 @@ public class AmazonEC2ClientMock extends AmazonEC2Client { public void rebootInstances(RebootInstancesRequest rebootInstancesRequest) { return; } + + @Override + public MonitorInstancesResult monitorInstances(MonitorInstancesRequest monitorInstancesRequest) { + MonitorInstancesResult result = new MonitorInstancesResult(); + if (!monitorInstancesRequest.getInstanceIds().isEmpty()) { + Collection<InstanceMonitoring> coll = new ArrayList(); + Iterator it = monitorInstancesRequest.getInstanceIds().iterator(); + while (it.hasNext()) { + String id = (String) it.next(); + InstanceMonitoring mon = new InstanceMonitoring(); + mon.setInstanceId(id); + Monitoring monitoring = new Monitoring(); + monitoring.setState(MonitoringState.Enabled); + mon.setMonitoring(monitoring); + coll.add(mon); + } + result.setInstanceMonitorings(coll); + } + return result; + } + + @Override + public UnmonitorInstancesResult unmonitorInstances(UnmonitorInstancesRequest unmonitorInstancesRequest) { + UnmonitorInstancesResult result = new UnmonitorInstancesResult(); + if (!unmonitorInstancesRequest.getInstanceIds().isEmpty()) { + Collection<InstanceMonitoring> coll = new ArrayList(); + Iterator it = unmonitorInstancesRequest.getInstanceIds().iterator(); + while (it.hasNext()) { + String id = (String) it.next(); + InstanceMonitoring mon = new InstanceMonitoring(); + mon.setInstanceId(id); + Monitoring monitoring = new Monitoring(); + monitoring.setState(MonitoringState.Disabled); + mon.setMonitoring(monitoring); + coll.add(mon); + } + result.setInstanceMonitorings(coll); + } + return result; + } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/camel/blob/7567990f/components/camel-aws/src/test/java/org/apache/camel/component/aws/ec2/EC2ComponentSpringTest.java ---------------------------------------------------------------------- diff --git a/components/camel-aws/src/test/java/org/apache/camel/component/aws/ec2/EC2ComponentSpringTest.java b/components/camel-aws/src/test/java/org/apache/camel/component/aws/ec2/EC2ComponentSpringTest.java index ec6fc0f..5457a9c 100644 --- a/components/camel-aws/src/test/java/org/apache/camel/component/aws/ec2/EC2ComponentSpringTest.java +++ b/components/camel-aws/src/test/java/org/apache/camel/component/aws/ec2/EC2ComponentSpringTest.java @@ -23,10 +23,13 @@ import com.amazonaws.services.ec2.model.DescribeInstanceStatusResult; import com.amazonaws.services.ec2.model.DescribeInstancesResult; import com.amazonaws.services.ec2.model.InstanceStateName; import com.amazonaws.services.ec2.model.InstanceType; +import com.amazonaws.services.ec2.model.MonitorInstancesResult; +import com.amazonaws.services.ec2.model.MonitoringState; import com.amazonaws.services.ec2.model.RunInstancesResult; import com.amazonaws.services.ec2.model.StartInstancesResult; import com.amazonaws.services.ec2.model.StopInstancesResult; import com.amazonaws.services.ec2.model.TerminateInstancesResult; +import com.amazonaws.services.ec2.model.UnmonitorInstancesResult; import org.apache.camel.Exchange; import org.apache.camel.Processor; @@ -174,6 +177,46 @@ public class EC2ComponentSpringTest extends CamelSpringTestSupport { } + @Test + public void ec2MonitorInstancesTest() throws Exception { + + Exchange exchange = template.request("direct:monitor", new Processor() { + + @Override + public void process(Exchange exchange) throws Exception { + Collection l = new ArrayList(); + l.add("test-1"); + exchange.getIn().setHeader(EC2Constants.INSTANCES_IDS, l); + } + }); + + MonitorInstancesResult resultGet = (MonitorInstancesResult) exchange.getIn().getBody(); + + assertEquals(resultGet.getInstanceMonitorings().size(), 1); + assertEquals(resultGet.getInstanceMonitorings().get(0).getInstanceId(), "test-1"); + assertEquals(resultGet.getInstanceMonitorings().get(0).getMonitoring().getState(), MonitoringState.Enabled.toString()); + } + + @Test + public void ec2UnmonitorInstancesTest() throws Exception { + + Exchange exchange = template.request("direct:unmonitor", new Processor() { + + @Override + public void process(Exchange exchange) throws Exception { + Collection l = new ArrayList(); + l.add("test-1"); + exchange.getIn().setHeader(EC2Constants.INSTANCES_IDS, l); + } + }); + + UnmonitorInstancesResult resultGet = (UnmonitorInstancesResult) exchange.getIn().getBody(); + + assertEquals(resultGet.getInstanceMonitorings().size(), 1); + assertEquals(resultGet.getInstanceMonitorings().get(0).getInstanceId(), "test-1"); + assertEquals(resultGet.getInstanceMonitorings().get(0).getMonitoring().getState(), MonitoringState.Disabled.toString()); + } + @Override protected AbstractApplicationContext createApplicationContext() { return new ClassPathXmlApplicationContext( http://git-wip-us.apache.org/repos/asf/camel/blob/7567990f/components/camel-aws/src/test/java/org/apache/camel/component/aws/ec2/EC2OperationsTest.java ---------------------------------------------------------------------- diff --git a/components/camel-aws/src/test/java/org/apache/camel/component/aws/ec2/EC2OperationsTest.java b/components/camel-aws/src/test/java/org/apache/camel/component/aws/ec2/EC2OperationsTest.java index 7bb7de5..d775ce8 100644 --- a/components/camel-aws/src/test/java/org/apache/camel/component/aws/ec2/EC2OperationsTest.java +++ b/components/camel-aws/src/test/java/org/apache/camel/component/aws/ec2/EC2OperationsTest.java @@ -24,7 +24,7 @@ public class EC2OperationsTest { @Test public void supportedOperationCount() { - assertEquals(7, EC2Operations.values().length); + assertEquals(9, EC2Operations.values().length); } @Test @@ -36,6 +36,8 @@ public class EC2OperationsTest { assertEquals(EC2Operations.describeInstances, EC2Operations.valueOf("describeInstances")); assertEquals(EC2Operations.describeInstancesStatus, EC2Operations.valueOf("describeInstancesStatus")); assertEquals(EC2Operations.rebootInstances, EC2Operations.valueOf("rebootInstances")); + assertEquals(EC2Operations.monitorInstances, EC2Operations.valueOf("monitorInstances")); + assertEquals(EC2Operations.unmonitorInstances, EC2Operations.valueOf("unmonitorInstances")); } @Test @@ -47,5 +49,7 @@ public class EC2OperationsTest { assertEquals(EC2Operations.describeInstances.toString(), "describeInstances"); assertEquals(EC2Operations.describeInstancesStatus.toString(), "describeInstancesStatus"); assertEquals(EC2Operations.rebootInstances.toString(), "rebootInstances"); + assertEquals(EC2Operations.monitorInstances.toString(), "monitorInstances"); + assertEquals(EC2Operations.unmonitorInstances.toString(), "unmonitorInstances"); } } http://git-wip-us.apache.org/repos/asf/camel/blob/7567990f/components/camel-aws/src/test/java/org/apache/camel/component/aws/ec2/EC2ProducerTest.java ---------------------------------------------------------------------- diff --git a/components/camel-aws/src/test/java/org/apache/camel/component/aws/ec2/EC2ProducerTest.java b/components/camel-aws/src/test/java/org/apache/camel/component/aws/ec2/EC2ProducerTest.java index 89aba86..4c48191 100644 --- a/components/camel-aws/src/test/java/org/apache/camel/component/aws/ec2/EC2ProducerTest.java +++ b/components/camel-aws/src/test/java/org/apache/camel/component/aws/ec2/EC2ProducerTest.java @@ -23,10 +23,13 @@ import com.amazonaws.services.ec2.model.DescribeInstanceStatusResult; import com.amazonaws.services.ec2.model.DescribeInstancesResult; import com.amazonaws.services.ec2.model.InstanceStateName; import com.amazonaws.services.ec2.model.InstanceType; +import com.amazonaws.services.ec2.model.MonitorInstancesResult; +import com.amazonaws.services.ec2.model.MonitoringState; import com.amazonaws.services.ec2.model.RunInstancesResult; import com.amazonaws.services.ec2.model.StartInstancesResult; import com.amazonaws.services.ec2.model.StopInstancesResult; import com.amazonaws.services.ec2.model.TerminateInstancesResult; +import com.amazonaws.services.ec2.model.UnmonitorInstancesResult; import org.apache.camel.EndpointInject; import org.apache.camel.Exchange; @@ -274,6 +277,53 @@ public class EC2ProducerTest extends CamelTestSupport { assertMockEndpointsSatisfied(); } + + @Test + public void ec2MonitorInstancesTest() throws Exception { + + mock.expectedMessageCount(1); + Exchange exchange = template.request("direct:monitor", new Processor() { + + @Override + public void process(Exchange exchange) throws Exception { + Collection l = new ArrayList(); + l.add("test-1"); + exchange.getIn().setHeader(EC2Constants.INSTANCES_IDS, l); + } + }); + + assertMockEndpointsSatisfied(); + + MonitorInstancesResult resultGet = (MonitorInstancesResult) exchange.getIn().getBody(); + + assertEquals(resultGet.getInstanceMonitorings().size(), 1); + assertEquals(resultGet.getInstanceMonitorings().get(0).getInstanceId(), "test-1"); + assertEquals(resultGet.getInstanceMonitorings().get(0).getMonitoring().getState(), MonitoringState.Enabled.toString()); + } + + @Test + public void ec2UnmonitorInstancesTest() throws Exception { + + mock.expectedMessageCount(1); + Exchange exchange = template.request("direct:unmonitor", new Processor() { + + @Override + public void process(Exchange exchange) throws Exception { + Collection l = new ArrayList(); + l.add("test-1"); + exchange.getIn().setHeader(EC2Constants.INSTANCES_IDS, l); + } + }); + + assertMockEndpointsSatisfied(); + + UnmonitorInstancesResult resultGet = (UnmonitorInstancesResult) exchange.getIn().getBody(); + + assertEquals(resultGet.getInstanceMonitorings().size(), 1); + assertEquals(resultGet.getInstanceMonitorings().get(0).getInstanceId(), "test-1"); + assertEquals(resultGet.getInstanceMonitorings().get(0).getMonitoring().getState(), MonitoringState.Disabled.toString()); + } + @Override protected JndiRegistry createRegistry() throws Exception { JndiRegistry registry = super.createRegistry(); @@ -311,6 +361,12 @@ public class EC2ProducerTest extends CamelTestSupport { from("direct:reboot") .to("aws-ec2://test?amazonEc2Client=#amazonEc2Client&operation=rebootInstances") .to("mock:result"); + from("direct:monitor") + .to("aws-ec2://test?amazonEc2Client=#amazonEc2Client&operation=monitorInstances") + .to("mock:result"); + from("direct:unmonitor") + .to("aws-ec2://test?amazonEc2Client=#amazonEc2Client&operation=unmonitorInstances") + .to("mock:result"); } }; } http://git-wip-us.apache.org/repos/asf/camel/blob/7567990f/components/camel-aws/src/test/resources/org/apache/camel/component/aws/ec2/EC2ComponentSpringTest-context.xml ---------------------------------------------------------------------- diff --git a/components/camel-aws/src/test/resources/org/apache/camel/component/aws/ec2/EC2ComponentSpringTest-context.xml b/components/camel-aws/src/test/resources/org/apache/camel/component/aws/ec2/EC2ComponentSpringTest-context.xml index 1282e3d..19db939 100644 --- a/components/camel-aws/src/test/resources/org/apache/camel/component/aws/ec2/EC2ComponentSpringTest-context.xml +++ b/components/camel-aws/src/test/resources/org/apache/camel/component/aws/ec2/EC2ComponentSpringTest-context.xml @@ -49,6 +49,14 @@ <from uri="direct:reboot"/> <to uri="aws-ec2://Test?amazonEc2Client=#amazonEc2Client&operation=rebootInstances"/> </route> + <route> + <from uri="direct:monitor"/> + <to uri="aws-ec2://Test?amazonEc2Client=#amazonEc2Client&operation=monitorInstances"/> + </route> + <route> + <from uri="direct:unmonitor"/> + <to uri="aws-ec2://Test?amazonEc2Client=#amazonEc2Client&operation=unmonitorInstances"/> + </route> </camelContext> <bean id="amazonEc2Client" class="org.apache.camel.component.aws.ec2.AmazonEC2ClientMock"/>