You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by ed...@apache.org on 2013/02/06 03:43:29 UTC

[15/50] [abbrv] git commit: refs/heads/storage_refactor - CLOUDSTACK-786, CLOUDSTACK-1014: Moved usage APIs to cloud-api. Removed ManagementServerExt. Usage API related implementation is added to UsageServiceImpl

CLOUDSTACK-786, CLOUDSTACK-1014: Moved usage APIs to cloud-api. Removed ManagementServerExt. Usage API related implementation is added to UsageServiceImpl


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

Branch: refs/heads/storage_refactor
Commit: fc0bf21a13c3fd34adfff2fc8b82ca19adac58a0
Parents: 2234e04
Author: Kishan Kavala <ki...@cloud.com>
Authored: Tue Feb 5 16:43:18 2013 +0530
Committer: Kishan Kavala <ki...@cloud.com>
Committed: Tue Feb 5 16:49:34 2013 +0530

----------------------------------------------------------------------
 api/src/com/cloud/dao/EntityManager.java           |   10 +
 api/src/com/cloud/network/NetworkUsageService.java |   37 ++
 api/src/org/apache/cloudstack/api/BaseCmd.java     |    4 +
 .../apache/cloudstack/api/ResponseGenerator.java   |    7 +
 .../command/admin/usage/AddTrafficMonitorCmd.java  |  107 +++++
 .../admin/usage/DeleteTrafficMonitorCmd.java       |   84 ++++
 .../admin/usage/GenerateUsageRecordsCmd.java       |   89 ++++
 .../command/admin/usage/GetUsageRecordsCmd.java    |  126 +++++
 .../admin/usage/ListTrafficMonitorsCmd.java        |   84 ++++
 .../api/command/admin/usage/ListUsageTypesCmd.java |   51 ++
 api/src/org/apache/cloudstack/usage/Usage.java     |   69 +++
 .../org/apache/cloudstack/usage/UsageService.java  |   64 +++
 .../org/apache/cloudstack/usage/UsageTypes.java    |   58 +++
 client/tomcatconf/componentContext.xml.in          |    2 +-
 .../server/ManagementServerSimulatorImpl.java      |    2 +-
 .../dns-notifier/resources/components-example.xml  |    2 +-
 server/src/com/cloud/api/ApiDBUtils.java           |   14 +-
 server/src/com/cloud/api/ApiResponseHelper.java    |  253 ++++++++++
 .../cloud/api/commands/AddTrafficMonitorCmd.java   |  109 -----
 .../api/commands/DeleteTrafficMonitorCmd.java      |   86 ----
 .../api/commands/GenerateUsageRecordsCmd.java      |   91 ----
 .../com/cloud/api/commands/GetUsageRecordsCmd.java |  370 ---------------
 .../cloud/api/commands/ListTrafficMonitorsCmd.java |   86 ----
 .../com/cloud/api/commands/ListUsageTypesCmd.java  |   53 --
 server/src/com/cloud/dao/EntityManagerImpl.java    |    7 +-
 .../src/com/cloud/network/NetworkUsageManager.java |   14 -
 .../com/cloud/network/NetworkUsageManagerImpl.java |   20 +-
 .../src/com/cloud/server/ManagementServerExt.java  |   63 ---
 .../com/cloud/server/ManagementServerExtImpl.java  |  254 ----------
 server/src/com/cloud/usage/UsageServiceImpl.java   |  261 ++++++++++
 server/src/com/cloud/usage/UsageTypes.java         |   58 ---
 server/src/com/cloud/usage/UsageVO.java            |   23 +-
 usage/src/com/cloud/usage/UsageManagerImpl.java    |    1 +
 .../cloud/usage/parser/IPAddressUsageParser.java   |    2 +-
 .../usage/parser/LoadBalancerUsageParser.java      |    2 +-
 .../usage/parser/NetworkOfferingUsageParser.java   |    2 +-
 .../com/cloud/usage/parser/NetworkUsageParser.java |    2 +-
 .../usage/parser/PortForwardingUsageParser.java    |    2 +-
 .../usage/parser/SecurityGroupUsageParser.java     |    2 +-
 .../com/cloud/usage/parser/StorageUsageParser.java |    2 +-
 .../cloud/usage/parser/VMInstanceUsageParser.java  |    2 +-
 .../com/cloud/usage/parser/VPNUserUsageParser.java |    2 +-
 .../com/cloud/usage/parser/VolumeUsageParser.java  |    2 +-
 43 files changed, 1358 insertions(+), 1221 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/fc0bf21a/api/src/com/cloud/dao/EntityManager.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/dao/EntityManager.java b/api/src/com/cloud/dao/EntityManager.java
index b8fdaa7..8e6a438 100644
--- a/api/src/com/cloud/dao/EntityManager.java
+++ b/api/src/com/cloud/dao/EntityManager.java
@@ -39,6 +39,16 @@ public interface EntityManager {
     public <T, K extends Serializable> T findById(Class<T> entityType, K id);
 
     /**
+     * Finds an entity by its id including removed.
+     * @param <T> class of the entity you're trying to find.
+     * @param <K> class of the id that the entity uses.
+     * @param entityType Type of the entity.
+     * @param id id value
+     * @return T if found; null if not.
+     */
+    public <T, K extends Serializable> T findByIdIncludingRemoved(Class<T> entityType, K id);
+    
+    /**
      * Finds a unique entity by uuid string
      * @param <T> entity class
      * @param entityType type of entity you're looking for.

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/fc0bf21a/api/src/com/cloud/network/NetworkUsageService.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/network/NetworkUsageService.java b/api/src/com/cloud/network/NetworkUsageService.java
new file mode 100644
index 0000000..1cfea24
--- /dev/null
+++ b/api/src/com/cloud/network/NetworkUsageService.java
@@ -0,0 +1,37 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+package com.cloud.network;
+
+import java.util.List;
+
+import com.cloud.host.Host;
+
+import org.apache.cloudstack.api.command.admin.usage.AddTrafficMonitorCmd;
+import org.apache.cloudstack.api.command.admin.usage.DeleteTrafficMonitorCmd;
+import org.apache.cloudstack.api.command.admin.usage.ListTrafficMonitorsCmd;
+import org.apache.cloudstack.api.response.TrafficMonitorResponse;
+import com.cloud.utils.component.Manager;
+
+public interface NetworkUsageService extends Manager {
+
+    Host addTrafficMonitor(AddTrafficMonitorCmd cmd);
+
+    boolean deleteTrafficMonitor(DeleteTrafficMonitorCmd cmd);
+
+    List<? extends Host> listTrafficMonitors(ListTrafficMonitorsCmd cmd);
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/fc0bf21a/api/src/org/apache/cloudstack/api/BaseCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/BaseCmd.java b/api/src/org/apache/cloudstack/api/BaseCmd.java
index d8e2bff..a9ac489 100644
--- a/api/src/org/apache/cloudstack/api/BaseCmd.java
+++ b/api/src/org/apache/cloudstack/api/BaseCmd.java
@@ -29,6 +29,7 @@ import javax.inject.Inject;
 
 import org.apache.cloudstack.query.QueryService;
 import org.apache.cloudstack.region.RegionService;
+import org.apache.cloudstack.usage.UsageService;
 import org.apache.log4j.Logger;
 
 import com.cloud.configuration.ConfigurationService;
@@ -43,6 +44,7 @@ import com.cloud.exception.PermissionDeniedException;
 import com.cloud.exception.ResourceAllocationException;
 import com.cloud.exception.ResourceUnavailableException;
 import com.cloud.network.NetworkService;
+import com.cloud.network.NetworkUsageService;
 import com.cloud.network.StorageNetworkService;
 import com.cloud.network.VpcVirtualNetworkApplianceService;
 import com.cloud.network.as.AutoScaleService;
@@ -124,6 +126,8 @@ public abstract class BaseCmd {
     @Inject public Site2SiteVpnService _s2sVpnService;
 
     @Inject public QueryService _queryService;
+    @Inject public UsageService _usageService;
+    @Inject public NetworkUsageService _networkUsageService;
 
     public abstract void execute() throws ResourceUnavailableException, InsufficientCapacityException, ServerApiException, ConcurrentOperationException, ResourceAllocationException, NetworkRuleConflictException;
 

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/fc0bf21a/api/src/org/apache/cloudstack/api/ResponseGenerator.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/ResponseGenerator.java b/api/src/org/apache/cloudstack/api/ResponseGenerator.java
index b95f182..0dc85de 100644
--- a/api/src/org/apache/cloudstack/api/ResponseGenerator.java
+++ b/api/src/org/apache/cloudstack/api/ResponseGenerator.java
@@ -83,7 +83,9 @@ import org.apache.cloudstack.api.response.SystemVmInstanceResponse;
 import org.apache.cloudstack.api.response.SystemVmResponse;
 import org.apache.cloudstack.api.response.TemplatePermissionsResponse;
 import org.apache.cloudstack.api.response.TemplateResponse;
+import org.apache.cloudstack.api.response.TrafficMonitorResponse;
 import org.apache.cloudstack.api.response.TrafficTypeResponse;
+import org.apache.cloudstack.api.response.UsageRecordResponse;
 import org.apache.cloudstack.api.response.UserResponse;
 import org.apache.cloudstack.api.response.UserVmResponse;
 import org.apache.cloudstack.api.response.VirtualRouterProviderResponse;
@@ -94,6 +96,7 @@ import org.apache.cloudstack.api.response.VpcResponse;
 import org.apache.cloudstack.api.response.VpnUsersResponse;
 import org.apache.cloudstack.api.response.ZoneResponse;
 import org.apache.cloudstack.region.Region;
+import org.apache.cloudstack.usage.Usage;
 
 import com.cloud.async.AsyncJob;
 import com.cloud.capacity.Capacity;
@@ -375,4 +378,8 @@ public interface ResponseGenerator {
     GuestOSResponse createGuestOSResponse(GuestOS os);
 
     SnapshotScheduleResponse createSnapshotScheduleResponse(SnapshotSchedule sched);
+    
+    UsageRecordResponse createUsageResponse(Usage usageRecord);
+
+	TrafficMonitorResponse createTrafficMonitorResponse(Host trafficMonitor);
 }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/fc0bf21a/api/src/org/apache/cloudstack/api/command/admin/usage/AddTrafficMonitorCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/admin/usage/AddTrafficMonitorCmd.java b/api/src/org/apache/cloudstack/api/command/admin/usage/AddTrafficMonitorCmd.java
new file mode 100644
index 0000000..48424fe
--- /dev/null
+++ b/api/src/org/apache/cloudstack/api/command/admin/usage/AddTrafficMonitorCmd.java
@@ -0,0 +1,107 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+package org.apache.cloudstack.api.command.admin.usage;
+
+import javax.inject.Inject;
+
+import org.apache.cloudstack.api.APICommand;
+import org.apache.cloudstack.api.ApiConstants;
+import org.apache.cloudstack.api.ApiErrorCode;
+import org.apache.cloudstack.api.BaseCmd;
+import org.apache.cloudstack.api.Parameter;
+import org.apache.cloudstack.api.ServerApiException;
+import org.apache.cloudstack.api.response.TrafficMonitorResponse;
+import org.apache.cloudstack.api.response.ZoneResponse;
+import org.apache.log4j.Logger;
+
+import com.cloud.exception.InvalidParameterValueException;
+import com.cloud.host.Host;
+import com.cloud.user.Account;
+import com.cloud.utils.exception.CloudRuntimeException;
+
+@APICommand(name = "addTrafficMonitor", description="Adds Traffic Monitor Host for Direct Network Usage", responseObject = TrafficMonitorResponse.class)
+public class AddTrafficMonitorCmd extends BaseCmd {
+    public static final Logger s_logger = Logger.getLogger(AddTrafficMonitorCmd.class.getName());	
+    private static final String s_name = "addtrafficmonitorresponse";	
+
+    /////////////////////////////////////////////////////
+    //////////////// API parameters /////////////////////
+    /////////////////////////////////////////////////////
+
+    @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.UUID, entityType = ZoneResponse.class,
+            required = true, description="Zone in which to add the external firewall appliance.")
+    private Long zoneId;
+
+    @Parameter(name=ApiConstants.URL, type=CommandType.STRING, required = true, description="URL of the traffic monitor Host")
+    private String url;	 
+
+    @Parameter(name=ApiConstants.INCL_ZONES, type=CommandType.STRING, description="Traffic going into the listed zones will be metered")
+    private String inclZones;	 
+
+    @Parameter(name=ApiConstants.EXCL_ZONES, type=CommandType.STRING, description="Traffic going into the listed zones will not be metered")
+    private String exclZones;	 
+
+    ///////////////////////////////////////////////////
+    /////////////////// Accessors ///////////////////////
+    /////////////////////////////////////////////////////
+
+    public String getInclZones() {
+        return inclZones;
+    }
+
+    public String getExclZones() {
+        return exclZones;
+    }
+
+    public Long getZoneId() {
+        return zoneId;
+    }
+
+    public String getUrl() {
+        return url;
+    }
+
+    /////////////////////////////////////////////////////
+    /////////////// API Implementation///////////////////
+    /////////////////////////////////////////////////////
+
+    @Override
+    public String getCommandName() {
+        return s_name;
+    }
+
+    @Override
+    public long getEntityOwnerId() {
+        return Account.ACCOUNT_ID_SYSTEM;
+    }
+
+    @Override
+    public void execute(){
+        try {
+            Host trafficMonitor = _networkUsageService.addTrafficMonitor(this);
+            TrafficMonitorResponse response = _responseGenerator.createTrafficMonitorResponse(trafficMonitor);
+            response.setObjectName("trafficmonitor");
+            response.setResponseName(getCommandName());
+            this.setResponseObject(response);
+        } catch (InvalidParameterValueException ipve) {
+			throw new ServerApiException(ApiErrorCode.PARAM_ERROR, ipve.getMessage());
+        } catch (CloudRuntimeException cre) {
+			throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, cre.getMessage());
+        }
+    }
+}
+

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/fc0bf21a/api/src/org/apache/cloudstack/api/command/admin/usage/DeleteTrafficMonitorCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/admin/usage/DeleteTrafficMonitorCmd.java b/api/src/org/apache/cloudstack/api/command/admin/usage/DeleteTrafficMonitorCmd.java
new file mode 100644
index 0000000..e3bb299
--- /dev/null
+++ b/api/src/org/apache/cloudstack/api/command/admin/usage/DeleteTrafficMonitorCmd.java
@@ -0,0 +1,84 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+package org.apache.cloudstack.api.command.admin.usage;
+
+import javax.inject.Inject;
+
+import org.apache.cloudstack.api.APICommand;
+import org.apache.cloudstack.api.ApiConstants;
+import org.apache.cloudstack.api.ApiErrorCode;
+import org.apache.cloudstack.api.BaseCmd;
+import org.apache.cloudstack.api.Parameter;
+import org.apache.cloudstack.api.ServerApiException;
+import org.apache.cloudstack.api.response.HostResponse;
+import org.apache.cloudstack.api.response.SuccessResponse;
+import org.apache.log4j.Logger;
+
+import com.cloud.exception.InvalidParameterValueException;
+import com.cloud.user.Account;
+
+@APICommand(name = "deleteTrafficMonitor", description="Deletes an traffic monitor host.", responseObject = SuccessResponse.class)
+public class DeleteTrafficMonitorCmd extends BaseCmd {
+    public static final Logger s_logger = Logger.getLogger(DeleteTrafficMonitorCmd.class.getName());	
+    private static final String s_name = "deletetrafficmonitorresponse";	
+
+    /////////////////////////////////////////////////////
+    //////////////// API parameters /////////////////////
+    /////////////////////////////////////////////////////
+
+    @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType = HostResponse.class,
+            required = true, description="Id of the Traffic Monitor Host.")
+    private Long id;
+
+    ///////////////////////////////////////////////////
+    /////////////////// Accessors ///////////////////////
+    /////////////////////////////////////////////////////
+
+    public Long getId() {
+        return id;
+    }
+
+    /////////////////////////////////////////////////////
+    /////////////// API Implementation///////////////////
+    /////////////////////////////////////////////////////
+
+    @Override
+    public String getCommandName() {
+        return s_name;
+    }
+
+    @Override
+    public long getEntityOwnerId() {
+        return Account.ACCOUNT_ID_SYSTEM;
+    }
+
+    @Override
+    public void execute(){
+        try {
+            boolean result = _networkUsageService.deleteTrafficMonitor(this);
+            if (result) {
+                SuccessResponse response = new SuccessResponse(getCommandName());
+                response.setResponseName(getCommandName());
+                this.setResponseObject(response);
+            } else {
+				throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete traffic monitor.");
+            }
+        } catch (InvalidParameterValueException e) {
+			throw new ServerApiException(ApiErrorCode.PARAM_ERROR, "Failed to delete traffic monitor.");
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/fc0bf21a/api/src/org/apache/cloudstack/api/command/admin/usage/GenerateUsageRecordsCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/admin/usage/GenerateUsageRecordsCmd.java b/api/src/org/apache/cloudstack/api/command/admin/usage/GenerateUsageRecordsCmd.java
new file mode 100644
index 0000000..13710f9
--- /dev/null
+++ b/api/src/org/apache/cloudstack/api/command/admin/usage/GenerateUsageRecordsCmd.java
@@ -0,0 +1,89 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+package org.apache.cloudstack.api.command.admin.usage;
+
+import java.util.Date;
+
+import org.apache.cloudstack.api.*;
+import org.apache.cloudstack.api.response.DomainResponse;
+import org.apache.log4j.Logger;
+
+import org.apache.cloudstack.api.APICommand;
+import org.apache.cloudstack.api.response.SuccessResponse;
+import com.cloud.user.Account;
+
+@APICommand(name = "generateUsageRecords", description="Generates usage records. This will generate records only if there any records to be generated, i.e if the scheduled usage job was not run or failed", responseObject=SuccessResponse.class)
+public class GenerateUsageRecordsCmd extends BaseCmd {
+    public static final Logger s_logger = Logger.getLogger(GenerateUsageRecordsCmd.class.getName());
+
+    private static final String s_name = "generateusagerecordsresponse";
+
+    /////////////////////////////////////////////////////
+    //////////////// API parameters /////////////////////
+    /////////////////////////////////////////////////////
+
+    @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.UUID, entityType = DomainResponse.class,
+            description="List events for the specified domain.")
+    private Long domainId;
+
+    @Parameter(name=ApiConstants.END_DATE, type=CommandType.DATE, required=true, description="End date range for usage record query. Use yyyy-MM-dd as the date format, e.g. startDate=2009-06-03.")
+    private Date endDate;
+
+    @Parameter(name=ApiConstants.START_DATE, type=CommandType.DATE, required=true, description="Start date range for usage record query. Use yyyy-MM-dd as the date format, e.g. startDate=2009-06-01.")
+    private Date startDate;
+
+    /////////////////////////////////////////////////////
+    /////////////////// Accessors ///////////////////////
+    /////////////////////////////////////////////////////
+
+    public Long getDomainId() {
+        return domainId;
+    }
+
+    public Date getEndDate() {
+        return endDate;
+    }
+
+    public Date getStartDate() {
+        return startDate;
+    }
+
+    /////////////////////////////////////////////////////
+    /////////////// API Implementation///////////////////
+    /////////////////////////////////////////////////////
+
+    @Override
+    public String getCommandName() {
+        return s_name;
+    }
+    
+    @Override
+    public long getEntityOwnerId() {
+        return Account.ACCOUNT_ID_SYSTEM;
+    }
+
+    @Override
+    public void execute(){
+        boolean result = _usageService.generateUsageRecords(this);
+        if (result) {
+            SuccessResponse response = new SuccessResponse(getCommandName());
+            this.setResponseObject(response);
+        } else {
+            throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to generate usage records");
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/fc0bf21a/api/src/org/apache/cloudstack/api/command/admin/usage/GetUsageRecordsCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/admin/usage/GetUsageRecordsCmd.java b/api/src/org/apache/cloudstack/api/command/admin/usage/GetUsageRecordsCmd.java
new file mode 100644
index 0000000..f4960dd
--- /dev/null
+++ b/api/src/org/apache/cloudstack/api/command/admin/usage/GetUsageRecordsCmd.java
@@ -0,0 +1,126 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+package org.apache.cloudstack.api.command.admin.usage;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.TimeZone;
+
+import org.apache.cloudstack.api.APICommand;
+import org.apache.cloudstack.api.ApiConstants;
+import org.apache.cloudstack.api.BaseListCmd;
+import org.apache.cloudstack.api.Parameter;
+import org.apache.cloudstack.api.response.AccountResponse;
+import org.apache.cloudstack.api.response.DomainResponse;
+import org.apache.cloudstack.api.response.ListResponse;
+import org.apache.cloudstack.api.response.ProjectResponse;
+import org.apache.cloudstack.api.response.UsageRecordResponse;
+import org.apache.cloudstack.usage.Usage;
+import org.apache.log4j.Logger;
+
+@APICommand(name = "listUsageRecords", description="Lists usage records for accounts", responseObject=UsageRecordResponse.class)
+public class GetUsageRecordsCmd extends BaseListCmd {
+    public static final Logger s_logger = Logger.getLogger(GetUsageRecordsCmd.class.getName());
+
+    private static final String s_name = "listusagerecordsresponse";
+
+    /////////////////////////////////////////////////////
+    //////////////// API parameters /////////////////////
+    /////////////////////////////////////////////////////
+
+    @Parameter(name=ApiConstants.ACCOUNT, type=CommandType.STRING, description="List usage records for the specified user.")
+    private String accountName;
+
+    @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.UUID, entityType = DomainResponse.class,
+            description="List usage records for the specified domain.")
+    private Long domainId;
+
+    @Parameter(name=ApiConstants.END_DATE, type=CommandType.DATE, required=true, description="End date range for usage record query. Use yyyy-MM-dd as the date format, e.g. startDate=2009-06-03.")
+    private Date endDate;
+
+    @Parameter(name=ApiConstants.START_DATE, type=CommandType.DATE, required=true, description="Start date range for usage record query. Use yyyy-MM-dd as the date format, e.g. startDate=2009-06-01.")
+    private Date startDate;
+
+    @Parameter(name=ApiConstants.ACCOUNT_ID, type=CommandType.UUID, entityType = AccountResponse.class,
+            description="List usage records for the specified account")
+    private Long accountId;
+
+    @Parameter(name=ApiConstants.PROJECT_ID, type=CommandType.UUID, entityType = ProjectResponse.class,
+            description="List usage records for specified project")
+    private Long projectId;
+
+    @Parameter(name=ApiConstants.TYPE, type=CommandType.LONG, description="List usage records for the specified usage type")
+    private Long usageType;
+
+    /////////////////////////////////////////////////////
+    /////////////////// Accessors ///////////////////////
+    /////////////////////////////////////////////////////
+
+    public String getAccountName() {
+        return accountName;
+    }
+
+    public Long getDomainId() {
+        return domainId;
+    }
+
+    public Date getEndDate() {
+        return endDate;
+    }
+
+    public Date getStartDate() {
+        return startDate;
+    }
+
+    public Long getAccountId() {
+        return accountId;
+    }
+
+    public Long getUsageType() {
+        return usageType;
+    }
+
+    public Long getProjectId() {
+        return projectId;
+    }
+
+    /////////////////////////////////////////////////////
+    /////////////// API Implementation///////////////////
+    /////////////////////////////////////////////////////
+
+    @Override
+    public String getCommandName() {
+        return s_name;
+    }
+
+    @Override
+    public void execute(){
+        List<? extends Usage> usageRecords = _usageService.getUsageRecords(this);
+        ListResponse<UsageRecordResponse> response = new ListResponse<UsageRecordResponse>();
+        List<UsageRecordResponse> usageResponses = new ArrayList<UsageRecordResponse>();
+        for(Usage usageRecord: usageRecords){
+        	UsageRecordResponse usageResponse = _responseGenerator.createUsageResponse(usageRecord);
+        	usageResponse.setObjectName("usagerecord");
+        	usageResponses.add(usageResponse);
+        }
+        
+        response.setResponses(usageResponses);
+        response.setResponseName(getCommandName());
+        this.setResponseObject(response);
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/fc0bf21a/api/src/org/apache/cloudstack/api/command/admin/usage/ListTrafficMonitorsCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/admin/usage/ListTrafficMonitorsCmd.java b/api/src/org/apache/cloudstack/api/command/admin/usage/ListTrafficMonitorsCmd.java
new file mode 100644
index 0000000..e8e3b22
--- /dev/null
+++ b/api/src/org/apache/cloudstack/api/command/admin/usage/ListTrafficMonitorsCmd.java
@@ -0,0 +1,84 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+package org.apache.cloudstack.api.command.admin.usage;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.inject.Inject;
+
+import org.apache.cloudstack.api.APICommand;
+import org.apache.cloudstack.api.ApiConstants;
+import org.apache.cloudstack.api.BaseListCmd;
+import org.apache.cloudstack.api.Parameter;
+import org.apache.cloudstack.api.command.user.offering.ListServiceOfferingsCmd;
+import org.apache.cloudstack.api.response.ListResponse;
+import org.apache.cloudstack.api.response.TrafficMonitorResponse;
+import org.apache.cloudstack.api.response.ZoneResponse;
+import org.apache.log4j.Logger;
+
+import com.cloud.host.Host;
+
+
+@APICommand(name = "listTrafficMonitors", description="List traffic monitor Hosts.", responseObject = TrafficMonitorResponse.class)
+public class ListTrafficMonitorsCmd extends BaseListCmd {
+    public static final Logger s_logger = Logger.getLogger(ListServiceOfferingsCmd.class.getName());
+    private static final String s_name = "listtrafficmonitorsresponse";
+
+    /////////////////////////////////////////////////////
+    //////////////// API parameters /////////////////////
+    /////////////////////////////////////////////////////
+
+    @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.UUID, entityType = ZoneResponse.class,
+            required = true, description="zone Id")
+    private long zoneId;
+
+    /////////////////////////////////////////////////////
+    /////////////////// Accessors ///////////////////////
+    /////////////////////////////////////////////////////
+
+    public long getZoneId() {
+        return zoneId;
+    }
+
+    /////////////////////////////////////////////////////
+    /////////////// API Implementation///////////////////
+    /////////////////////////////////////////////////////
+
+    @Override
+    public String getCommandName() {
+        return s_name;
+    }
+
+    @Override
+    public void execute(){
+        List<? extends Host> trafficMonitors = _networkUsageService.listTrafficMonitors(this);
+
+        ListResponse<TrafficMonitorResponse> listResponse = new ListResponse<TrafficMonitorResponse>();
+        List<TrafficMonitorResponse> responses = new ArrayList<TrafficMonitorResponse>();
+        for (Host trafficMonitor : trafficMonitors) {
+            TrafficMonitorResponse response =  _responseGenerator.createTrafficMonitorResponse(trafficMonitor);
+            response.setObjectName("trafficmonitor");
+            response.setResponseName(getCommandName());
+            responses.add(response);
+        }
+
+        listResponse.setResponses(responses);
+        listResponse.setResponseName(getCommandName());
+        this.setResponseObject(listResponse);
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/fc0bf21a/api/src/org/apache/cloudstack/api/command/admin/usage/ListUsageTypesCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/admin/usage/ListUsageTypesCmd.java b/api/src/org/apache/cloudstack/api/command/admin/usage/ListUsageTypesCmd.java
new file mode 100644
index 0000000..bc02911
--- /dev/null
+++ b/api/src/org/apache/cloudstack/api/command/admin/usage/ListUsageTypesCmd.java
@@ -0,0 +1,51 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+package org.apache.cloudstack.api.command.admin.usage;
+
+import java.util.List;
+
+import org.apache.cloudstack.api.APICommand;
+import org.apache.log4j.Logger;
+
+import org.apache.cloudstack.api.BaseCmd;
+import org.apache.cloudstack.api.response.ListResponse;
+import org.apache.cloudstack.api.response.UsageTypeResponse;
+import com.cloud.user.Account;
+
+@APICommand(name = "listUsageTypes", description = "List Usage Types", responseObject = UsageTypeResponse.class)
+public class ListUsageTypesCmd extends BaseCmd {
+    public static final Logger s_logger = Logger.getLogger(ListUsageTypesCmd.class.getName());
+    private static final String s_name = "listusagetypesresponse";
+
+    @Override
+    public String getCommandName() {
+        return s_name;
+    }
+
+    public long getEntityOwnerId() {
+        return Account.ACCOUNT_ID_SYSTEM;
+    }
+
+    @Override
+    public void execute() {
+        List<UsageTypeResponse> result = _usageService.listUsageTypes();
+        ListResponse<UsageTypeResponse> response = new ListResponse<UsageTypeResponse>();
+        response.setResponses(result);
+        response.setResponseName(getCommandName());
+        this.setResponseObject(response);
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/fc0bf21a/api/src/org/apache/cloudstack/usage/Usage.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/usage/Usage.java b/api/src/org/apache/cloudstack/usage/Usage.java
new file mode 100644
index 0000000..c74d3b7
--- /dev/null
+++ b/api/src/org/apache/cloudstack/usage/Usage.java
@@ -0,0 +1,69 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+package org.apache.cloudstack.usage;
+
+import org.apache.cloudstack.api.InternalIdentity;
+
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.Table;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
+
+public interface Usage {
+	
+	public long getId();
+
+	public Long getZoneId();
+
+	public Long getAccountId();
+
+    public Long getDomainId();
+
+	public String getDescription();
+
+	public String getUsageDisplay();
+
+	public int getUsageType();
+
+    public Double getRawUsage();
+
+    public Long getVmInstanceId();
+
+    public String getVmName();
+
+    public Long getOfferingId();
+
+    public Long getTemplateId();
+
+    public Long getUsageId();
+    
+    public String getType();
+    
+    public Long getNetworkId();
+
+    public Long getSize();
+    
+	public Date getStartDate();
+
+	public Date getEndDate();
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/fc0bf21a/api/src/org/apache/cloudstack/usage/UsageService.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/usage/UsageService.java b/api/src/org/apache/cloudstack/usage/UsageService.java
new file mode 100755
index 0000000..3838225
--- /dev/null
+++ b/api/src/org/apache/cloudstack/usage/UsageService.java
@@ -0,0 +1,64 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+package org.apache.cloudstack.usage;
+
+import java.util.List;
+import java.util.TimeZone;
+
+import org.apache.cloudstack.api.command.admin.usage.GenerateUsageRecordsCmd;
+import org.apache.cloudstack.api.command.admin.usage.GetUsageRecordsCmd;
+import org.apache.cloudstack.api.response.UsageTypeResponse;
+
+public interface UsageService {
+    /**
+     * Generate Billing Records from the last time it was generated to the
+     * time specified.
+     * 
+     * @param cmd the command wrapping the generate parameters
+     *   - userId unique id of the user, pass in -1 to generate billing records
+     *            for all users
+     *   - startDate
+     *   - endDate inclusive.  If date specified is greater than the current time, the
+     *             system will use the current time.
+     */
+    boolean generateUsageRecords(GenerateUsageRecordsCmd cmd);
+    
+    /**
+     * Retrieves all Usage Records generated between the start and end date specified
+     * 
+     * @param userId unique id of the user, pass in -1 to retrieve billing records
+     *        for all users
+     * @param startDate inclusive.
+     * @param endDate inclusive.  If date specified is greater than the current time, the
+     *                system will use the current time.
+     * @param page The page of usage records to see (500 results are returned at a time, if
+     *             more than 500 records exist then additional results can be retrieved by
+     *             the appropriate page number)
+     * @return a list of usage records
+     */
+    List<? extends Usage> getUsageRecords(GetUsageRecordsCmd cmd);
+
+    /**
+     * Retrieves the timezone used for usage aggregation.  One day is represented as midnight to 11:59:59pm
+     * in the given time zone
+     * @return the timezone specified by the config value usage.aggregation.timezone, or GMT if null
+     */
+    TimeZone getUsageTimezone();
+
+	List<UsageTypeResponse> listUsageTypes();
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/fc0bf21a/api/src/org/apache/cloudstack/usage/UsageTypes.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/usage/UsageTypes.java b/api/src/org/apache/cloudstack/usage/UsageTypes.java
new file mode 100644
index 0000000..2baa1d2
--- /dev/null
+++ b/api/src/org/apache/cloudstack/usage/UsageTypes.java
@@ -0,0 +1,58 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+package org.apache.cloudstack.usage;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.cloudstack.api.response.UsageTypeResponse;
+
+public class UsageTypes {
+    public static final int RUNNING_VM = 1;
+    public static final int ALLOCATED_VM = 2; // used for tracking how long storage has been allocated for a VM
+    public static final int IP_ADDRESS = 3;
+    public static final int NETWORK_BYTES_SENT = 4;
+    public static final int NETWORK_BYTES_RECEIVED = 5;
+    public static final int VOLUME = 6;
+    public static final int TEMPLATE = 7;
+    public static final int ISO = 8;
+    public static final int SNAPSHOT = 9;
+    public static final int SECURITY_GROUP = 10;
+    public static final int LOAD_BALANCER_POLICY = 11;
+    public static final int PORT_FORWARDING_RULE = 12;
+    public static final int NETWORK_OFFERING = 13;
+    public static final int VPN_USERS = 14;
+    
+    public static List<UsageTypeResponse> listUsageTypes(){
+    	List<UsageTypeResponse> responseList = new ArrayList<UsageTypeResponse>();
+    	responseList.add(new UsageTypeResponse(RUNNING_VM, "Running Vm Usage"));
+    	responseList.add(new UsageTypeResponse(ALLOCATED_VM, "Allocated Vm Usage"));
+    	responseList.add(new UsageTypeResponse(IP_ADDRESS, "IP Address Usage"));
+    	responseList.add(new UsageTypeResponse(NETWORK_BYTES_SENT, "Network Usage (Bytes Sent)"));
+    	responseList.add(new UsageTypeResponse(NETWORK_BYTES_RECEIVED, "Network Usage (Bytes Received)"));
+    	responseList.add(new UsageTypeResponse(VOLUME, "Volume Usage"));
+    	responseList.add(new UsageTypeResponse(TEMPLATE, "Template Usage"));
+    	responseList.add(new UsageTypeResponse(ISO, "ISO Usage"));
+    	responseList.add(new UsageTypeResponse(SNAPSHOT, "Snapshot Usage"));
+    	responseList.add(new UsageTypeResponse(SECURITY_GROUP, "Security Group Usage"));
+    	responseList.add(new UsageTypeResponse(LOAD_BALANCER_POLICY, "Load Balancer Usage"));
+    	responseList.add(new UsageTypeResponse(PORT_FORWARDING_RULE, "Port Forwarding Usage"));
+    	responseList.add(new UsageTypeResponse(NETWORK_OFFERING, "Network Offering Usage"));
+    	responseList.add(new UsageTypeResponse(VPN_USERS, "VPN users usage"));
+    	return responseList;
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/fc0bf21a/client/tomcatconf/componentContext.xml.in
----------------------------------------------------------------------
diff --git a/client/tomcatconf/componentContext.xml.in b/client/tomcatconf/componentContext.xml.in
index d2e3ede..7c8ab61 100644
--- a/client/tomcatconf/componentContext.xml.in
+++ b/client/tomcatconf/componentContext.xml.in
@@ -36,7 +36,7 @@
   -->
   <bean id="databaseUpgradeChecker" class="com.cloud.upgrade.DatabaseUpgradeChecker" />
   
-  <bean id="management-server" class ="com.cloud.server.ManagementServerExtImpl" />
+  <bean id="management-server" class ="com.cloud.server.ManagementServerImpl" />
   <bean id="configuration-server" class="com.cloud.server.ConfigurationServerImpl" />
    
   <bean id="clusterManagerImpl" class="com.cloud.cluster.ClusterManagerImpl" />

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/fc0bf21a/plugins/hypervisors/simulator/src/com/cloud/server/ManagementServerSimulatorImpl.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/simulator/src/com/cloud/server/ManagementServerSimulatorImpl.java b/plugins/hypervisors/simulator/src/com/cloud/server/ManagementServerSimulatorImpl.java
index db4b619..728271c 100644
--- a/plugins/hypervisors/simulator/src/com/cloud/server/ManagementServerSimulatorImpl.java
+++ b/plugins/hypervisors/simulator/src/com/cloud/server/ManagementServerSimulatorImpl.java
@@ -21,7 +21,7 @@ import java.util.List;
 
 import com.cloud.api.commands.ConfigureSimulator;
 
-public class ManagementServerSimulatorImpl extends ManagementServerExtImpl {
+public class ManagementServerSimulatorImpl extends ManagementServerImpl {
     @Override
     public List<Class<?>> getCommands() {
         List<Class<?>> cmdList = super.getCommands();

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/fc0bf21a/plugins/network-elements/dns-notifier/resources/components-example.xml
----------------------------------------------------------------------
diff --git a/plugins/network-elements/dns-notifier/resources/components-example.xml b/plugins/network-elements/dns-notifier/resources/components-example.xml
index 412da0e..36441bd 100755
--- a/plugins/network-elements/dns-notifier/resources/components-example.xml
+++ b/plugins/network-elements/dns-notifier/resources/components-example.xml
@@ -29,7 +29,7 @@ under the License.
     </system-integrity-checker>
 
     <interceptor library="com.cloud.configuration.DefaultInterceptorLibrary"/>
-    <management-server class="com.cloud.server.ManagementServerExtImpl" library="com.cloud.configuration.PremiumComponentLibrary">
+    <management-server class="com.cloud.server.ManagementServerImpl" library="com.cloud.configuration.PremiumComponentLibrary">
         <dao name="Configuration configuration server" class="com.cloud.configuration.dao.ConfigurationDaoImpl">
              <param name="premium">true</param>
         </dao>

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/fc0bf21a/server/src/com/cloud/api/ApiDBUtils.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/api/ApiDBUtils.java b/server/src/com/cloud/api/ApiDBUtils.java
index 8e950ab..83132c6 100755
--- a/server/src/com/cloud/api/ApiDBUtils.java
+++ b/server/src/com/cloud/api/ApiDBUtils.java
@@ -83,8 +83,6 @@ import com.cloud.api.query.vo.StoragePoolJoinVO;
 import com.cloud.api.query.vo.UserAccountJoinVO;
 import com.cloud.api.query.vo.UserVmJoinVO;
 import com.cloud.api.query.vo.VolumeJoinVO;
-import com.cloud.api.query.dao.*;
-import com.cloud.api.query.vo.*;
 import com.cloud.async.AsyncJob;
 import com.cloud.async.AsyncJobManager;
 import com.cloud.async.AsyncJobVO;
@@ -108,6 +106,7 @@ import com.cloud.host.Host;
 import com.cloud.host.HostStats;
 import com.cloud.host.HostVO;
 import com.cloud.host.dao.HostDao;
+import com.cloud.host.dao.HostDetailsDao;
 import com.cloud.hypervisor.Hypervisor.HypervisorType;
 import com.cloud.network.IpAddress;
 import com.cloud.network.Network;
@@ -156,10 +155,6 @@ import com.cloud.network.dao.Site2SiteCustomerGatewayDao;
 import com.cloud.network.dao.Site2SiteCustomerGatewayVO;
 import com.cloud.network.dao.Site2SiteVpnGatewayDao;
 import com.cloud.network.dao.Site2SiteVpnGatewayVO;
-import com.cloud.network.*;
-import com.cloud.network.as.*;
-import com.cloud.network.as.dao.*;
-import com.cloud.network.dao.*;
 import com.cloud.network.router.VirtualRouter;
 import com.cloud.network.rules.FirewallRuleVO;
 import com.cloud.network.security.SecurityGroup;
@@ -313,6 +308,7 @@ public class ApiDBUtils {
     static VpcOfferingDao _vpcOfferingDao;
     static SnapshotPolicyDao _snapshotPolicyDao;
     static AsyncJobDao _asyncJobDao;
+    static HostDetailsDao _hostDetailsDao;
 
     @Inject private ManagementServer ms;
     @Inject public AsyncJobManager asyncMgr;
@@ -410,6 +406,7 @@ public class ApiDBUtils {
     @Inject private VpcOfferingDao vpcOfferingDao;
     @Inject private SnapshotPolicyDao snapshotPolicyDao;
     @Inject private AsyncJobDao asyncJobDao;
+    @Inject private HostDetailsDao hostDetailsDao;
 
     @PostConstruct
     void init() {
@@ -507,6 +504,7 @@ public class ApiDBUtils {
         _vpcOfferingDao = vpcOfferingDao;
         _snapshotPolicyDao = snapshotPolicyDao;
         _asyncJobDao = asyncJobDao;
+        _hostDetailsDao = hostDetailsDao;
 
         // Note: stats collector should already have been initialized by this time, otherwise a null instance is returned
         _statsCollector = StatsCollector.getInstance();
@@ -1493,4 +1491,8 @@ public class ApiDBUtils {
    public static DataCenterJoinVO newDataCenterView(DataCenter dc){
        return _dcJoinDao.newDataCenterView(dc);
    }
+   
+   public static Map<String, String> findHostDetailsById(long hostId){
+	   return _hostDetailsDao.findDetails(hostId);
+   }
 }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/fc0bf21a/server/src/com/cloud/api/ApiResponseHelper.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/api/ApiResponseHelper.java b/server/src/com/cloud/api/ApiResponseHelper.java
index 411de94..8c97615 100755
--- a/server/src/com/cloud/api/ApiResponseHelper.java
+++ b/server/src/com/cloud/api/ApiResponseHelper.java
@@ -81,7 +81,9 @@ import org.apache.cloudstack.api.response.SystemVmInstanceResponse;
 import org.apache.cloudstack.api.response.SystemVmResponse;
 import org.apache.cloudstack.api.response.TemplatePermissionsResponse;
 import org.apache.cloudstack.api.response.TemplateResponse;
+import org.apache.cloudstack.api.response.TrafficMonitorResponse;
 import org.apache.cloudstack.api.response.TrafficTypeResponse;
+import org.apache.cloudstack.api.response.UsageRecordResponse;
 import org.apache.cloudstack.api.response.UserResponse;
 import org.apache.cloudstack.api.response.UserVmResponse;
 import org.apache.cloudstack.api.response.VirtualRouterProviderResponse;
@@ -103,6 +105,7 @@ import com.cloud.configuration.Configuration;
 import com.cloud.configuration.Resource.ResourceOwnerType;
 import com.cloud.configuration.ResourceCount;
 import com.cloud.configuration.ResourceLimit;
+import com.cloud.dao.EntityManager;
 import com.cloud.dc.*;
 import com.cloud.dc.Vlan.VlanType;
 import com.cloud.domain.Domain;
@@ -139,6 +142,7 @@ import com.cloud.network.dao.PhysicalNetworkVO;
 import com.cloud.network.router.VirtualRouter;
 import com.cloud.network.rules.*;
 import com.cloud.network.security.SecurityGroup;
+import com.cloud.network.security.SecurityGroupVO;
 import com.cloud.network.security.SecurityRule;
 import com.cloud.network.security.SecurityRule.SecurityRuleType;
 import com.cloud.network.vpc.PrivateGateway;
@@ -148,6 +152,7 @@ import com.cloud.network.vpc.VpcOffering;
 import com.cloud.offering.DiskOffering;
 import com.cloud.offering.NetworkOffering;
 import com.cloud.offering.ServiceOffering;
+import com.cloud.offerings.NetworkOfferingVO;
 import com.cloud.org.Cluster;
 import com.cloud.projects.Project;
 import com.cloud.projects.ProjectAccount;
@@ -155,6 +160,7 @@ import com.cloud.projects.ProjectInvitation;
 import com.cloud.server.Criteria;
 import com.cloud.server.ResourceTag;
 import com.cloud.server.ResourceTag.TaggedResourceType;
+import com.cloud.service.ServiceOfferingVO;
 import com.cloud.storage.*;
 import com.cloud.storage.Storage.ImageFormat;
 import com.cloud.storage.Storage.StoragePoolType;
@@ -174,6 +180,7 @@ import com.cloud.utils.net.NetUtils;
 import com.cloud.vm.ConsoleProxyVO;
 import com.cloud.vm.InstanceGroup;
 import com.cloud.vm.NicProfile;
+import com.cloud.vm.VMInstanceVO;
 import com.cloud.vm.VirtualMachine;
 import com.cloud.vm.VirtualMachine.Type;
 import org.apache.cloudstack.acl.ControlledEntity;
@@ -185,11 +192,16 @@ import org.apache.cloudstack.api.ResponseGenerator;
 import org.apache.cloudstack.api.command.user.job.QueryAsyncJobResultCmd;
 import org.apache.cloudstack.api.response.*;
 import org.apache.cloudstack.region.Region;
+import org.apache.cloudstack.usage.Usage;
+import org.apache.cloudstack.usage.UsageService;
+import org.apache.cloudstack.usage.UsageTypes;
 import org.apache.log4j.Logger;
 
 import java.text.DecimalFormat;
 import java.util.*;
 
+import javax.inject.Inject;
+
 import static java.util.Collections.emptyList;
 import static java.util.Collections.singletonList;
 
@@ -198,6 +210,8 @@ public class ApiResponseHelper implements ResponseGenerator {
 
     public final Logger s_logger = Logger.getLogger(ApiResponseHelper.class);
     private static final DecimalFormat s_percentFormat = new DecimalFormat("##.##");
+    @Inject private EntityManager _entityMgr = null;
+    @Inject private UsageService _usageSvc = null;
 
     @Override
     public UserResponse createUserResponse(User user) {
@@ -3118,4 +3132,243 @@ public class ApiResponseHelper implements ResponseGenerator {
         return response;
     }
 
+
+
+	@Override
+	public UsageRecordResponse createUsageResponse(Usage usageRecord) {
+		UsageRecordResponse usageRecResponse = new UsageRecordResponse();
+
+		Account account = ApiDBUtils.findAccountByIdIncludingRemoved(usageRecord.getAccountId());
+		if (account.getType() == Account.ACCOUNT_TYPE_PROJECT) {
+			//find the project
+			Project project = ApiDBUtils.findProjectByProjectAccountIdIncludingRemoved(account.getId());
+			usageRecResponse.setProjectId(project.getUuid());
+			usageRecResponse.setProjectName(project.getName());
+		} else {
+			usageRecResponse.setAccountId(account.getUuid());
+			usageRecResponse.setAccountName(account.getAccountName());
+		}
+
+		Domain domain = ApiDBUtils.findDomainById(usageRecord.getDomainId());
+		if (domain != null) {
+			usageRecResponse.setDomainId(domain.getUuid());
+		}
+
+		if (usageRecord.getZoneId() != null) {
+			DataCenter zone = ApiDBUtils.findZoneById(usageRecord.getZoneId());
+			if (zone != null) {
+				usageRecResponse.setZoneId(zone.getUuid());
+			}
+		}
+		usageRecResponse.setDescription(usageRecord.getDescription());
+		usageRecResponse.setUsage(usageRecord.getUsageDisplay());
+		usageRecResponse.setUsageType(usageRecord.getUsageType());
+		if (usageRecord.getVmInstanceId() != null) {
+			VMInstanceVO vm = _entityMgr.findByIdIncludingRemoved(VMInstanceVO.class, usageRecord.getVmInstanceId());
+			usageRecResponse.setVirtualMachineId(vm.getUuid());
+		}
+		usageRecResponse.setVmName(usageRecord.getVmName());
+		if (usageRecord.getTemplateId() != null) {
+			VMTemplateVO template = ApiDBUtils.findTemplateById(usageRecord.getTemplateId());
+			if (template != null) {
+				usageRecResponse.setTemplateId(template.getUuid());
+			}
+		}
+
+		if(usageRecord.getUsageType() == UsageTypes.RUNNING_VM || usageRecord.getUsageType() == UsageTypes.ALLOCATED_VM){
+			ServiceOfferingVO svcOffering = _entityMgr.findByIdIncludingRemoved(ServiceOfferingVO.class, usageRecord.getOfferingId().toString());
+			//Service Offering Id
+			usageRecResponse.setOfferingId(svcOffering.getUuid());
+			//VM Instance ID
+			VMInstanceVO vm = _entityMgr.findByIdIncludingRemoved(VMInstanceVO.class, usageRecord.getUsageId().toString());
+			usageRecResponse.setUsageId(vm.getUuid());
+			//Hypervisor Type
+			usageRecResponse.setType(usageRecord.getType());
+
+		} else if(usageRecord.getUsageType() == UsageTypes.IP_ADDRESS){
+			//isSourceNAT
+			usageRecResponse.setSourceNat((usageRecord.getType().equals("SourceNat"))?true:false);
+			//isSystem
+			usageRecResponse.setSystem((usageRecord.getSize() == 1)?true:false);
+			//IP Address ID
+			IPAddressVO ip = _entityMgr.findByIdIncludingRemoved(IPAddressVO.class, usageRecord.getUsageId().toString());
+			usageRecResponse.setUsageId(ip.getUuid());
+
+		} else if(usageRecord.getUsageType() == UsageTypes.NETWORK_BYTES_SENT || usageRecord.getUsageType() == UsageTypes.NETWORK_BYTES_RECEIVED){
+			//Device Type
+			usageRecResponse.setType(usageRecord.getType());
+			if(usageRecord.getType().equals("DomainRouter")){
+				//Domain Router Id
+				VMInstanceVO vm = _entityMgr.findByIdIncludingRemoved(VMInstanceVO.class, usageRecord.getUsageId().toString());
+				usageRecResponse.setUsageId(vm.getUuid());
+			} else {
+				//External Device Host Id
+				HostVO host = _entityMgr.findByIdIncludingRemoved(HostVO.class, usageRecord.getUsageId().toString());
+				usageRecResponse.setUsageId(host.getUuid());
+			}
+			//Network ID
+			NetworkVO network = _entityMgr.findByIdIncludingRemoved(NetworkVO.class, usageRecord.getNetworkId().toString());
+			usageRecResponse.setNetworkId(network.getUuid());
+
+		} else if(usageRecord.getUsageType() == UsageTypes.VOLUME){
+			//Volume ID
+			VolumeVO volume = _entityMgr.findByIdIncludingRemoved(VolumeVO.class, usageRecord.getUsageId().toString());
+			usageRecResponse.setUsageId(volume.getUuid());
+			//Volume Size
+			usageRecResponse.setSize(usageRecord.getSize());
+			//Disk Offering Id
+			if(usageRecord.getOfferingId() != null){
+				DiskOfferingVO diskOff = _entityMgr.findByIdIncludingRemoved(DiskOfferingVO.class, usageRecord.getOfferingId().toString());
+				usageRecResponse.setOfferingId(diskOff.getUuid());
+			}
+
+		} else if(usageRecord.getUsageType() == UsageTypes.TEMPLATE || usageRecord.getUsageType() == UsageTypes.ISO){
+			//Template/ISO ID
+			VMTemplateVO tmpl = _entityMgr.findByIdIncludingRemoved(VMTemplateVO.class, usageRecord.getUsageId().toString());
+			usageRecResponse.setUsageId(tmpl.getUuid());
+			//Template/ISO Size
+			usageRecResponse.setSize(usageRecord.getSize());
+
+		} else if(usageRecord.getUsageType() == UsageTypes.SNAPSHOT){
+			//Snapshot ID
+			SnapshotVO snap = _entityMgr.findByIdIncludingRemoved(SnapshotVO.class, usageRecord.getUsageId().toString());
+			usageRecResponse.setUsageId(snap.getUuid());
+			//Snapshot Size
+			usageRecResponse.setSize(usageRecord.getSize());
+
+		} else if(usageRecord.getUsageType() == UsageTypes.LOAD_BALANCER_POLICY){
+			//Load Balancer Policy ID
+			usageRecResponse.setUsageId(usageRecord.getUsageId().toString());
+
+		} else if(usageRecord.getUsageType() == UsageTypes.PORT_FORWARDING_RULE){
+			//Port Forwarding Rule ID
+			usageRecResponse.setUsageId(usageRecord.getUsageId().toString());
+
+		} else if(usageRecord.getUsageType() == UsageTypes.NETWORK_OFFERING){
+			//Network Offering Id
+			NetworkOfferingVO netOff = _entityMgr.findByIdIncludingRemoved(NetworkOfferingVO.class, usageRecord.getOfferingId().toString());
+			usageRecResponse.setOfferingId(netOff.getUuid());
+			//is Default
+			usageRecResponse.setDefault((usageRecord.getUsageId() == 1)? true:false);
+
+		} else if(usageRecord.getUsageType() == UsageTypes.VPN_USERS){
+			//VPN User ID
+			usageRecResponse.setUsageId(usageRecord.getUsageId().toString());
+
+		} else if(usageRecord.getUsageType() == UsageTypes.SECURITY_GROUP){
+			//Security Group Id
+			SecurityGroupVO sg = _entityMgr.findByIdIncludingRemoved(SecurityGroupVO.class, usageRecord.getUsageId().toString());
+			usageRecResponse.setUsageId(sg.getUuid());
+		}
+
+		if (usageRecord.getRawUsage() != null) {
+			DecimalFormat decimalFormat = new DecimalFormat("###########.######");
+			usageRecResponse.setRawUsage(decimalFormat.format(usageRecord.getRawUsage()));
+		}
+
+		if (usageRecord.getStartDate() != null) {
+			usageRecResponse.setStartDate(getDateStringInternal(usageRecord.getStartDate()));
+		}
+		if (usageRecord.getEndDate() != null) {
+			usageRecResponse.setEndDate(getDateStringInternal(usageRecord.getEndDate()));
+		}
+
+		return usageRecResponse;
+	}
+
+	
+    public String getDateStringInternal(Date inputDate) {
+        if (inputDate == null) return null;
+
+        TimeZone tz = _usageSvc.getUsageTimezone();
+        Calendar cal = Calendar.getInstance(tz);
+        cal.setTime(inputDate);
+
+        StringBuffer sb = new StringBuffer();
+        sb.append(cal.get(Calendar.YEAR)+"-");
+
+        int month = cal.get(Calendar.MONTH) + 1;
+        if (month < 10) {
+            sb.append("0" + month + "-");
+        } else {
+            sb.append(month+"-");
+        }
+
+        int day = cal.get(Calendar.DAY_OF_MONTH);
+        if (day < 10) {
+            sb.append("0" + day);
+        } else {
+            sb.append(""+day);
+        }
+
+        sb.append("'T'");
+
+        int hour = cal.get(Calendar.HOUR_OF_DAY);
+        if (hour < 10) {
+            sb.append("0" + hour + ":");
+        } else {
+            sb.append(hour+":");
+        }
+
+        int minute = cal.get(Calendar.MINUTE);
+        if (minute < 10) {
+            sb.append("0" + minute + ":");
+        } else {
+            sb.append(minute+":");
+        }
+
+        int seconds = cal.get(Calendar.SECOND);
+        if (seconds < 10) {
+            sb.append("0" + seconds);
+        } else {
+            sb.append(""+seconds);
+        }
+
+        double offset = cal.get(Calendar.ZONE_OFFSET);
+        if (tz.inDaylightTime(inputDate)) {
+            offset += (1.0*tz.getDSTSavings()); // add the timezone's DST value (typically 1 hour expressed in milliseconds)
+        }
+
+        offset = offset / (1000d*60d*60d);
+        int hourOffset = (int)offset;
+        double decimalVal = Math.abs(offset) - Math.abs(hourOffset);
+        int minuteOffset = (int)(decimalVal * 60);
+
+        if (hourOffset < 0) {
+            if (hourOffset > -10) {
+                sb.append("-0"+Math.abs(hourOffset));
+            } else {
+                sb.append("-"+Math.abs(hourOffset));
+            }
+        } else {
+            if (hourOffset < 10) {
+                sb.append("+0" + hourOffset);
+            } else {
+                sb.append("+" + hourOffset);
+            }
+        }
+
+        sb.append(":");
+
+        if (minuteOffset == 0) {
+            sb.append("00");
+        } else if (minuteOffset < 10) {
+            sb.append("0" + minuteOffset);
+        } else {
+            sb.append("" + minuteOffset);
+        }
+
+        return sb.toString();
+    }
+    
+    @Override
+    public TrafficMonitorResponse createTrafficMonitorResponse(Host trafficMonitor) {
+        Map<String, String> tmDetails = ApiDBUtils.findHostDetailsById(trafficMonitor.getId());
+        TrafficMonitorResponse response = new TrafficMonitorResponse();
+        response.setId(trafficMonitor.getUuid());
+        response.setIpAddress(trafficMonitor.getPrivateIpAddress());
+        response.setNumRetries(tmDetails.get("numRetries"));
+        response.setTimeout(tmDetails.get("timeout"));
+        return response;
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/fc0bf21a/server/src/com/cloud/api/commands/AddTrafficMonitorCmd.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/api/commands/AddTrafficMonitorCmd.java b/server/src/com/cloud/api/commands/AddTrafficMonitorCmd.java
deleted file mode 100644
index 8728959..0000000
--- a/server/src/com/cloud/api/commands/AddTrafficMonitorCmd.java
+++ /dev/null
@@ -1,109 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package com.cloud.api.commands;
-
-import javax.inject.Inject;
-
-import org.apache.cloudstack.api.APICommand;
-import org.apache.cloudstack.api.ApiConstants;
-import org.apache.cloudstack.api.ApiErrorCode;
-import org.apache.cloudstack.api.BaseCmd;
-import org.apache.cloudstack.api.Parameter;
-import org.apache.cloudstack.api.ServerApiException;
-import org.apache.cloudstack.api.response.TrafficMonitorResponse;
-import org.apache.cloudstack.api.response.ZoneResponse;
-import org.apache.log4j.Logger;
-
-import com.cloud.exception.InvalidParameterValueException;
-import com.cloud.host.Host;
-import com.cloud.network.NetworkUsageManager;
-import com.cloud.user.Account;
-import com.cloud.utils.exception.CloudRuntimeException;
-
-@APICommand(name = "addTrafficMonitor", description="Adds Traffic Monitor Host for Direct Network Usage", responseObject = TrafficMonitorResponse.class)
-public class AddTrafficMonitorCmd extends BaseCmd {
-    public static final Logger s_logger = Logger.getLogger(AddTrafficMonitorCmd.class.getName());	
-    private static final String s_name = "addtrafficmonitorresponse";	
-    @Inject NetworkUsageManager networkUsageMgr;
-
-    /////////////////////////////////////////////////////
-    //////////////// API parameters /////////////////////
-    /////////////////////////////////////////////////////
-
-    @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.UUID, entityType = ZoneResponse.class,
-            required = true, description="Zone in which to add the external firewall appliance.")
-    private Long zoneId;
-
-    @Parameter(name=ApiConstants.URL, type=CommandType.STRING, required = true, description="URL of the traffic monitor Host")
-    private String url;	 
-
-    @Parameter(name=ApiConstants.INCL_ZONES, type=CommandType.STRING, description="Traffic going into the listed zones will be metered")
-    private String inclZones;	 
-
-    @Parameter(name=ApiConstants.EXCL_ZONES, type=CommandType.STRING, description="Traffic going into the listed zones will not be metered")
-    private String exclZones;	 
-
-    ///////////////////////////////////////////////////
-    /////////////////// Accessors ///////////////////////
-    /////////////////////////////////////////////////////
-
-    public String getInclZones() {
-        return inclZones;
-    }
-
-    public String getExclZones() {
-        return exclZones;
-    }
-
-    public Long getZoneId() {
-        return zoneId;
-    }
-
-    public String getUrl() {
-        return url;
-    }
-
-    /////////////////////////////////////////////////////
-    /////////////// API Implementation///////////////////
-    /////////////////////////////////////////////////////
-
-    @Override
-    public String getCommandName() {
-        return s_name;
-    }
-
-    @Override
-    public long getEntityOwnerId() {
-        return Account.ACCOUNT_ID_SYSTEM;
-    }
-
-    @Override
-    public void execute(){
-        try {
-            Host trafficMonitor = networkUsageMgr.addTrafficMonitor(this);
-            TrafficMonitorResponse response = networkUsageMgr.getApiResponse(trafficMonitor);
-            response.setObjectName("trafficmonitor");
-            response.setResponseName(getCommandName());
-            this.setResponseObject(response);
-        } catch (InvalidParameterValueException ipve) {
-			throw new ServerApiException(ApiErrorCode.PARAM_ERROR, ipve.getMessage());
-        } catch (CloudRuntimeException cre) {
-			throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, cre.getMessage());
-        }
-    }
-}
-

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/fc0bf21a/server/src/com/cloud/api/commands/DeleteTrafficMonitorCmd.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/api/commands/DeleteTrafficMonitorCmd.java b/server/src/com/cloud/api/commands/DeleteTrafficMonitorCmd.java
deleted file mode 100644
index 081d0be..0000000
--- a/server/src/com/cloud/api/commands/DeleteTrafficMonitorCmd.java
+++ /dev/null
@@ -1,86 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package com.cloud.api.commands;
-
-import javax.inject.Inject;
-
-import org.apache.cloudstack.api.APICommand;
-import org.apache.cloudstack.api.ApiConstants;
-import org.apache.cloudstack.api.ApiErrorCode;
-import org.apache.cloudstack.api.BaseCmd;
-import org.apache.cloudstack.api.Parameter;
-import org.apache.cloudstack.api.ServerApiException;
-import org.apache.cloudstack.api.response.HostResponse;
-import org.apache.cloudstack.api.response.SuccessResponse;
-import org.apache.log4j.Logger;
-
-import com.cloud.exception.InvalidParameterValueException;
-import com.cloud.network.NetworkUsageManager;
-import com.cloud.user.Account;
-
-@APICommand(name = "deleteTrafficMonitor", description="Deletes an traffic monitor host.", responseObject = SuccessResponse.class)
-public class DeleteTrafficMonitorCmd extends BaseCmd {
-    public static final Logger s_logger = Logger.getLogger(DeleteTrafficMonitorCmd.class.getName());	
-    private static final String s_name = "deletetrafficmonitorresponse";	
-    @Inject NetworkUsageManager _networkUsageMgr;
-
-    /////////////////////////////////////////////////////
-    //////////////// API parameters /////////////////////
-    /////////////////////////////////////////////////////
-
-    @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType = HostResponse.class,
-            required = true, description="Id of the Traffic Monitor Host.")
-    private Long id;
-
-    ///////////////////////////////////////////////////
-    /////////////////// Accessors ///////////////////////
-    /////////////////////////////////////////////////////
-
-    public Long getId() {
-        return id;
-    }
-
-    /////////////////////////////////////////////////////
-    /////////////// API Implementation///////////////////
-    /////////////////////////////////////////////////////
-
-    @Override
-    public String getCommandName() {
-        return s_name;
-    }
-
-    @Override
-    public long getEntityOwnerId() {
-        return Account.ACCOUNT_ID_SYSTEM;
-    }
-
-    @Override
-    public void execute(){
-        try {
-            boolean result = _networkUsageMgr.deleteTrafficMonitor(this);
-            if (result) {
-                SuccessResponse response = new SuccessResponse(getCommandName());
-                response.setResponseName(getCommandName());
-                this.setResponseObject(response);
-            } else {
-				throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete traffic monitor.");
-            }
-        } catch (InvalidParameterValueException e) {
-			throw new ServerApiException(ApiErrorCode.PARAM_ERROR, "Failed to delete traffic monitor.");
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/fc0bf21a/server/src/com/cloud/api/commands/GenerateUsageRecordsCmd.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/api/commands/GenerateUsageRecordsCmd.java b/server/src/com/cloud/api/commands/GenerateUsageRecordsCmd.java
deleted file mode 100644
index 4206cf8..0000000
--- a/server/src/com/cloud/api/commands/GenerateUsageRecordsCmd.java
+++ /dev/null
@@ -1,91 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package com.cloud.api.commands;
-
-import java.util.Date;
-
-import org.apache.cloudstack.api.*;
-import org.apache.cloudstack.api.response.DomainResponse;
-import org.apache.log4j.Logger;
-
-import org.apache.cloudstack.api.APICommand;
-import org.apache.cloudstack.api.response.SuccessResponse;
-import com.cloud.server.ManagementServerExt;
-import com.cloud.user.Account;
-
-@APICommand(name = "generateUsageRecords", description="Generates usage records. This will generate records only if there any records to be generated, i.e if the scheduled usage job was not run or failed", responseObject=SuccessResponse.class)
-public class GenerateUsageRecordsCmd extends BaseCmd {
-    public static final Logger s_logger = Logger.getLogger(GenerateUsageRecordsCmd.class.getName());
-
-    private static final String s_name = "generateusagerecordsresponse";
-
-    /////////////////////////////////////////////////////
-    //////////////// API parameters /////////////////////
-    /////////////////////////////////////////////////////
-
-    @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.UUID, entityType = DomainResponse.class,
-            description="List events for the specified domain.")
-    private Long domainId;
-
-    @Parameter(name=ApiConstants.END_DATE, type=CommandType.DATE, required=true, description="End date range for usage record query. Use yyyy-MM-dd as the date format, e.g. startDate=2009-06-03.")
-    private Date endDate;
-
-    @Parameter(name=ApiConstants.START_DATE, type=CommandType.DATE, required=true, description="Start date range for usage record query. Use yyyy-MM-dd as the date format, e.g. startDate=2009-06-01.")
-    private Date startDate;
-
-    /////////////////////////////////////////////////////
-    /////////////////// Accessors ///////////////////////
-    /////////////////////////////////////////////////////
-
-    public Long getDomainId() {
-        return domainId;
-    }
-
-    public Date getEndDate() {
-        return endDate;
-    }
-
-    public Date getStartDate() {
-        return startDate;
-    }
-
-    /////////////////////////////////////////////////////
-    /////////////// API Implementation///////////////////
-    /////////////////////////////////////////////////////
-
-    @Override
-    public String getCommandName() {
-        return s_name;
-    }
-    
-    @Override
-    public long getEntityOwnerId() {
-        return Account.ACCOUNT_ID_SYSTEM;
-    }
-
-    @Override
-    public void execute(){
-        ManagementServerExt _mgrExt = (ManagementServerExt)_mgr;
-        boolean result = _mgrExt.generateUsageRecords(this);
-        if (result) {
-            SuccessResponse response = new SuccessResponse(getCommandName());
-            this.setResponseObject(response);
-        } else {
-            throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to generate usage records");
-        }
-    }
-}