You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stratos.apache.org by la...@apache.org on 2013/07/11 07:18:13 UTC
[22/27] aplying 0001-Refactor-usage-module-to-apache-stratos.patch
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/df3475cc/components/org.apache.stratos.usage/src/main/java/org/apache/stratos/usage/api/TenantUsageRetriever.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.usage/src/main/java/org/apache/stratos/usage/api/TenantUsageRetriever.java b/components/org.apache.stratos.usage/src/main/java/org/apache/stratos/usage/api/TenantUsageRetriever.java
new file mode 100644
index 0000000..8bb190c
--- /dev/null
+++ b/components/org.apache.stratos.usage/src/main/java/org/apache/stratos/usage/api/TenantUsageRetriever.java
@@ -0,0 +1,607 @@
+/*
+ *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.stratos.usage.api;
+
+import org.apache.axis2.context.ConfigurationContext;
+import org.apache.stratos.usage.beans.*;
+import org.apache.stratos.usage.util.Util;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.stratos.common.constants.UsageConstants;
+import org.apache.stratos.common.util.CommonUtil;
+import org.wso2.carbon.registry.core.exceptions.RegistryException;
+import org.wso2.carbon.registry.core.service.RegistryService;
+import org.apache.stratos.usage.util.DataAccessObject;
+import org.wso2.carbon.user.core.UserRealm;
+import org.wso2.carbon.user.core.UserStoreException;
+import org.wso2.carbon.user.core.tenant.TenantManager;
+
+import java.util.*;
+
+public class TenantUsageRetriever {
+ private static final Log log = LogFactory.getLog(TenantUsageRetriever.class);
+ private static final String DEFAULT_SERVICE_NAME = "Stratos";
+ private static final String METERING_ENDPOINT = "local://services/MeteringQueryDS";
+ private static final String TOTAL_LABEL = "Total";
+ public static final int REG_BANDWIDTH_INDEX = 0;
+ public static final int SVC_BANDWIDTH_INDEX = 1;
+ public static final int WEBAPP_BANDWIDTH_INDEX = 2;
+ public static final int API_CALL_STATS=3;
+
+ private RegistryService registryService;
+ private DataAccessObject dao;
+
+ public TenantUsageRetriever(RegistryService registryService, ConfigurationContext configContext)
+ throws Exception {
+
+ // we are loading the essentials from the constructors in order to restrict the users
+ // to use the usage retrievers.
+ this.registryService = registryService;
+ this.dao = new DataAccessObject();
+ }
+
+
+ public TenantDataCapacity getDataCapacity(int tenantId, Calendar startDate, Calendar endDate,
+ boolean currentMonth) throws Exception {
+ TenantDataCapacity dataCapacity = null;
+
+ if(currentMonth){
+ dataCapacity = dao.getTenantDataCapacity(tenantId);
+ } else {
+ //we don't have a way to see the registry usage of last months yet
+ }
+
+ return dataCapacity;
+
+ }
+
+ /**
+ * This returns the number of users in a given tenant
+ * @param tenantId Tenant ID
+ * @return Number of users
+ * @throws RegistryException
+ */
+ public int getCurrentUserCount(int tenantId) throws RegistryException {
+ UserRealm userRealm = registryService.getUserRealm(tenantId);
+ int usersCount;
+ try {
+ String[] users = userRealm.getUserStoreManager().listUsers("*", -1);
+ usersCount = users.length;
+ } catch (UserStoreException e) {
+ String msg = "Error in getting the current users.";
+ log.error(msg, e);
+ throw new RegistryException(msg, e);
+ }
+ return usersCount;
+ }
+
+ public BandwidthStatistics[][] getBandwidthStatistics(int tenantId, Calendar startDate,
+ Calendar endDate, boolean currentMonth) throws Exception {
+ //return the bandwidth usage of a user for a given period
+ BandwidthStatistics[] stats;
+ if (currentMonth) {
+ //get from daily usage stats
+ List<BandwidthStatistics> bwsList = new ArrayList<BandwidthStatistics>();
+ bwsList = dao.getDailyBandwidthStats(tenantId, startDate, endDate);
+
+ //next we'll get from the houlry stats to get the stats which are not yet
+ //summarized to the daily stats table
+ Calendar startHour = Calendar.getInstance();
+ startHour.set(Calendar.HOUR, 0);
+ startHour.set(Calendar.MINUTE, 0);
+ startHour.set(Calendar.SECOND, 0);
+
+ Calendar endHour = Calendar.getInstance();
+
+ bwsList.addAll(dao.getHourlyBandwidthStats(tenantId, startHour, endHour));
+ stats = convertBWListToArray(bwsList);
+
+ } else {
+ //get from monthly usage stats
+ Calendar monthCal = (Calendar) endDate.clone();
+ monthCal.set(Calendar.DATE, 0);
+ monthCal.set(Calendar.HOUR, 0);
+ monthCal.set(Calendar.MINUTE, 0);
+ monthCal.set(Calendar.SECOND, 0);
+
+ stats = convertBWListToArray(dao.getMonthlyBandwidthStats(tenantId, monthCal));
+ }
+
+ // store the statistics in a temporary map. This is because, we are getting the server name
+ // from the URL and there might be two distinct URL gives same server name.
+ // For example, http://esb.a.b/ and http://esb.c.d/ both will give the server name as "esb"
+ // Hence, the value should be accumulated value
+ HashMap<String, BandwidthStatistics> regBwMap = new HashMap<String, BandwidthStatistics>();
+ HashMap<String, BandwidthStatistics> svcBwMap = new HashMap<String, BandwidthStatistics>();
+ HashMap<String, BandwidthStatistics> webappBwMap = new HashMap<String, BandwidthStatistics>();
+
+ if (stats != null) {
+ for (BandwidthStatistics stat : stats) {
+ //Proceed only if incoming bandwidth or outgoing bandwidth is not zero
+ if (stat.getIncomingBandwidth() == 0 && stat.getOutgoingBandwidth() == 0) {
+ continue;
+ }
+
+ //TODO: fix the extractServiceUrl method properly
+ String serverName = extractServiceNameFromUrl(stat.getServerUrl());
+ String bandwidthName = stat.getKey();
+
+ HashMap<String, BandwidthStatistics> bwMap;
+ if (bandwidthName.equals(UsageConstants.REGISTRY_INCOMING_BW) ||
+ bandwidthName.equals(UsageConstants.REGISTRY_OUTGOING_BW)) {
+ bwMap = regBwMap;
+ } else if (bandwidthName.equals(UsageConstants.SERVICE_INCOMING_BW) ||
+ bandwidthName.equals(UsageConstants.SERVICE_OUTGOING_BW)) {
+ bwMap = svcBwMap;
+ } else if (bandwidthName.equals(UsageConstants.WEBAPP_INCOMING_BW) ||
+ bandwidthName.equals(UsageConstants.WEBAPP_OUTGOING_BW)) {
+ bwMap = webappBwMap;
+ } else {
+ log.warn("Unable to identify bandwidth name " + bandwidthName);
+ continue;
+ }
+
+ //find whether the map already has this key; If not, insert a new one
+ BandwidthStatistics reqStat = bwMap.get(serverName);
+ if (reqStat == null) {
+ reqStat = new BandwidthStatistics(serverName);
+ bwMap.put(serverName, reqStat);
+ }
+
+ // Update the service specific statistics
+ reqStat.setIncomingBandwidth(
+ reqStat.getIncomingBandwidth() + stat.getIncomingBandwidth());
+ reqStat.setOutgoingBandwidth(
+ reqStat.getOutgoingBandwidth() + stat.getOutgoingBandwidth());
+ }
+ }
+
+ //Convert to array and return it
+ BandwidthStatistics[][] returnValue = new BandwidthStatistics[3][];
+ Collection<BandwidthStatistics> values = regBwMap.values();
+ returnValue[REG_BANDWIDTH_INDEX] = values.toArray(new BandwidthStatistics[values.size()]);
+ values = svcBwMap.values();
+ returnValue[SVC_BANDWIDTH_INDEX] = values.toArray(new BandwidthStatistics[values.size()]);
+ values = webappBwMap.values();
+ returnValue[WEBAPP_BANDWIDTH_INDEX] = values.toArray(new BandwidthStatistics[values.size()]);
+
+ return returnValue;
+ }
+
+
+ public APIManagerUsageStats[] getAPIManagerUsageStats(int tenantId, Calendar startDate,
+ Calendar endDate, boolean currentMonth) throws Exception {
+ //return the bandwidth usage of a user for a given period
+ APIManagerUsageStats[] stats;
+ if (currentMonth) {
+ //get from daily usage stats
+ List<APIManagerUsageStats> bwsList = new ArrayList<APIManagerUsageStats>();
+ bwsList = dao.getDailyAPIManagerUsageStats(tenantId, startDate, endDate);
+
+ //next we'll get from the houlry stats to get the stats which are not yet
+ //summarized to the daily stats table
+ Calendar startHour = Calendar.getInstance();
+ startHour.set(Calendar.HOUR, 0);
+ startHour.set(Calendar.MINUTE, 0);
+ startHour.set(Calendar.SECOND, 0);
+
+ Calendar endHour = Calendar.getInstance();
+
+ bwsList.addAll(dao.getHourlyAPIManagerUsageStats(tenantId, startHour, endHour));
+ stats = convertAPIStatListToArray(bwsList);
+
+ } else {
+ //get from monthly usage stats
+ Calendar monthCal = (Calendar) endDate.clone();
+ monthCal.set(Calendar.DATE, 0);
+ monthCal.set(Calendar.HOUR, 0);
+ monthCal.set(Calendar.MINUTE, 0);
+ monthCal.set(Calendar.SECOND, 0);
+
+ stats = convertAPIStatListToArray(dao.getMonthlyAPIManagerUsageStats(tenantId, monthCal));
+ }
+ HashMap<String, APIManagerUsageStats> statMap = new HashMap<String, APIManagerUsageStats>();
+ if (stats != null) {
+ for (APIManagerUsageStats stat : stats) {
+ if (stat.getRequestCount() == 0) {
+ continue;
+ }
+ String serverName = extractServiceNameFromUrl(stat.getServerUrl());
+ String statName = stat.getKey();
+
+ HashMap<String, APIManagerUsageStats> statsHashMap;
+ if (statName.equals("API-Call")) {
+ statsHashMap = statMap;
+ } else {
+ log.warn("Unable to identify bandwidth name " + statName);
+ continue;
+ }
+
+ //find whether the map already has this key; If not, insert a new one
+ APIManagerUsageStats reqStat = statsHashMap.get(serverName);
+ if (reqStat == null) {
+ reqStat = new APIManagerUsageStats(serverName);
+ statsHashMap.put(serverName, reqStat);
+ }
+ reqStat.setRequestCount(stat.getRequestCount());
+ }
+ }
+
+ //Convert to array and return it
+ APIManagerUsageStats[] returnValue = new APIManagerUsageStats[0];
+ Collection<APIManagerUsageStats> values = statMap.values();
+ returnValue = values.toArray(new APIManagerUsageStats[values.size()]);
+ return returnValue;
+ }
+
+
+ public RequestStatistics[] getRequestStatistics(int tenantId, Calendar startDate,
+ Calendar endDate, boolean currentMonth) throws Exception {
+ RequestStatistics[] stats;
+ if (currentMonth) {
+ //get from daily usage stats
+ List<RequestStatistics> rsList = new ArrayList<RequestStatistics>();
+ rsList = dao.getDailyRequestStats(tenantId, startDate, endDate);
+
+ //next we'll get from the houlry stats to get the stats which are not yet
+ //summarized to the daily stats table
+ Calendar startHour = Calendar.getInstance();
+ startHour.set(Calendar.HOUR, 0);
+ startHour.set(Calendar.MINUTE, 0);
+ startHour.set(Calendar.SECOND, 0);
+
+ Calendar endHour = Calendar.getInstance();
+
+ rsList.addAll(dao.getHourlyRequestStats(tenantId, startHour, endHour));
+
+ stats = convertRSListToArray(rsList);
+ } else {
+ //get from monthly usage stats
+ Calendar monthCal = (Calendar) endDate.clone();
+ monthCal.set(Calendar.DATE, 0);
+ monthCal.set(Calendar.HOUR, 0);
+ monthCal.set(Calendar.MINUTE, 0);
+ monthCal.set(Calendar.SECOND, 0);
+
+ stats = convertRSListToArray(dao.getMonthlyRequestStats(tenantId, monthCal));
+ }
+
+ // store the statistics in a temporary map. This is because, we are getting the server name
+ // from the URL and there might be two distinct URL gives same server name.
+ // For example, http://esb.a.b/ and http://esb.c.d/ both will give the server name as "esb"
+ // Hence, the value should be accumulated value
+ HashMap<String, RequestStatistics> tempReqStatMap = new HashMap<String, RequestStatistics>();
+
+ if (stats != null) {
+ for (RequestStatistics stat : stats) {
+ //Proceed only if request count is not zero
+ if (stat.getRequestCount() == 0) {
+ continue;
+ }
+
+ String serverName = extractServiceNameFromUrl(stat.getKey());
+
+ //find whether the map already has this key; If not, insert a new one
+ RequestStatistics reqStat = tempReqStatMap.get(serverName);
+ if (reqStat == null) {
+ reqStat = new RequestStatistics(serverName);
+ tempReqStatMap.put(serverName, reqStat);
+ }
+
+ // Update the service specific statistics
+ reqStat.setRequestCount(reqStat.getRequestCount() + stat.getRequestCount());
+ reqStat.setResponseCount(reqStat.getResponseCount() + stat.getResponseCount());
+ reqStat.setFaultCount(reqStat.getFaultCount() + stat.getFaultCount());
+ }
+ }
+
+ //Convert to array and return it
+ Collection<RequestStatistics> values = tempReqStatMap.values();
+ return values.toArray(new RequestStatistics[values.size()]);
+
+ }
+
+ public CartridgeStatistics[] getCartridgeStatistics(int tenantId, Calendar startDate,
+ Calendar endDate, boolean currentMonth) throws Exception {
+ CartridgeStatistics[] stats;
+ /*if (currentMonth) {
+ //get from daily usage stats
+ List<CartridgeStatistics> csList = new ArrayList<CartridgeStatistics>();
+ csList = dao.getDailyCartridgeStats(tenantId, startDate, endDate);
+
+ //next we'll get from the houlry stats to get the stats which are not yet
+ //summarized to the daily stats table
+ Calendar startHour = Calendar.getInstance();
+ startHour.set(Calendar.HOUR, 0);
+ startHour.set(Calendar.MINUTE, 0);
+ startHour.set(Calendar.SECOND, 0);
+
+ Calendar endHour = Calendar.getInstance();
+
+ csList.addAll(dao.getHourlyCartridgeStats(tenantId, startHour, endHour));
+
+ stats = convertCSListToArray(csList);
+ } else {
+ //get from monthly usage stats
+ Calendar monthCal = (Calendar) endDate.clone();
+ monthCal.set(Calendar.DATE, 0);
+ monthCal.set(Calendar.HOUR, 0);
+ monthCal.set(Calendar.MINUTE, 0);
+ monthCal.set(Calendar.SECOND, 0);
+
+ stats = convertCSListToArray(dao.getMonthlyCartridgeStats(tenantId, monthCal));
+ }*/
+ List<CartridgeStatistics> csList = new ArrayList<CartridgeStatistics>();
+ csList = dao.getHourlyCartridgeStats(tenantId, startDate, endDate);
+ stats = convertCSListToArray(csList);
+
+ //Add a comment explaining following logic later
+ HashMap<String, CartridgeStatistics> tempCartridgeStatMap = new HashMap<String, CartridgeStatistics>();
+
+ if (stats != null) {
+ for (CartridgeStatistics stat : stats) {
+ //Proceed only if request count is not zero
+ if (stat.getCartridgeHours() == 0) {
+ continue;
+ }
+
+
+ //find whether the map already has this key; If not, insert a new one
+ CartridgeStatistics cartridgeStat = tempCartridgeStatMap.get(stat.getKey());
+ if (cartridgeStat == null) {
+ cartridgeStat = new CartridgeStatistics(stat.getKey());
+ tempCartridgeStatMap.put(stat.getKey(), cartridgeStat);
+ }
+
+ // Update the service specific statistics
+ cartridgeStat.setCartridgeHours(cartridgeStat.getCartridgeHours() + stat.getCartridgeHours());
+ cartridgeStat.setInstanceId(stat.getInstanceId());
+ }
+ }
+
+ //Convert to array and return it
+ Collection<CartridgeStatistics> values = tempCartridgeStatMap.values();
+ return values.toArray(new CartridgeStatistics[values.size()]);
+
+ }
+
+ public TenantUsage getTenantUsage(int tenantId, String yearMonth) throws Exception {
+ //get the domain name
+ TenantManager tenantManger = Util.getRealmService().getTenantManager();
+ String domain = tenantManger.getDomain(tenantId);
+ TenantUsage tenantUsage = new TenantUsage(tenantId, domain);
+
+ //Get the startDate, endDate from yearMonth String
+ Date date = CommonUtil.getDateFromMonthString(yearMonth);
+ Calendar startDate = Calendar.getInstance();
+ startDate.setTime(date);
+ Calendar endDate = (Calendar) startDate.clone();
+ endDate.add(Calendar.MONTH, 1);
+
+ //Calculate whether the yearMonth fits to current month; if the current date is less than
+ // endDate, then we treat it as current month
+ boolean isCurrentMonth = (Calendar.getInstance().compareTo(endDate) <= 0);
+
+ //get the data capacity
+ TenantDataCapacity capacity;
+ try {
+ capacity = getDataCapacity(tenantId, startDate, endDate, isCurrentMonth);
+ } catch (Exception e) {
+ String msg = "Error in getting data capacity from metering service.";
+ log.error(msg, e);
+ throw new Exception(msg, e);
+ }
+ tenantUsage.setRegistryCapacity(capacity);
+
+ //get the service request statistics
+ RequestStatistics[] reqStats = null;
+ try {
+ reqStats = getRequestStatistics(tenantId, startDate, endDate, isCurrentMonth);
+ } catch (Exception e) {
+ String msg = "Error in getting request statistics from metering service.";
+ log.error(msg, e);
+ throw new Exception(msg, e);
+ }
+ tenantUsage.setRequestStatistics(reqStats);
+
+ //Calculate total Request statistics
+ RequestStatistics totalReqStat = new RequestStatistics(TOTAL_LABEL);
+ long totalReq = 0;
+ long totalRes = 0;
+ long totalFault = 0;
+ if(reqStats!=null){
+ for (RequestStatistics stat : reqStats) {
+ totalReq += stat.getRequestCount();
+ totalRes += stat.getResponseCount();
+ totalFault += stat.getFaultCount();
+ }
+ totalReqStat.setRequestCount(totalReq);
+ totalReqStat.setResponseCount(totalRes);
+ totalReqStat.setFaultCount(totalFault);
+ }
+ tenantUsage.setTotalRequestStatistics(totalReqStat);
+
+ //get Bandwidth statistics
+ BandwidthStatistics[][] bwStats = null;
+ try {
+ bwStats = getBandwidthStatistics(tenantId, startDate, endDate, isCurrentMonth);
+ } catch (Exception e) {
+ String msg = "Error in getting bandwidth statistics from metering service.";
+ log.error(msg, e);
+ throw new Exception(msg, e);
+ }
+ tenantUsage.setRegistryBandwidthStatistics(bwStats[REG_BANDWIDTH_INDEX]);
+ tenantUsage.setServiceBandwidthStatistics(bwStats[SVC_BANDWIDTH_INDEX]);
+ tenantUsage.setWebappBandwidthStatistics(bwStats[WEBAPP_BANDWIDTH_INDEX]);
+
+ //get the total bandwidths
+ int index = 0;
+ for (BandwidthStatistics[] bwArray : bwStats) {
+ long incomingBandwidth = 0;
+ long outgoingBandwidth = 0;
+ for (BandwidthStatistics bandwidth : bwArray) {
+ incomingBandwidth += bandwidth.getIncomingBandwidth();
+ outgoingBandwidth += bandwidth.getOutgoingBandwidth();
+ }
+ BandwidthStatistics total = new BandwidthStatistics(TOTAL_LABEL);
+ total.setIncomingBandwidth(incomingBandwidth);
+ total.setOutgoingBandwidth(outgoingBandwidth);
+ switch (index) {
+ case REG_BANDWIDTH_INDEX:
+ tenantUsage.setTotalRegistryBandwidth(total);
+ break;
+ case SVC_BANDWIDTH_INDEX:
+ tenantUsage.setTotalServiceBandwidth(total);
+ break;
+ case WEBAPP_BANDWIDTH_INDEX:
+ tenantUsage.setTotalWebappBandwidth(total);
+ break;
+ }
+ ++index;
+ }
+
+ // the users count will be calculated only if the yearMonth is the current yearMonth
+ if (isCurrentMonth) {
+ int usersCount = getCurrentUserCount(tenantId);
+ tenantUsage.setNumberOfUsers(usersCount);
+ }
+ // get the API invocation data
+ APIManagerUsageStats[] apiStats = null;
+ try {
+ apiStats = getAPIManagerUsageStats(tenantId, startDate, endDate, isCurrentMonth);
+ } catch (Exception e) {
+ String msg = "Error in getting bandwidth statistics from metering service.";
+ log.error(msg, e);
+ throw new Exception(msg, e);
+ }
+ tenantUsage.setApiManagerUsageStats(apiStats);
+
+ //retrieving cartridge hours
+ CartridgeStatistics[] cartridgeStatistics = getCartridgeStatistics(tenantId, startDate, endDate, isCurrentMonth);
+ tenantUsage.setCartridgeStatistics(cartridgeStatistics);
+ long totalCartridgeHours = 0;
+ if(cartridgeStatistics!=null && cartridgeStatistics.length>0){
+
+ for (CartridgeStatistics cs : cartridgeStatistics){
+ totalCartridgeHours += cs.getCartridgeHours();
+ }
+ }
+
+ CartridgeStatistics totalCS = new CartridgeStatistics();
+ totalCS.setCartridgeHours(totalCartridgeHours);
+
+ tenantUsage.setTotalCartridgeHours(totalCS);
+ return tenantUsage;
+ }
+
+ /**
+ * @param serviceURL
+ * @return service name
+ * <p/>
+ * Extract the stratos service part from URL; expecting the URL as
+ * protocol://service.domain:port/tenant-domain/ or service.domain:port/tenant
+ * We are interested in "service" part only
+ */
+ private String extractServiceNameFromUrl(String serviceURL) {
+ if (serviceURL == null || serviceURL.equals("")) {
+ //No service URL is given, so return a default value
+ return DEFAULT_SERVICE_NAME;
+ }
+
+ int startIndex = serviceURL.indexOf("://"); //exclude protocol:// part
+ if (startIndex != -1) {
+ // protocol://service.domain:port/tenant-domain/ case
+ startIndex += 3;
+ } else {
+ //service.domain:port/tenant case
+ startIndex = 0;
+ }
+
+ int endIndex = serviceURL.indexOf('.', startIndex); //take upto first "."
+ if (endIndex == -1) {
+ // "." is not there; search for ":"
+ endIndex = serviceURL.indexOf(':', startIndex);
+
+ if (endIndex == -1) {
+ //Still could not find ":", then search for "/"
+ endIndex = serviceURL.indexOf('/', startIndex);
+
+ if (endIndex == -1) {
+ //Noting is there, so take the whole service URL
+ endIndex = serviceURL.length();
+ }
+ }
+
+ }
+ return serviceURL.substring(startIndex, endIndex);
+ }
+
+ /**
+ * @return Instance Usages Statics Array that contains data
+ * @throws Exception when back end error occurs
+ */
+ public InstanceUsageStatics[] getInstanceUsages() throws Exception {
+
+ //TODO: implement
+ return null;
+ /*InstanceUsageStat[] instanceData = meteringStub.getInstanceUsageStats();
+ if (instanceData == null || instanceData.length == 0) {
+ return null;
+ }
+ InstanceUsageStatics[] returnValue = new InstanceUsageStatics[instanceData.length];
+ int elementID = 0;
+ for (InstanceUsageStat iu : instanceData) {
+ InstanceUsageStatics iu1 = new InstanceUsageStatics();
+ iu1.setInstanceID(iu.getInstanceId().intValue());
+ iu1.setInstanceURL(iu.getServerURL());
+ iu1.setStartTime(iu.getStartTimestamp());
+ iu1.setStopTime(iu.getStopTimestamp());
+ iu1.setRunning(iu.getIsRunning());
+ returnValue[elementID] = iu1;
+ elementID = elementID + 1;
+ }
+ return returnValue;
+ */
+ }
+
+
+ private BandwidthStatistics[] convertBWListToArray(List<BandwidthStatistics> bwsList) {
+ BandwidthStatistics[] bwsArray = new BandwidthStatistics[bwsList.size()];
+ bwsArray = bwsList.toArray(bwsArray);
+ return bwsArray;
+ }
+
+ private APIManagerUsageStats[] convertAPIStatListToArray(List<APIManagerUsageStats> bwsList) {
+ APIManagerUsageStats[] bwsArray = new APIManagerUsageStats[bwsList.size()];
+ bwsArray = bwsList.toArray(bwsArray);
+ return bwsArray;
+ }
+
+ private RequestStatistics[] convertRSListToArray(List<RequestStatistics> rsList) {
+ RequestStatistics[] rsArray = new RequestStatistics[rsList.size()];
+ rsArray = rsList.toArray(rsArray);
+ return rsArray;
+ }
+
+ private CartridgeStatistics[] convertCSListToArray(List<CartridgeStatistics> csList){
+ CartridgeStatistics[] csArray = new CartridgeStatistics[csList.size()];
+ csArray = csList.toArray(csArray);
+ return csArray;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/df3475cc/components/org.apache.stratos.usage/src/main/java/org/apache/stratos/usage/beans/APIManagerUsageStats.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.usage/src/main/java/org/apache/stratos/usage/beans/APIManagerUsageStats.java b/components/org.apache.stratos.usage/src/main/java/org/apache/stratos/usage/beans/APIManagerUsageStats.java
new file mode 100644
index 0000000..bd47d8f
--- /dev/null
+++ b/components/org.apache.stratos.usage/src/main/java/org/apache/stratos/usage/beans/APIManagerUsageStats.java
@@ -0,0 +1,72 @@
+/*
+ *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.stratos.usage.beans;
+
+public class APIManagerUsageStats {
+ private String key;
+ private String serverUrl;
+ private long incomingBandwidth;
+ private long outgoingBandwidth;
+ private long requestCount;
+
+ public long getRequestCount() {
+ return requestCount;
+ }
+
+ public void setRequestCount(long requestCount) {
+ this.requestCount = requestCount;
+ }
+
+
+ public APIManagerUsageStats(String key) {
+ this.key = key;
+ }
+
+ public String getKey() {
+ return key;
+ }
+
+ public void setKey(String key) {
+ this.key = key;
+ }
+
+ public long getIncomingBandwidth() {
+ return incomingBandwidth;
+ }
+
+ public void setIncomingBandwidth(long incomingBandwidth) {
+ this.incomingBandwidth = incomingBandwidth;
+ }
+
+ public long getOutgoingBandwidth() {
+ return outgoingBandwidth;
+ }
+
+ public void setOutgoingBandwidth(long outgoingBandwidth) {
+ this.outgoingBandwidth = outgoingBandwidth;
+ }
+
+ public String getServerUrl() {
+ return serverUrl;
+ }
+
+ public void setServerUrl(String serverUrl) {
+ this.serverUrl = serverUrl;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/df3475cc/components/org.apache.stratos.usage/src/main/java/org/apache/stratos/usage/beans/BandwidthStatistics.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.usage/src/main/java/org/apache/stratos/usage/beans/BandwidthStatistics.java b/components/org.apache.stratos.usage/src/main/java/org/apache/stratos/usage/beans/BandwidthStatistics.java
new file mode 100644
index 0000000..9e62626
--- /dev/null
+++ b/components/org.apache.stratos.usage/src/main/java/org/apache/stratos/usage/beans/BandwidthStatistics.java
@@ -0,0 +1,65 @@
+/*
+ *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.stratos.usage.beans;
+
+/**
+ *
+ */
+public class BandwidthStatistics {
+ private String key;
+ private String serverUrl;
+ private long incomingBandwidth;
+ private long outgoingBandwidth;
+
+ public BandwidthStatistics(String key){
+ this.key = key;
+ }
+
+ public String getKey() {
+ return key;
+ }
+
+ public void setKey(String key) {
+ this.key = key;
+ }
+
+ public long getIncomingBandwidth() {
+ return incomingBandwidth;
+ }
+
+ public void setIncomingBandwidth(long incomingBandwidth) {
+ this.incomingBandwidth = incomingBandwidth;
+ }
+
+ public long getOutgoingBandwidth() {
+ return outgoingBandwidth;
+ }
+
+ public void setOutgoingBandwidth(long outgoingBandwidth) {
+ this.outgoingBandwidth = outgoingBandwidth;
+ }
+
+ public String getServerUrl() {
+ return serverUrl;
+ }
+
+ public void setServerUrl(String serverUrl) {
+ this.serverUrl = serverUrl;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/df3475cc/components/org.apache.stratos.usage/src/main/java/org/apache/stratos/usage/beans/CartridgeStatistics.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.usage/src/main/java/org/apache/stratos/usage/beans/CartridgeStatistics.java b/components/org.apache.stratos.usage/src/main/java/org/apache/stratos/usage/beans/CartridgeStatistics.java
new file mode 100644
index 0000000..4568519
--- /dev/null
+++ b/components/org.apache.stratos.usage/src/main/java/org/apache/stratos/usage/beans/CartridgeStatistics.java
@@ -0,0 +1,59 @@
+/*
+ *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.stratos.usage.beans;
+
+
+public class CartridgeStatistics {
+
+ private String key;
+ private String instanceId;
+ private long cartridgeHours;
+
+ public CartridgeStatistics(){
+ //Default constructor
+ }
+
+ public CartridgeStatistics(String key){
+ this.key = key;
+ }
+
+ public String getKey() {
+ return key;
+ }
+
+ public void setKey(String key) {
+ this.key = key;
+ }
+
+ public long getCartridgeHours() {
+ return cartridgeHours;
+ }
+
+ public void setCartridgeHours(long cartridgeHours) {
+ this.cartridgeHours = cartridgeHours;
+ }
+
+ public String getInstanceId() {
+ return instanceId;
+ }
+
+ public void setInstanceId(String instanceId) {
+ this.instanceId = instanceId;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/df3475cc/components/org.apache.stratos.usage/src/main/java/org/apache/stratos/usage/beans/InstanceUsageStatics.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.usage/src/main/java/org/apache/stratos/usage/beans/InstanceUsageStatics.java b/components/org.apache.stratos.usage/src/main/java/org/apache/stratos/usage/beans/InstanceUsageStatics.java
new file mode 100644
index 0000000..b0877ef
--- /dev/null
+++ b/components/org.apache.stratos.usage/src/main/java/org/apache/stratos/usage/beans/InstanceUsageStatics.java
@@ -0,0 +1,91 @@
+/*
+ *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.stratos.usage.beans;
+
+import java.util.Calendar;
+
+public class InstanceUsageStatics {
+
+ private Calendar startTime;
+ private Calendar stopTime;
+ private String instanceURL;
+ private Integer instanceID;
+ private long usedTimeInSeconds;
+ private boolean running;
+
+ public boolean isRunning() {
+ return running;
+ }
+
+ public void setRunning(boolean running) {
+ this.running = running;
+ }
+
+ public Calendar getStartTime() {
+ return startTime;
+ }
+
+ public void setStartTime(Calendar startTime) {
+ this.startTime = startTime;
+ }
+
+ public Calendar getStopTime() {
+ return stopTime;
+ }
+
+ public void setStopTime(Calendar stopTime) {
+ //Check weather stop time is Default value in database in that case
+ //server should still running so set isRunning as true
+ Calendar fixedDate = Calendar.getInstance();
+ fixedDate.set(2001, 1, 1, 00, 00, 00);
+ if (stopTime.compareTo(fixedDate) == 0) {
+ this.running = true;
+ }
+ this.stopTime = stopTime;
+ }
+
+ public String getInstanceURL() {
+ return instanceURL;
+ }
+
+ public void setInstanceURL(String instanceURL) {
+ this.instanceURL = instanceURL;
+ }
+
+ public Integer getInstanceID() {
+ return instanceID;
+ }
+
+ public void setInstanceID(Integer instanceID) {
+ this.instanceID = instanceID;
+ }
+
+ public long getUsedTimeInSeconds() {
+ long returnValue = (this.stopTime.getTimeInMillis() -
+ this.startTime.getTimeInMillis()) / 1000;
+ if (returnValue < 0) {
+ running = true;
+ }
+ return usedTimeInSeconds;
+ }
+ public void setUsedTimeInSeconds(long value){
+ this.usedTimeInSeconds=value;
+ }
+
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/df3475cc/components/org.apache.stratos.usage/src/main/java/org/apache/stratos/usage/beans/PaginatedInstanceUsage.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.usage/src/main/java/org/apache/stratos/usage/beans/PaginatedInstanceUsage.java b/components/org.apache.stratos.usage/src/main/java/org/apache/stratos/usage/beans/PaginatedInstanceUsage.java
new file mode 100644
index 0000000..3af8b9d
--- /dev/null
+++ b/components/org.apache.stratos.usage/src/main/java/org/apache/stratos/usage/beans/PaginatedInstanceUsage.java
@@ -0,0 +1,59 @@
+/*
+ *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.stratos.usage.beans;
+
+import java.util.Arrays;
+
+public class PaginatedInstanceUsage {
+ private InstanceUsageStatics[] instanceUsages;
+ private int pageNumber;
+ private int numberOfPages;
+
+ public InstanceUsageStatics[] getInstanceUsages() {
+ if(instanceUsages != null) {
+ return Arrays.copyOf(instanceUsages, instanceUsages.length);
+ }
+
+ return null;
+ }
+
+ public void setInstanceUsages(InstanceUsageStatics[] instanceUsages) {
+ if(instanceUsages != null) {
+ this.instanceUsages = Arrays.copyOf(instanceUsages, instanceUsages.length);
+ }
+ }
+
+ public int getPageNumber() {
+ return pageNumber;
+ }
+
+ public void setPageNumber(int pageNumber) {
+ this.pageNumber = pageNumber;
+ }
+
+ public int getNumberOfPages() {
+ return numberOfPages;
+ }
+
+ public void setNumberOfPages(int numberOfPages) {
+ this.numberOfPages = numberOfPages;
+ }
+
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/df3475cc/components/org.apache.stratos.usage/src/main/java/org/apache/stratos/usage/beans/PaginatedTenantUsageInfo.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.usage/src/main/java/org/apache/stratos/usage/beans/PaginatedTenantUsageInfo.java b/components/org.apache.stratos.usage/src/main/java/org/apache/stratos/usage/beans/PaginatedTenantUsageInfo.java
new file mode 100644
index 0000000..e538807
--- /dev/null
+++ b/components/org.apache.stratos.usage/src/main/java/org/apache/stratos/usage/beans/PaginatedTenantUsageInfo.java
@@ -0,0 +1,47 @@
+/*
+ *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.stratos.usage.beans;
+
+import java.util.Arrays;
+
+public class PaginatedTenantUsageInfo {
+ private TenantUsage[] tenantUsages;
+ private int pageNumber;
+ private int numberOfPages;
+
+ public TenantUsage[] getTenantUsages() {
+ return Arrays.copyOf(tenantUsages, tenantUsages.length);
+ }
+ public void setTenantUsages(TenantUsage[] tenantUsages) {
+ this.tenantUsages = Arrays.copyOf(tenantUsages, tenantUsages.length);
+ }
+ public int getPageNumber() {
+ return pageNumber;
+ }
+ public void setPageNumber(int pageNumber) {
+ this.pageNumber = pageNumber;
+ }
+ public int getNumberOfPages() {
+ return numberOfPages;
+ }
+ public void setNumberOfPages(int numberOfPages) {
+ this.numberOfPages = numberOfPages;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/df3475cc/components/org.apache.stratos.usage/src/main/java/org/apache/stratos/usage/beans/RequestStatistics.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.usage/src/main/java/org/apache/stratos/usage/beans/RequestStatistics.java b/components/org.apache.stratos.usage/src/main/java/org/apache/stratos/usage/beans/RequestStatistics.java
new file mode 100644
index 0000000..e703578
--- /dev/null
+++ b/components/org.apache.stratos.usage/src/main/java/org/apache/stratos/usage/beans/RequestStatistics.java
@@ -0,0 +1,63 @@
+/*
+ *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.stratos.usage.beans;
+public class RequestStatistics {
+ private String key;
+ private long requestCount;
+ private long responseCount;
+ private long faultCount;
+
+ public RequestStatistics(String key) {
+ this.key = key;
+ }
+
+ public String getKey() {
+ return key;
+ }
+
+ public void setKey(String key) {
+ this.key = key;
+ }
+
+ public long getRequestCount() {
+ return requestCount;
+ }
+
+ public void setRequestCount(long requestCount) {
+ this.requestCount = requestCount;
+ }
+
+ public long getResponseCount() {
+ return responseCount;
+ }
+
+ public void setResponseCount(long responseCount) {
+ this.responseCount = responseCount;
+ }
+
+ public long getFaultCount() {
+ return faultCount;
+ }
+
+ public void setFaultCount(long faultCount) {
+ this.faultCount = faultCount;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/df3475cc/components/org.apache.stratos.usage/src/main/java/org/apache/stratos/usage/beans/TenantDataCapacity.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.usage/src/main/java/org/apache/stratos/usage/beans/TenantDataCapacity.java b/components/org.apache.stratos.usage/src/main/java/org/apache/stratos/usage/beans/TenantDataCapacity.java
new file mode 100644
index 0000000..c0f2ea7
--- /dev/null
+++ b/components/org.apache.stratos.usage/src/main/java/org/apache/stratos/usage/beans/TenantDataCapacity.java
@@ -0,0 +1,55 @@
+/*
+ *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.stratos.usage.beans;
+
+public class TenantDataCapacity {
+
+ private long registryContentCapacity;
+ private long registryContentHistoryCapacity;
+
+ public TenantDataCapacity() {
+ }
+
+ /**
+ * @param registryContentCapacity
+ * @param registryContentHistoryCapacity
+ */
+ public TenantDataCapacity(
+ long registryContentCapacity, long registryContentHistoryCapacity) {
+ this.registryContentCapacity = registryContentCapacity;
+ this.registryContentHistoryCapacity = registryContentHistoryCapacity;
+ }
+
+ public long getRegistryContentCapacity() {
+ return registryContentCapacity;
+ }
+
+ public void setRegistryContentCapacity(long registryContentCapacity) {
+ this.registryContentCapacity = registryContentCapacity;
+ }
+
+ public long getRegistryContentHistoryCapacity() {
+ return registryContentHistoryCapacity;
+ }
+
+ public void setRegistryContentHistoryCapacity(long registryContentHistoryCapacity) {
+ this.registryContentHistoryCapacity = registryContentHistoryCapacity;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/df3475cc/components/org.apache.stratos.usage/src/main/java/org/apache/stratos/usage/beans/TenantUsage.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.usage/src/main/java/org/apache/stratos/usage/beans/TenantUsage.java b/components/org.apache.stratos.usage/src/main/java/org/apache/stratos/usage/beans/TenantUsage.java
new file mode 100644
index 0000000..8afd9af
--- /dev/null
+++ b/components/org.apache.stratos.usage/src/main/java/org/apache/stratos/usage/beans/TenantUsage.java
@@ -0,0 +1,219 @@
+/*
+ *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.stratos.usage.beans;
+
+public class TenantUsage {
+ private int tenantId;
+ private String domain;
+ private int numberOfUsers;
+ private UsageEntry[] usageEntries;
+ private BandwidthStatistics[] registryBandwidthStatistics;
+ private BandwidthStatistics[] serviceBandwidthStatistics;
+ private BandwidthStatistics[] webappBandwidthStatistics;
+ private CartridgeStatistics[] cartridgeStatistics;
+ private RequestStatistics[] requestStatistics;
+ private TenantDataCapacity registryCapacity;
+ private RequestStatistics totalRequestStatistics;
+ private BandwidthStatistics totalRegistryBandwidth;
+ private BandwidthStatistics totalServiceBandwidth;
+ private BandwidthStatistics totalWebappBandwidth;
+ private CartridgeStatistics totalCartridgeHours;
+ private APIManagerUsageStats[] apiManagerUsageStats;
+
+ public APIManagerUsageStats[] getApiManagerUsageStats() {
+ return apiManagerUsageStats;
+ }
+
+ public void setApiManagerUsageStats(APIManagerUsageStats[] apiManagerUsageStats) {
+ this.apiManagerUsageStats = apiManagerUsageStats;
+ }
+
+ public BandwidthStatistics[] getRegistryBandwidthStatistics() {
+ return registryBandwidthStatistics;
+ }
+
+ public void setRegistryBandwidthStatistics(BandwidthStatistics[] registryBandwidthStatistics) {
+ this.registryBandwidthStatistics = registryBandwidthStatistics;
+ }
+
+ public BandwidthStatistics[] getServiceBandwidthStatistics() {
+ return serviceBandwidthStatistics;
+ }
+
+ public void setServiceBandwidthStatistics(BandwidthStatistics[] serviceBandwidthStatistics) {
+ this.serviceBandwidthStatistics = serviceBandwidthStatistics;
+ }
+
+ public BandwidthStatistics[] getWebappBandwidthStatistics() {
+ return webappBandwidthStatistics;
+ }
+
+ public void setWebappBandwidthStatistics(BandwidthStatistics[] webappBandwidthStatistics) {
+ this.webappBandwidthStatistics = webappBandwidthStatistics;
+ }
+
+ public RequestStatistics getTotalRequestStatistics() {
+ return totalRequestStatistics;
+ }
+
+ public void setTotalRequestStatistics(RequestStatistics totalRequestStatistics) {
+ this.totalRequestStatistics = totalRequestStatistics;
+ }
+
+ public BandwidthStatistics getTotalRegistryBandwidth() {
+ return totalRegistryBandwidth;
+ }
+
+ public void setTotalRegistryBandwidth(BandwidthStatistics totalRegistryBandwidth) {
+ this.totalRegistryBandwidth = totalRegistryBandwidth;
+ }
+
+ public BandwidthStatistics getTotalServiceBandwidth() {
+ return totalServiceBandwidth;
+ }
+
+ public void setTotalServiceBandwidth(BandwidthStatistics totalServiceBandwidth) {
+ this.totalServiceBandwidth = totalServiceBandwidth;
+ }
+
+ public BandwidthStatistics getTotalWebappBandwidth() {
+ return totalWebappBandwidth;
+ }
+
+ public void setTotalWebappBandwidth(BandwidthStatistics totalWebappBandwidth) {
+ this.totalWebappBandwidth = totalWebappBandwidth;
+ }
+
+ public CartridgeStatistics[] getCartridgeStatistics() {
+ return cartridgeStatistics;
+ }
+
+ public void setCartridgeStatistics(CartridgeStatistics[] cartridgeStatistics) {
+ this.cartridgeStatistics = cartridgeStatistics;
+ }
+
+ public CartridgeStatistics getTotalCartridgeHours() {
+ return totalCartridgeHours;
+ }
+
+ public void setTotalCartridgeHours(CartridgeStatistics totalCartridgeHours) {
+ this.totalCartridgeHours = totalCartridgeHours;
+ }
+
+ public TenantUsage() {
+ // empty method required for used in web services
+ }
+
+ public TenantUsage(int tenantId, String domain) {
+ this.tenantId = tenantId;
+ this.domain = domain;
+ }
+
+ public int getTenantId() {
+ return tenantId;
+ }
+
+ public void setTenantId(int tenantId) {
+ this.tenantId = tenantId;
+ }
+
+ public String getDomain() {
+ return domain;
+ }
+
+ public void setDomain(String domain) {
+ this.domain = domain;
+ }
+
+ public UsageEntry[] getUsageEntries() {
+ return usageEntries;
+ }
+
+ public void setUsageEntries(UsageEntry[] usageEntries) {
+ this.usageEntries = usageEntries;
+ }
+
+ public RequestStatistics[] getRequestStatistics() {
+ return requestStatistics;
+ }
+
+ public void setRequestStatistics(RequestStatistics[] requestStatistics) {
+ this.requestStatistics = requestStatistics;
+ }
+
+ public TenantDataCapacity getRegistryCapacity() {
+ return registryCapacity;
+ }
+
+ public void setRegistryCapacity(TenantDataCapacity registryCapacity) {
+ this.registryCapacity = registryCapacity;
+ }
+
+ public int getNumberOfUsers() {
+ return numberOfUsers;
+ }
+
+ public void setNumberOfUsers(int numberOfUsers) {
+ this.numberOfUsers = numberOfUsers;
+ }
+
+ public long getRegistryContentCapacity(){
+ long retValue = 0;
+ if (registryCapacity != null) {
+ retValue = registryCapacity.getRegistryContentCapacity();
+ }
+ return retValue;
+ }
+
+ public long getRegistryContentHistoryCapacity(){
+ long retValue = 0;
+ if (registryCapacity != null) {
+ retValue = registryCapacity.getRegistryContentHistoryCapacity();
+ }
+ return retValue;
+ }
+
+ public long getTotalIncomingBandwidth(){
+ long incomingBW = 0;
+ if(totalRegistryBandwidth != null){
+ incomingBW += totalRegistryBandwidth.getIncomingBandwidth();
+ }
+ if(totalServiceBandwidth != null){
+ incomingBW += totalServiceBandwidth.getIncomingBandwidth();
+ }
+ if(totalWebappBandwidth != null){
+ incomingBW += totalWebappBandwidth.getIncomingBandwidth();
+ }
+ return incomingBW;
+ }
+
+ public long getTotalOutgoingBandwidth(){
+ long outgoingBW = 0;
+ if(totalRegistryBandwidth != null){
+ outgoingBW += totalRegistryBandwidth.getOutgoingBandwidth();
+ }
+ if(totalServiceBandwidth != null){
+ outgoingBW += totalServiceBandwidth.getOutgoingBandwidth();
+ }
+ if(totalWebappBandwidth != null){
+ outgoingBW += totalWebappBandwidth.getOutgoingBandwidth();
+ }
+ return outgoingBW;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/df3475cc/components/org.apache.stratos.usage/src/main/java/org/apache/stratos/usage/beans/UsageEntry.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.usage/src/main/java/org/apache/stratos/usage/beans/UsageEntry.java b/components/org.apache.stratos.usage/src/main/java/org/apache/stratos/usage/beans/UsageEntry.java
new file mode 100644
index 0000000..04e8be2
--- /dev/null
+++ b/components/org.apache.stratos.usage/src/main/java/org/apache/stratos/usage/beans/UsageEntry.java
@@ -0,0 +1,49 @@
+/*
+ *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.stratos.usage.beans;
+
+public class UsageEntry {
+ private String key;
+ private String value;
+
+ public UsageEntry() {
+ // empty constructor to used in web services
+ }
+
+ public UsageEntry(String key, String value) {
+ this.key = key;
+ this.value = value;
+ }
+
+ public String getKey() {
+ return key;
+ }
+
+ public void setKey(String key) {
+ this.key = key;
+ }
+
+ public String getValue() {
+ return value;
+ }
+
+ public void setValue(String value) {
+ this.value = value;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/df3475cc/components/org.apache.stratos.usage/src/main/java/org/apache/stratos/usage/internal/UsageServiceComponent.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.usage/src/main/java/org/apache/stratos/usage/internal/UsageServiceComponent.java b/components/org.apache.stratos.usage/src/main/java/org/apache/stratos/usage/internal/UsageServiceComponent.java
new file mode 100644
index 0000000..2c3b133
--- /dev/null
+++ b/components/org.apache.stratos.usage/src/main/java/org/apache/stratos/usage/internal/UsageServiceComponent.java
@@ -0,0 +1,101 @@
+/*
+ *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.stratos.usage.internal;
+
+import org.apache.stratos.usage.util.Util;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.osgi.service.component.ComponentContext;
+import org.wso2.carbon.registry.core.service.RegistryService;
+import org.wso2.carbon.user.core.service.RealmService;
+import org.wso2.carbon.utils.ConfigurationContextService;
+import org.wso2.carbon.ndatasource.core.DataSourceService;
+
+/**
+ * @scr.component name="org.wso2.carbon.usage" immediate="true"
+ * @scr.reference name="registry.service"
+ * interface="org.wso2.carbon.registry.core.service.RegistryService" cardinality="1..1"
+ * policy="dynamic" bind="setRegistryService" unbind="unsetRegistryService"
+ * @scr.reference name="user.realmservice.default"
+ * interface="org.wso2.carbon.user.core.service.RealmService" cardinality="1..1"
+ * policy="dynamic" bind="setRealmService" unbind="unsetRealmService"
+ * @scr.reference name="config.context.service"
+ * interface="org.wso2.carbon.utils.ConfigurationContextService" cardinality="1..1"
+ * policy="dynamic" bind="setConfigurationContextService" unbind="unsetConfigurationContextService"
+ * @scr.reference name="datasources.service"
+ * interface="org.wso2.carbon.ndatasource.core.DataSourceService"
+ * cardinality="1..1" policy="dynamic"
+ * bind="setDataSourceService" unbind="unsetDataSourceService"
+ */
+public class UsageServiceComponent {
+ private static Log log = LogFactory.getLog(UsageServiceComponent.class);
+
+
+ protected void activate(ComponentContext context) {
+ try {
+ Util.registerRetrieverServices(context.getBundleContext());
+ log.debug("******* Usage bundle is activated ******* ");
+ } catch (Exception e) {
+ log.error("******* Error in activating Usage bundle ******* ");
+ }
+ }
+
+ protected void deactivate(ComponentContext context) {
+ log.debug("******* Usage is deactivated ******* ");
+ }
+
+ protected void setRegistryService(RegistryService registryService) {
+ Util.setRegistryService(registryService);
+ }
+
+ protected void unsetRegistryService(RegistryService registryService) {
+ Util.setRegistryService(null);
+ }
+
+ protected void setRealmService(RealmService realmService) {
+ Util.setRealmService(realmService);
+ }
+
+ protected void unsetRealmService(RealmService realmService) {
+ Util.setRealmService(null);
+ }
+
+ protected void setConfigurationContextService(ConfigurationContextService ccService) {
+ //commented to work with the local transport
+ /*ConfigurationContext serverCtx = ccService.getServerConfigContext();
+ AxisConfiguration serverConfig = serverCtx.getAxisConfiguration();
+ LocalTransportReceiver.CONFIG_CONTEXT = new ConfigurationContext(serverConfig);
+ LocalTransportReceiver.CONFIG_CONTEXT.setServicePath("services");
+ LocalTransportReceiver.CONFIG_CONTEXT.setContextRoot("local:/");
+ */
+ Util.setConfigurationContextService(ccService);
+ }
+
+ protected void unsetConfigurationContextService(ConfigurationContextService ccService) {
+ Util.setConfigurationContextService(null);
+ }
+
+ protected void setDataSourceService(DataSourceService dataSourceService){
+ Util.setDataSourceService(dataSourceService);
+ }
+
+ protected void unsetDataSourceService(DataSourceService dataSourceService){
+ Util.setDataSourceService(null);
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/df3475cc/components/org.apache.stratos.usage/src/main/java/org/apache/stratos/usage/services/UsageService.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.usage/src/main/java/org/apache/stratos/usage/services/UsageService.java b/components/org.apache.stratos.usage/src/main/java/org/apache/stratos/usage/services/UsageService.java
new file mode 100644
index 0000000..c7714bb
--- /dev/null
+++ b/components/org.apache.stratos.usage/src/main/java/org/apache/stratos/usage/services/UsageService.java
@@ -0,0 +1,204 @@
+/*
+ *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.stratos.usage.services;
+
+import org.apache.stratos.usage.beans.InstanceUsageStatics;
+import org.apache.stratos.usage.beans.PaginatedInstanceUsage;
+import org.apache.stratos.usage.beans.PaginatedTenantUsageInfo;
+import org.apache.stratos.usage.util.Util;
+import org.apache.stratos.common.util.CommonUtil;
+import org.wso2.carbon.core.AbstractAdmin;
+import org.wso2.carbon.registry.core.session.UserRegistry;
+import org.apache.stratos.usage.beans.TenantUsage;
+import org.wso2.carbon.user.core.tenant.Tenant;
+import org.wso2.carbon.user.core.tenant.TenantManager;
+
+import java.text.ParseException;
+import java.util.*;
+
+public class UsageService extends AbstractAdmin {
+ /**
+ * Return the usage of the current logged in tenant
+ *
+ * @param yearMonth year month
+ * @return the current usage of the tenant
+ * @throws Exception
+ */
+ public TenantUsage retrieveCurrentTenantUsage(String yearMonth) throws Exception {
+ UserRegistry registry = (UserRegistry) getConfigUserRegistry();
+ int tenantId = registry.getTenantId();
+ return Util.getTenantUsageRetriever().getTenantUsage(tenantId, yearMonth);
+ }
+
+ /**
+ * Return the all the tenant usages, requires super admin permissions
+ *
+ * @param yearMonth
+ * @return
+ * @throws Exception
+ */
+ public TenantUsage[] retrieveTenantUsages(String yearMonth) throws Exception {
+ TenantManager tenantManager = Util.getRealmService().getTenantManager();
+ Tenant[] tenants = (Tenant[]) tenantManager.getAllTenants();
+ List<TenantUsage> tenantUsages = new ArrayList<TenantUsage>();
+ for (Tenant tenant : tenants) {
+ if (tenant.isActive()) {
+ TenantUsage tenantUsage = Util.getTenantUsageRetriever().getTenantUsage(
+ tenant.getId(), yearMonth);
+ tenantUsages.add(tenantUsage);
+ }
+ }
+ return tenantUsages.toArray(new TenantUsage[tenantUsages.size()]);
+ }
+
+ /**
+ * Return the all the tenant usages paginated, requires super admin permissions
+ *
+ * @param yearMonth
+ * @param pageNumber
+ * @param entriesPerPage
+ * @return PaginatedTenantUsageInfo
+ * @throws Exception
+ */
+ public PaginatedTenantUsageInfo retrievePaginatedTenantUsages(String yearMonth, int pageNumber,
+ int entriesPerPage) throws Exception {
+ TenantManager tenantManager = Util.getRealmService().getTenantManager();
+ Tenant[] tenants = (Tenant[]) tenantManager.getAllTenants();
+ List<TenantUsage> tenantUsages = new ArrayList<TenantUsage>();
+
+ int i = 0;
+ int numberOfPages = 0;
+ for (Tenant tenant : tenants) {
+ if (tenant.isActive()) {
+ if (i % entriesPerPage == 0) {
+ numberOfPages++;
+ }
+ if (numberOfPages == pageNumber) {
+ TenantUsage tenantUsage = Util.getTenantUsageRetriever().getTenantUsage(
+ tenant.getId(), yearMonth);
+ tenantUsages.add(tenantUsage);
+ }
+ i++;
+ }
+ }
+ PaginatedTenantUsageInfo paginatedTenantInfo = new PaginatedTenantUsageInfo();
+ paginatedTenantInfo.setTenantUsages(
+ tenantUsages.toArray(new TenantUsage[tenantUsages.size()]));
+ paginatedTenantInfo.setNumberOfPages(numberOfPages);
+ paginatedTenantInfo.setPageNumber(pageNumber);
+ return paginatedTenantInfo;
+ }
+
+ /**
+ * Returns usage of a particular tenant, requires super admin permissions
+ *
+ * @param yearMonth
+ * @param tenantId
+ * @return
+ * @throws Exception
+ */
+ public TenantUsage retrieveTenantUsage(String yearMonth, int tenantId) throws Exception {
+ return Util.getTenantUsageRetriever().getTenantUsage(tenantId, yearMonth);
+ }
+
+ public InstanceUsageStatics[] retrieveInstanceUsage() throws Exception {
+ return Util.getTenantUsageRetriever().getInstanceUsages();
+ }
+
+ /**
+ * @param yearMonth year and month that used to retrieve data
+ * @param pageNumber
+ * @param entriesPerPage number of entries per page
+ * @return PaginatedInstanceUsage object that hold instance data and other parameters
+ * @throws Exception when retrieving Paginated Instance Usage error occurs
+ */
+ public PaginatedInstanceUsage retrievePaginatedInstanceUsage(String yearMonth, int pageNumber,
+ int entriesPerPage) throws Exception {
+ InstanceUsageStatics[] instanceUsages = retrieveInstanceUsage();
+ List<InstanceUsageStatics> instanceUsagesList = new ArrayList<InstanceUsageStatics>();
+ PaginatedInstanceUsage paginatedInstanceUsages = new PaginatedInstanceUsage();
+ int i = 0;
+ int numberOfPages = 0;
+ if (instanceUsages != null && instanceUsages.length > 0) {
+ for (InstanceUsageStatics usage : instanceUsages) {
+ InstanceUsageStatics instance = getValidUsageEntry(usage, yearMonth);
+ if (instance != null) {
+ if (i % entriesPerPage == 0) {
+ numberOfPages++;
+ }
+ }
+ }
+
+ paginatedInstanceUsages.setInstanceUsages(
+ instanceUsagesList.toArray(new InstanceUsageStatics[instanceUsagesList.size()]));
+ } else {
+ paginatedInstanceUsages.setInstanceUsages(null);
+ }
+
+ paginatedInstanceUsages.setNumberOfPages(numberOfPages);
+ paginatedInstanceUsages.setPageNumber(pageNumber);
+ return paginatedInstanceUsages;
+ }
+
+ /**
+ * @param usage is Instance usage Statics object that holds data
+ * @param yearMonth year and month that need to check with instance usage data
+ * @return instance static if instance usage data match with given year and month, else null
+ */
+ public InstanceUsageStatics getValidUsageEntry(InstanceUsageStatics usage, String yearMonth) {
+ Date date = Calendar.getInstance().getTime();
+ if (yearMonth != null) {
+ try {
+ date = CommonUtil.getDateFromMonthString(yearMonth);
+ } catch (ParseException e) {
+
+ }
+ }
+ Calendar startDate = Calendar.getInstance();
+ startDate.setTime(date);
+ Calendar endDate = (Calendar) startDate.clone();
+ endDate.add(Calendar.MONTH, 1);
+ if (usage.getStartTime().compareTo(startDate) <= 0 && usage.getStopTime().compareTo(endDate) >= 0) {
+ usage.setUsedTimeInSeconds((endDate.getTimeInMillis() -
+ startDate.getTimeInMillis()) / 1000);
+ return usage;
+ }
+ if (usage.getStartTime().compareTo(startDate) > 0 && usage.getStartTime().compareTo(endDate) < 0) {
+ if (usage.getStopTime().compareTo(endDate) < 0) {
+ usage.setUsedTimeInSeconds((usage.getStopTime().getTimeInMillis() -
+ usage.getStartTime().getTimeInMillis()) / 1000);
+ return usage;
+
+ } else if (usage.getStopTime().compareTo(endDate) > 0) {
+ usage.setUsedTimeInSeconds((endDate.getTimeInMillis() -
+ usage.getStartTime().getTimeInMillis()) / 1000);
+ return usage;
+
+ }
+ }
+ if (usage.getStartTime().compareTo(startDate) < 0 && usage.getStopTime().compareTo(endDate) < 0) {
+ if (usage.getStopTime().compareTo(startDate) > 0) {
+ usage.setUsedTimeInSeconds((usage.getStopTime().getTimeInMillis() -
+ startDate.getTimeInMillis()) / 1000);
+ return usage;
+ }
+ }
+ return null;
+ }
+}