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) {