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&amp;operation=rebootInstances"/>
         </route>
+        <route>
+            <from uri="direct:monitor"/>
+            <to 
uri="aws-ec2://Test?amazonEc2Client=#amazonEc2Client&amp;operation=monitorInstances"/>
+        </route>
+        <route>
+            <from uri="direct:unmonitor"/>
+            <to 
uri="aws-ec2://Test?amazonEc2Client=#amazonEc2Client&amp;operation=unmonitorInstances"/>
+        </route>
     </camelContext>
 
     <bean id="amazonEc2Client" 
class="org.apache.camel.component.aws.ec2.AmazonEC2ClientMock"/>

Reply via email to