diff --git a/core/src/com/cloud/hypervisor/xen/resource/XcpServerResource.java b/core/src/com/cloud/hypervisor/xen/resource/XcpServerResource.java index 903df717432..8325b0649d2 100644 --- a/core/src/com/cloud/hypervisor/xen/resource/XcpServerResource.java +++ b/core/src/com/cloud/hypervisor/xen/resource/XcpServerResource.java @@ -18,8 +18,13 @@ import java.util.List; import javax.ejb.Local; +import org.apache.log4j.Logger; import org.apache.xmlrpc.XmlRpcException; +import com.cloud.agent.api.Answer; +import com.cloud.agent.api.Command; +import com.cloud.agent.api.NetworkUsageAnswer; +import com.cloud.agent.api.NetworkUsageCommand; import com.cloud.resource.ServerResource; import com.cloud.utils.exception.CloudRuntimeException; import com.cloud.utils.script.Script; @@ -29,11 +34,21 @@ import com.xensource.xenapi.Types.XenAPIException; @Local(value=ServerResource.class) public class XcpServerResource extends CitrixResourceBase { - + private final static Logger s_logger = Logger.getLogger(XcpServerResource.class); + public XcpServerResource() { super(); } + @Override + public Answer executeRequest(Command cmd) { + if (cmd instanceof NetworkUsageCommand) { + return execute((NetworkUsageCommand) cmd); + } else { + return super.executeRequest(cmd); + } + } + @Override protected String getGuestOsType(String stdType, boolean bootFromCD) { return CitrixHelper.getXcpGuestOsType(stdType); @@ -65,4 +80,24 @@ public class XcpServerResource extends CitrixResourceBase { vm.setMemoryDynamicMin(conn, memsize); vm.setMemoryStaticMin(conn, memsize); } + + + protected NetworkUsageAnswer execute(NetworkUsageCommand cmd) { + try { + Connection conn = getConnection(); + if(cmd.getOption()!=null && cmd.getOption().equals("create") ){ + String result = networkUsage(conn, cmd.getPrivateIP(), "create", null); + NetworkUsageAnswer answer = new NetworkUsageAnswer(cmd, result, 0L, 0L); + return answer; + } + long[] stats = getNetworkStats(conn, cmd.getPrivateIP()); + NetworkUsageAnswer answer = new NetworkUsageAnswer(cmd, "", stats[0], stats[1]); + return answer; + } catch (Exception ex) { + s_logger.warn("Failed to get network usage stats due to ", ex); + return new NetworkUsageAnswer(cmd, ex); + } + } + + }