Updated Branches:
  refs/heads/4.0 e6fe5dcf0 -> 5c8f3a4c5

CLOUDSTACK-1666: add procedure VPCNetworkUsage and getVPCNetworkStats to deal 
with the operation on VPC virtual router.
"create" to add iptables rules for network usage statistics.
"get" to get the network usage statistics from iptables.


Project: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/repo
Commit: 
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/commit/5c8f3a4c
Tree: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/tree/5c8f3a4c
Diff: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/diff/5c8f3a4c

Branch: refs/heads/4.0
Commit: 5c8f3a4c5f364b1a0310f8d387ea469bf405a74d
Parents: e6fe5dc
Author: Wei Zhou <w.z...@leaseweb.com>
Authored: Tue Mar 19 18:44:46 2013 +0530
Committer: Kishan Kavala <kis...@cloud.com>
Committed: Tue Mar 19 18:44:46 2013 +0530

----------------------------------------------------------------------
 .../kvm/resource/LibvirtComputingResource.java     |   73 +++++++++++++--
 1 files changed, 65 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/5c8f3a4c/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
----------------------------------------------------------------------
diff --git 
a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
 
b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
index 4729fd6..825de23 100755
--- 
a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
+++ 
b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
@@ -2517,17 +2517,74 @@ public class LibvirtComputingResource extends 
ServerResourceBase implements
         return stats;
     }
 
+    protected String VPCNetworkUsage(final String privateIpAddress, final 
String publicIp,
+            final String option, final String vpcCIDR) {
+        Script getUsage = new Script(_routerProxyPath, s_logger);
+        getUsage.add("vpc_netusage.sh");
+        getUsage.add(privateIpAddress);
+        getUsage.add("-l", publicIp);
+
+        if (option.equals("get")) {
+            getUsage.add("-g");
+        } else if (option.equals("create")) {
+            getUsage.add("-c");
+            getUsage.add("-v", vpcCIDR);
+        } else if (option.equals("reset")) {
+            getUsage.add("-r");
+        } else if (option.equals("vpn")) {
+            getUsage.add("-n");
+        } else if (option.equals("remove")) {
+            getUsage.add("-d");
+        }
+
+        final OutputInterpreter.OneLineParser usageParser = new 
OutputInterpreter.OneLineParser();
+        String result = getUsage.execute(usageParser);
+        if (result != null) {
+            s_logger.debug("Failed to execute VPCNetworkUsage:" + result);
+            return null;
+        }
+        return usageParser.getLine();
+    }
+
+    protected long[] getVPCNetworkStats(String privateIP, String publicIp, 
String option) {
+        String result = VPCNetworkUsage(privateIP, publicIp, option, null);
+        long[] stats = new long[2];
+        if (result != null) {
+            String[] splitResult = result.split(":");
+            int i = 0;
+            while (i < splitResult.length - 1) {
+                stats[0] += (new Long(splitResult[i++])).longValue();
+                stats[1] += (new Long(splitResult[i++])).longValue();
+            }
+        }
+        return stats;
+    }
+
     private Answer execute(NetworkUsageCommand cmd) {
-        if (cmd.getOption() != null && cmd.getOption().equals("create")) {
-            String result = networkUsage(cmd.getPrivateIP(), "create", null);
-            NetworkUsageAnswer answer = new NetworkUsageAnswer(cmd, result, 0L,
-                    0L);
+        if (cmd.isForVpc()) {
+            if (cmd.getOption() != null && cmd.getOption().equals("create")) {
+                String result = 
VPCNetworkUsage(cmd.getPrivateIP(),cmd.getGatewayIP(), "create", 
cmd.getVpcCIDR());
+                NetworkUsageAnswer answer = new NetworkUsageAnswer(cmd, 
result, 0L, 0L);
+                return answer;
+            } else if (cmd.getOption() != null && 
(cmd.getOption().equals("get") || cmd.getOption().equals("vpn"))) {
+                long[] stats = getVPCNetworkStats(cmd.getPrivateIP(), 
cmd.getGatewayIP(), cmd.getOption());
+                NetworkUsageAnswer answer = new NetworkUsageAnswer(cmd, "", 
stats[0], stats[1]);
+                return answer;
+            } else {
+                String result = 
VPCNetworkUsage(cmd.getPrivateIP(),cmd.getGatewayIP(), cmd.getOption(), 
cmd.getVpcCIDR());
+                NetworkUsageAnswer answer = new NetworkUsageAnswer(cmd, 
result, 0L, 0L);
+                return answer;
+            }
+        } else {
+            if (cmd.getOption() != null && cmd.getOption().equals("create")) {
+                String result = networkUsage(cmd.getPrivateIP(), "create", 
null);
+                NetworkUsageAnswer answer = new NetworkUsageAnswer(cmd, 
result, 0L, 0L);
+                return answer;
+            }
+            long[] stats = getNetworkStats(cmd.getPrivateIP());
+            NetworkUsageAnswer answer = new NetworkUsageAnswer(cmd, "", 
stats[0], stats[1]);
             return answer;
         }
-        long[] stats = getNetworkStats(cmd.getPrivateIP());
-        NetworkUsageAnswer answer = new NetworkUsageAnswer(cmd, "", stats[0],
-                stats[1]);
-        return answer;
     }
 
     private Answer execute(RebootCommand cmd) {

Reply via email to