incubator-cloudstack-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Kishan Kavala <Kishan.Kav...@citrix.com>
Subject Re: [2/2] git commit: refs/heads/4.1 - CLOUDSTACK-786, CLOUDSTACK-1014: Moved usage APIs to cloud-api. Removed ManagementServerExt. Usage API related implementation is added to UsageServiceImpl
Date Tue, 05 Feb 2013 15:48:44 GMT
Chip,
  API refactoring moved all the APIs to cloud-api project. But somehow 6 APIs (all related to usage) remained in cloud-server. The cmd objects and their implementations also were not inline with the rest of the APIs. This commit moved the 6 Usage APIs and fixed the implementation.

~kishan

On 05-Feb-2013, at 8:49 PM, "Chip Childers" <chip.childers@sungard.com> wrote:

> Hey Kishan,
>
> Was this refactoring needed as part of 4.1?
>
>
> ---------- Forwarded message ----------
> From:  <kishan@apache.org>
> Date: Tue, Feb 5, 2013 at 6:18 AM
> Subject: [2/2] git commit: refs/heads/4.1 - CLOUDSTACK-786,
> CLOUDSTACK-1014: Moved usage APIs to cloud-api. Removed
> ManagementServerExt. Usage API related implementation is added to
> UsageServiceImpl
> To: cloudstack-commits@incubator.apache.org
>
>
> Updated Branches:
>  refs/heads/4.1 2fd8b15d6 -> 7970384f6
>
>
> 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/7970384f
> Tree: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/tree/7970384f
> Diff: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/diff/7970384f
>
> Branch: refs/heads/4.1
> Commit: 7970384f6e429b5c97f6d6e80f59cbab6ce90ede
> Parents: 2fd8b15
> Author: Kishan Kavala <kishan@cloud.com>
> Authored: Tue Feb 5 16:43:18 2013 +0530
> Committer: Kishan Kavala <kishan@cloud.com>
> Committed: Tue Feb 5 16:43:40 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/7970384f/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/7970384f/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/7970384f/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/7970384f/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/7970384f/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/7970384f/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/7970384f/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/7970384f/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/7970384f/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/7970384f/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/7970384f/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/7970384f/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/7970384f/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/7970384f/client/tomcatconf/componentContext.xml.in
> ----------------------------------------------------------------------
> diff --git a/client/tomcatconf/componentContext.xml.in
> b/client/tomcatconf/componentContext.xml.in
> index e3bf982..065188c 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/7970384f/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/7970384f/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/7970384f/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/7970384f/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/7970384f/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/7970384f/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/7970384f/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");
> -        }
> -    }
> -}

Mime
View raw message