From 3da09345c975be08a92a6cb81ccd9cd5b1a57aee Mon Sep 17 00:00:00 2001 From: keshav Date: Wed, 29 Dec 2010 19:12:31 -0800 Subject: [PATCH] Changed schema to keep track of which public IP address and host a user statistics entry is for --- core/src/com/cloud/user/UserStatisticsVO.java | 28 +++++++++++--- .../com/cloud/network/NetworkManagerImpl.java | 4 +- .../VirtualNetworkApplianceManagerImpl.java | 4 +- .../com/cloud/user/dao/UserStatisticsDao.java | 4 +- .../cloud/user/dao/UserStatisticsDaoImpl.java | 38 +++++++++++-------- setup/db/create-schema.sql | 2 + 6 files changed, 52 insertions(+), 28 deletions(-) diff --git a/core/src/com/cloud/user/UserStatisticsVO.java b/core/src/com/cloud/user/UserStatisticsVO.java index 8f1cb26e161..fff50160861 100644 --- a/core/src/com/cloud/user/UserStatisticsVO.java +++ b/core/src/com/cloud/user/UserStatisticsVO.java @@ -37,7 +37,13 @@ public class UserStatisticsVO { private long dataCenterId; @Column(name="account_id", updatable=false) - private long accountId; + private long accountId; + + @Column(name="public_ip_address") + private String publicIpAddress; + + @Column(name="host_id") + private Long hostId; @Column(name="net_bytes_received") private long netBytesReceived; @@ -54,13 +60,15 @@ public class UserStatisticsVO { protected UserStatisticsVO() { } - public UserStatisticsVO(long accountId, long dcId) { - this.accountId = accountId; + public UserStatisticsVO(long accountId, long dcId, String publicIpAddress, Long hostId) { + this.accountId = accountId; + this.dataCenterId = dcId; + this.publicIpAddress = publicIpAddress; + this.hostId = hostId; this.netBytesReceived = 0; this.netBytesSent = 0; - currentBytesReceived = 0; - currentBytesSent = 0; - dataCenterId = dcId; + this.currentBytesReceived = 0; + this.currentBytesSent = 0; } public long getAccountId() { @@ -73,6 +81,14 @@ public class UserStatisticsVO { public long getDataCenterId() { return dataCenterId; + } + + public String getPublicIpAddress() { + return publicIpAddress; + } + + public Long getHostId() { + return hostId; } public long getCurrentBytesReceived() { diff --git a/server/src/com/cloud/network/NetworkManagerImpl.java b/server/src/com/cloud/network/NetworkManagerImpl.java index bf919ce7b72..7d784921960 100755 --- a/server/src/com/cloud/network/NetworkManagerImpl.java +++ b/server/src/com/cloud/network/NetworkManagerImpl.java @@ -326,12 +326,12 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag ip = new PublicIp(sourceNat, _vlanDao.findById(sourceNat.getVlanId()), NetUtils.createSequenceBasedMacAddress(sourceNat.getMacAddress())); } - UserStatisticsVO stats = _userStatsDao.findBy(ownerId, dcId); + UserStatisticsVO stats = _userStatsDao.findBy(ownerId, dcId, null, null); if (stats == null) { if (s_logger.isDebugEnabled()) { s_logger.debug("Creating statistics for the owner: " + ownerId); } - stats = new UserStatisticsVO(ownerId, dcId); + stats = new UserStatisticsVO(ownerId, dcId, null, null); _userStatsDao.persist(stats); } txn.commit(); diff --git a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java index f80ff2604d8..8ab259baa97 100644 --- a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java +++ b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java @@ -661,7 +661,7 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian final Transaction txn = Transaction.currentTxn(); try { txn.start(); - final UserStatisticsVO userStats = _userStatsDao.lock(router.getAccountId(), router.getDataCenterId()); + final UserStatisticsVO userStats = _userStatsDao.lock(router.getAccountId(), router.getDataCenterId(), null, null); if (userStats != null) { final RebootAnswer sa = (RebootAnswer) answer; final Long received = sa.getBytesReceived(); @@ -1249,7 +1249,7 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian continue; } txn.start(); - UserStatisticsVO stats = _statsDao.lock(router.getAccountId(), router.getDataCenterId()); + UserStatisticsVO stats = _statsDao.lock(router.getAccountId(), router.getDataCenterId(), null, null); if (stats == null) { s_logger.warn("unable to find stats for account: " + router.getAccountId()); continue; diff --git a/server/src/com/cloud/user/dao/UserStatisticsDao.java b/server/src/com/cloud/user/dao/UserStatisticsDao.java index 7f9e06ee8a7..606e11cbde6 100644 --- a/server/src/com/cloud/user/dao/UserStatisticsDao.java +++ b/server/src/com/cloud/user/dao/UserStatisticsDao.java @@ -25,9 +25,9 @@ import com.cloud.user.UserStatisticsVO; import com.cloud.utils.db.GenericDao; public interface UserStatisticsDao extends GenericDao { - UserStatisticsVO findBy(long accountId, long dcId); + UserStatisticsVO findBy(long accountId, long dcId, String publicIp, Long hostId); - UserStatisticsVO lock(long accountId, long dcId); + UserStatisticsVO lock(long accountId, long dcId, String publicIp, Long hostId); List listBy(long accountId); diff --git a/server/src/com/cloud/user/dao/UserStatisticsDaoImpl.java b/server/src/com/cloud/user/dao/UserStatisticsDaoImpl.java index f8c9f07a723..b8826a99562 100644 --- a/server/src/com/cloud/user/dao/UserStatisticsDaoImpl.java +++ b/server/src/com/cloud/user/dao/UserStatisticsDaoImpl.java @@ -43,39 +43,45 @@ public class UserStatisticsDaoImpl extends GenericDaoBase= ?) " + "ORDER BY us.id"; - private final SearchBuilder UserDcSearch; - private final SearchBuilder UserSearch; + private final SearchBuilder AccountDcIpHostSearch; + private final SearchBuilder AccountSearch; public UserStatisticsDaoImpl() { - UserSearch = createSearchBuilder(); - UserSearch.and("account", UserSearch.entity().getAccountId(), SearchCriteria.Op.EQ); - UserSearch.done(); + AccountSearch = createSearchBuilder(); + AccountSearch.and("account", AccountSearch.entity().getAccountId(), SearchCriteria.Op.EQ); + AccountSearch.done(); - UserDcSearch = createSearchBuilder(); - UserDcSearch.and("account", UserDcSearch.entity().getAccountId(), SearchCriteria.Op.EQ); - UserDcSearch.and("dc", UserDcSearch.entity().getDataCenterId(), SearchCriteria.Op.EQ); - UserDcSearch.done(); + AccountDcIpHostSearch = createSearchBuilder(); + AccountDcIpHostSearch.and("account", AccountDcIpHostSearch.entity().getAccountId(), SearchCriteria.Op.EQ); + AccountDcIpHostSearch.and("dc", AccountDcIpHostSearch.entity().getDataCenterId(), SearchCriteria.Op.EQ); + AccountDcIpHostSearch.and("ip", AccountDcIpHostSearch.entity().getPublicIpAddress(), SearchCriteria.Op.EQ); + AccountDcIpHostSearch.and("host", AccountDcIpHostSearch.entity().getHostId(), SearchCriteria.Op.EQ); + AccountDcIpHostSearch.done(); } @Override - public UserStatisticsVO findBy(long accountId, long dcId) { - SearchCriteria sc = UserDcSearch.create(); + public UserStatisticsVO findBy(long accountId, long dcId, String publicIp, Long hostId) { + SearchCriteria sc = AccountDcIpHostSearch.create(); sc.setParameters("account", accountId); - sc.setParameters("dc", dcId); + sc.setParameters("dc", dcId); + sc.setParameters("ip", publicIp); + sc.setParameters("host", hostId); return findOneBy(sc); } @Override - public UserStatisticsVO lock(long accountId, long dcId) { - SearchCriteria sc = UserDcSearch.create(); + public UserStatisticsVO lock(long accountId, long dcId, String publicIp, Long hostId) { + SearchCriteria sc = AccountDcIpHostSearch.create(); sc.setParameters("account", accountId); - sc.setParameters("dc", dcId); + sc.setParameters("dc", dcId); + sc.setParameters("ip", publicIp); + sc.setParameters("host", hostId); return lockOneRandomRow(sc, true); } @Override public List listBy(long accountId) { - SearchCriteria sc = UserSearch.create(); + SearchCriteria sc = AccountSearch.create(); sc.setParameters("account", accountId); return search(sc, null); } diff --git a/setup/db/create-schema.sql b/setup/db/create-schema.sql index c6164fd10b0..da234a6d30f 100755 --- a/setup/db/create-schema.sql +++ b/setup/db/create-schema.sql @@ -662,6 +662,8 @@ CREATE TABLE `cloud`.`user_statistics` ( `id` bigint unsigned UNIQUE NOT NULL AUTO_INCREMENT, `data_center_id` bigint unsigned NOT NULL, `account_id` bigint unsigned NOT NULL, + `public_ip_address` varchar(15), + `host_id` bigint unsigned, `net_bytes_received` bigint unsigned NOT NULL default '0', `net_bytes_sent` bigint unsigned NOT NULL default '0', `current_bytes_received` bigint unsigned NOT NULL default '0',