diff --git a/usage/src/main/java/com/cloud/usage/UsageManagerImpl.java b/usage/src/main/java/com/cloud/usage/UsageManagerImpl.java index 744b1a2951e1..dd58760d2750 100644 --- a/usage/src/main/java/com/cloud/usage/UsageManagerImpl.java +++ b/usage/src/main/java/com/cloud/usage/UsageManagerImpl.java @@ -34,10 +34,9 @@ import com.cloud.network.Network; import com.cloud.usage.dao.UsageNetworksDao; -import com.cloud.usage.parser.NetworksUsageParser; +import com.cloud.usage.parser.UsageParser; import com.cloud.network.vpc.Vpc; import com.cloud.usage.dao.UsageVpcDao; -import com.cloud.usage.parser.VpcUsageParser; import javax.inject.Inject; import javax.naming.ConfigurationException; import javax.persistence.EntityExistsException; @@ -75,21 +74,6 @@ import com.cloud.usage.dao.UsageVPNUserDao; import com.cloud.usage.dao.UsageVmDiskDao; import com.cloud.usage.dao.UsageVolumeDao; -import com.cloud.usage.parser.BackupUsageParser; -import com.cloud.usage.parser.BucketUsageParser; -import com.cloud.usage.parser.IPAddressUsageParser; -import com.cloud.usage.parser.LoadBalancerUsageParser; -import com.cloud.usage.parser.NetworkOfferingUsageParser; -import com.cloud.usage.parser.NetworkUsageParser; -import com.cloud.usage.parser.PortForwardingUsageParser; -import com.cloud.usage.parser.SecurityGroupUsageParser; -import com.cloud.usage.parser.StorageUsageParser; -import com.cloud.usage.parser.VMInstanceUsageParser; -import com.cloud.usage.parser.VMSnapshotOnPrimaryParser; -import com.cloud.usage.parser.VMSnapshotUsageParser; -import com.cloud.usage.parser.VPNUserUsageParser; -import com.cloud.usage.parser.VmDiskUsageParser; -import com.cloud.usage.parser.VolumeUsageParser; import com.cloud.user.Account; import com.cloud.user.AccountVO; import com.cloud.user.UserStatisticsVO; @@ -180,6 +164,9 @@ public class UsageManagerImpl extends ManagerBase implements UsageManager, Runna @Inject private UsageVpcDao usageVpcDao; + @Inject + private List usageParsers; + private String _version = null; private final Calendar _jobExecTime = Calendar.getInstance(); private int _aggregationDuration = 0; @@ -198,6 +185,7 @@ public class UsageManagerImpl extends ManagerBase implements UsageManager, Runna private Future _heartbeat = null; private Future _sanity = null; private boolean usageSnapshotSelection = false; + private static TimeZone usageAggregationTimeZone = TimeZone.getTimeZone("GMT"); public UsageManagerImpl() { @@ -954,114 +942,12 @@ public void parse(UsageJobVO job, long startDateMillis, long endDateMillis) { private boolean parseHelperTables(AccountVO account, Date currentStartDate, Date currentEndDate) { boolean parsed = false; - parsed = VMInstanceUsageParser.parse(account, currentStartDate, currentEndDate); - if (logger.isDebugEnabled()) { - if (!parsed) { - logger.debug("vm usage instances successfully parsed? " + parsed + " (for account: " + account.getAccountName() + ", id: " + account.getId() + ")"); - } - } + for (UsageParser parser : usageParsers) { + parsed = parser.doParsing(account, currentStartDate, currentEndDate); - parsed = NetworkUsageParser.parse(account, currentStartDate, currentEndDate); - if (logger.isDebugEnabled()) { - if (!parsed) { - logger.debug("network usage successfully parsed? " + parsed + " (for account: " + account.getAccountName() + ", id: " + account.getId() + ")"); - } + logger.debug("{} usage was {} parsed for [{}].", parser.getParserName(), parsed ? "successfully" : "not successfully", account); } - parsed = VmDiskUsageParser.parse(account, currentStartDate, currentEndDate); - if (logger.isDebugEnabled()) { - if (!parsed) { - logger.debug("vm disk usage successfully parsed? " + parsed + " (for account: " + account.getAccountName() + ", id: " + account.getId() + ")"); - } - } - - parsed = VolumeUsageParser.parse(account, currentStartDate, currentEndDate); - if (logger.isDebugEnabled()) { - if (!parsed) { - logger.debug("volume usage successfully parsed? " + parsed + " (for account: " + account.getAccountName() + ", id: " + account.getId() + ")"); - } - } - - parsed = StorageUsageParser.parse(account, currentStartDate, currentEndDate); - if (logger.isDebugEnabled()) { - if (!parsed) { - logger.debug("storage usage successfully parsed? " + parsed + " (for account: " + account.getAccountName() + ", id: " + account.getId() + ")"); - } - } - - parsed = SecurityGroupUsageParser.parse(account, currentStartDate, currentEndDate); - if (logger.isDebugEnabled()) { - if (!parsed) { - logger.debug("Security Group usage successfully parsed? " + parsed + " (for account: " + account.getAccountName() + ", id: " + account.getId() + ")"); - } - } - - parsed = LoadBalancerUsageParser.parse(account, currentStartDate, currentEndDate); - if (logger.isDebugEnabled()) { - if (!parsed) { - logger.debug("load balancer usage successfully parsed? " + parsed + " (for account: " + account.getAccountName() + ", id: " + account.getId() + ")"); - } - } - - parsed = PortForwardingUsageParser.parse(account, currentStartDate, currentEndDate); - if (logger.isDebugEnabled()) { - if (!parsed) { - logger.debug("port forwarding usage successfully parsed? " + parsed + " (for account: " + account.getAccountName() + ", id: " + account.getId() + ")"); - } - } - - parsed = NetworkOfferingUsageParser.parse(account, currentStartDate, currentEndDate); - if (logger.isDebugEnabled()) { - if (!parsed) { - logger.debug("network offering usage successfully parsed? " + parsed + " (for account: " + account.getAccountName() + ", id: " + account.getId() + ")"); - } - } - - parsed = IPAddressUsageParser.parse(account, currentStartDate, currentEndDate); - if (logger.isDebugEnabled()) { - if (!parsed) { - logger.debug("IPAddress usage successfully parsed? " + parsed + " (for account: " + account.getAccountName() + ", id: " + account.getId() + ")"); - } - } - parsed = VPNUserUsageParser.parse(account, currentStartDate, currentEndDate); - if (logger.isDebugEnabled()) { - if (!parsed) { - logger.debug("VPN user usage successfully parsed? " + parsed + " (for account: " + account.getAccountName() + ", id: " + account.getId() + ")"); - } - } - parsed = VMSnapshotUsageParser.parse(account, currentStartDate, currentEndDate); - if (logger.isDebugEnabled()) { - if (!parsed) { - logger.debug("VM Snapshot usage successfully parsed? " + parsed + " (for account: " + account.getAccountName() + ", id: " + account.getId() + ")"); - } - } - parsed = VMSnapshotOnPrimaryParser.parse(account, currentStartDate, currentEndDate); - if (logger.isDebugEnabled()) { - if (!parsed) { - logger.debug("VM Snapshot on primary usage successfully parsed? " + parsed + " (for account: " + account.getAccountName() + ", id: " + account.getId() + ")"); - } - } - parsed = BackupUsageParser.parse(account, currentStartDate, currentEndDate); - if (logger.isDebugEnabled()) { - if (!parsed) { - logger.debug("VM Backup usage successfully parsed? " + parsed + " (for account: " + account.getAccountName() + ", id: " + account.getId() + ")"); - } - } - parsed = BucketUsageParser.parse(account, currentStartDate, currentEndDate); - if (logger.isDebugEnabled()) { - if (!parsed) { - logger.debug("Bucket usage successfully parsed? " + parsed + " (for account: " + account.getAccountName() + ", id: " + account.getId() + ")"); - } - } - parsed = NetworksUsageParser.parse(account, currentStartDate, currentEndDate); - if (!parsed) { - logger.debug("Networks usage not parsed for account [{}}].", account); - } - - parsed = VpcUsageParser.parse(account, currentStartDate, currentEndDate); - if (!parsed) { - logger.debug(String.format("VPC usage failed to parse for account [%s].", account)); - } return parsed; } diff --git a/usage/src/main/java/com/cloud/usage/parser/BackupUsageParser.java b/usage/src/main/java/com/cloud/usage/parser/BackupUsageParser.java index 82370fcae3e9..b639e92c71a0 100644 --- a/usage/src/main/java/com/cloud/usage/parser/BackupUsageParser.java +++ b/usage/src/main/java/com/cloud/usage/parser/BackupUsageParser.java @@ -21,49 +21,35 @@ import java.util.Date; import java.util.List; -import javax.annotation.PostConstruct; import javax.inject.Inject; import org.apache.cloudstack.usage.UsageTypes; -import org.apache.logging.log4j.Logger; -import org.apache.logging.log4j.LogManager; import org.springframework.stereotype.Component; import com.cloud.usage.UsageBackupVO; import com.cloud.usage.UsageVO; -import com.cloud.usage.dao.UsageDao; import com.cloud.usage.dao.UsageBackupDao; import com.cloud.user.AccountVO; @Component -public class BackupUsageParser { - protected static Logger LOGGER = LogManager.getLogger(BackupUsageParser.class); - - private static UsageDao s_usageDao; - private static UsageBackupDao s_usageBackupDao; - - @Inject - private UsageDao usageDao; +public class BackupUsageParser extends UsageParser { @Inject private UsageBackupDao usageBackupDao; - @PostConstruct - void init() { - s_usageDao = usageDao; - s_usageBackupDao = usageBackupDao; + @Override + public String getParserName() { + return "VM Backup"; } - public static boolean parse(AccountVO account, Date startDate, Date endDate) { - if (LOGGER.isDebugEnabled()) { - LOGGER.debug("Parsing all VM Backup usage events for account: " + account.getId()); - } + @Override + protected boolean parse(AccountVO account, Date startDate, Date endDate) { if ((endDate == null) || endDate.after(new Date())) { endDate = new Date(); } - final List usageBackups = s_usageBackupDao.getUsageRecords(account.getId(), startDate, endDate); + final List usageBackups = usageBackupDao.getUsageRecords(account.getId(), startDate, endDate); if (usageBackups == null || usageBackups.isEmpty()) { - LOGGER.debug("No VM Backup usage for this period"); + logger.debug("No VM Backup usage for this period"); return true; } @@ -91,7 +77,7 @@ public static boolean parse(AccountVO account, Date startDate, Date endDate) { new UsageVO(zoneId, account.getAccountId(), account.getDomainId(), description, usageDisplay + " Hrs", UsageTypes.BACKUP, new Double(usage), vmId, null, offeringId, null, vmId, usageBackup.getSize(), usageBackup.getProtectedSize(), startDate, endDate); - s_usageDao.persist(usageRecord); + usageDao.persist(usageRecord); } return true; diff --git a/usage/src/main/java/com/cloud/usage/parser/BucketUsageParser.java b/usage/src/main/java/com/cloud/usage/parser/BucketUsageParser.java index e8686e95ea00..1c0c30c737c7 100644 --- a/usage/src/main/java/com/cloud/usage/parser/BucketUsageParser.java +++ b/usage/src/main/java/com/cloud/usage/parser/BucketUsageParser.java @@ -19,47 +19,32 @@ import com.cloud.usage.BucketStatisticsVO; import com.cloud.usage.UsageVO; import com.cloud.usage.dao.BucketStatisticsDao; -import com.cloud.usage.dao.UsageDao; import com.cloud.user.AccountVO; import org.apache.cloudstack.usage.UsageTypes; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; import org.springframework.stereotype.Component; -import javax.annotation.PostConstruct; import javax.inject.Inject; import java.util.ArrayList; import java.util.Date; import java.util.List; @Component -public class BucketUsageParser { - public static final Logger LOGGER = LogManager.getLogger(BucketUsageParser.class); - - private static UsageDao s_usageDao; - private static BucketStatisticsDao s_bucketStatisticsDao; - - @Inject - private UsageDao _usageDao; +public class BucketUsageParser extends UsageParser { @Inject - private BucketStatisticsDao _bucketStatisticsDao; + private BucketStatisticsDao bucketStatisticsDao; - @PostConstruct - void init() { - s_usageDao = _usageDao; - s_bucketStatisticsDao = _bucketStatisticsDao; + @Override + public String getParserName() { + return "Bucket"; } - public static boolean parse(AccountVO account, Date startDate, Date endDate) { - if (LOGGER.isDebugEnabled()) { - LOGGER.debug("Parsing all Bucket usage events for account {}", account); - } - + @Override + protected boolean parse(AccountVO account, Date startDate, Date endDate) { if ((endDate == null) || endDate.after(new Date())) { endDate = new Date(); } - List BucketStatisticsVOs = s_bucketStatisticsDao.listBy(account.getId()); + List BucketStatisticsVOs = bucketStatisticsDao.listBy(account.getId()); List usageRecords = new ArrayList<>(); for (BucketStatisticsVO bucketStatistics : BucketStatisticsVOs) { @@ -72,7 +57,7 @@ public static boolean parse(AccountVO account, Date startDate, Date endDate) { } } - s_usageDao.saveUsageRecords(usageRecords); + usageDao.saveUsageRecords(usageRecords); return true; } diff --git a/usage/src/main/java/com/cloud/usage/parser/IPAddressUsageParser.java b/usage/src/main/java/com/cloud/usage/parser/IPAddressUsageParser.java index 516f58a0a7b5..6a21dce074b5 100644 --- a/usage/src/main/java/com/cloud/usage/parser/IPAddressUsageParser.java +++ b/usage/src/main/java/com/cloud/usage/parser/IPAddressUsageParser.java @@ -22,46 +22,32 @@ import java.util.List; import java.util.Map; -import javax.annotation.PostConstruct; import javax.inject.Inject; import com.cloud.usage.UsageManagerImpl; import com.cloud.utils.DateUtil; -import org.apache.logging.log4j.Logger; -import org.apache.logging.log4j.LogManager; import org.springframework.stereotype.Component; import org.apache.cloudstack.usage.UsageTypes; import com.cloud.usage.UsageIPAddressVO; import com.cloud.usage.UsageVO; -import com.cloud.usage.dao.UsageDao; import com.cloud.usage.dao.UsageIPAddressDao; import com.cloud.user.AccountVO; import com.cloud.utils.Pair; @Component -public class IPAddressUsageParser { - protected static Logger LOGGER = LogManager.getLogger(IPAddressUsageParser.class); - - private static UsageDao s_usageDao; - private static UsageIPAddressDao s_usageIPAddressDao; - - @Inject - private UsageDao _usageDao; +public class IPAddressUsageParser extends UsageParser { @Inject - private UsageIPAddressDao _usageIPAddressDao; + private UsageIPAddressDao usageIPAddressDao; - @PostConstruct - void init() { - s_usageDao = _usageDao; - s_usageIPAddressDao = _usageIPAddressDao; + @Override + public String getParserName() { + return "IP Address"; } - public static boolean parse(AccountVO account, Date startDate, Date endDate) { - if (LOGGER.isDebugEnabled()) { - LOGGER.debug("Parsing IP Address usage for account: " + account.getId()); - } + @Override + protected boolean parse(AccountVO account, Date startDate, Date endDate) { if ((endDate == null) || endDate.after(new Date())) { endDate = new Date(); } @@ -71,10 +57,10 @@ public static boolean parse(AccountVO account, Date startDate, Date endDate) { // - look for an entry for accountId with end date in the given range // - look for an entry for accountId with end date null (currently running vm or owned IP) // - look for an entry for accountId with start date before given range *and* end date after given range - List usageIPAddress = s_usageIPAddressDao.getUsageRecords(account.getId(), account.getDomainId(), startDate, endDate); + List usageIPAddress = usageIPAddressDao.getUsageRecords(account.getId(), account.getDomainId(), startDate, endDate); if (usageIPAddress.isEmpty()) { - LOGGER.debug("No IP Address usage for this period"); + logger.debug("No IP Address usage for this period"); return true; } @@ -128,7 +114,7 @@ public static boolean parse(AccountVO account, Date startDate, Date endDate) { return true; } - private static void updateIpUsageData(Map> usageDataMap, String key, long ipId, long duration) { + private void updateIpUsageData(Map> usageDataMap, String key, long ipId, long duration) { Pair ipUsageInfo = usageDataMap.get(key); if (ipUsageInfo == null) { ipUsageInfo = new Pair(new Long(ipId), new Long(duration)); @@ -140,18 +126,17 @@ private static void updateIpUsageData(Map> usageDataMap usageDataMap.put(key, ipUsageInfo); } - private static void createUsageRecord(long zoneId, long runningTime, Date startDate, Date endDate, AccountVO account, long ipId, String ipAddress, + private void createUsageRecord(long zoneId, long runningTime, Date startDate, Date endDate, AccountVO account, long ipId, String ipAddress, boolean isSourceNat, boolean isSystem, boolean isHidden) { - if (LOGGER.isDebugEnabled()) { - LOGGER.debug("Total usage time " + runningTime + "ms"); - } + + logger.debug("Total usage time {} ms" , runningTime); float usage = runningTime / 1000f / 60f / 60f; DecimalFormat dFormat = new DecimalFormat("#.######"); String usageDisplay = dFormat.format(usage); - LOGGER.debug("Creating IP usage record with id [{}], usage [{}], startDate [{}], and endDate [{}], for account [{}].", + logger.debug("Creating IP usage record with id [{}], usage [{}], startDate [{}], and endDate [{}], for account [{}].", ipId, usageDisplay, DateUtil.displayDateInTimezone(UsageManagerImpl.getUsageAggregationTimeZone(), startDate), DateUtil.displayDateInTimezone(UsageManagerImpl.getUsageAggregationTimeZone(), endDate), account.getId()); @@ -162,7 +147,7 @@ private static void createUsageRecord(long zoneId, long runningTime, Date startD UsageVO usageRecord = new UsageVO(zoneId, account.getAccountId(), account.getDomainId(), usageDesc, usageDisplay + " Hrs", UsageTypes.IP_ADDRESS, new Double(usage), ipId, (isSystem ? 1 : 0), (isSourceNat ? "SourceNat" : ""), startDate, endDate, isHidden); - s_usageDao.persist(usageRecord); + usageDao.persist(usageRecord); } private static class IpInfo { diff --git a/usage/src/main/java/com/cloud/usage/parser/LoadBalancerUsageParser.java b/usage/src/main/java/com/cloud/usage/parser/LoadBalancerUsageParser.java index 3d02419aec89..0c97458bf06c 100644 --- a/usage/src/main/java/com/cloud/usage/parser/LoadBalancerUsageParser.java +++ b/usage/src/main/java/com/cloud/usage/parser/LoadBalancerUsageParser.java @@ -22,46 +22,32 @@ import java.util.List; import java.util.Map; -import javax.annotation.PostConstruct; import javax.inject.Inject; import com.cloud.usage.UsageManagerImpl; import com.cloud.utils.DateUtil; -import org.apache.logging.log4j.Logger; -import org.apache.logging.log4j.LogManager; import org.springframework.stereotype.Component; import org.apache.cloudstack.usage.UsageTypes; import com.cloud.usage.UsageLoadBalancerPolicyVO; import com.cloud.usage.UsageVO; -import com.cloud.usage.dao.UsageDao; import com.cloud.usage.dao.UsageLoadBalancerPolicyDao; import com.cloud.user.AccountVO; import com.cloud.utils.Pair; @Component -public class LoadBalancerUsageParser { - protected static Logger LOGGER = LogManager.getLogger(LoadBalancerUsageParser.class); - - private static UsageDao s_usageDao; - private static UsageLoadBalancerPolicyDao s_usageLoadBalancerPolicyDao; - +public class LoadBalancerUsageParser extends UsageParser { @Inject - private UsageDao _usageDao; - @Inject - private UsageLoadBalancerPolicyDao _usageLoadBalancerPolicyDao; + private UsageLoadBalancerPolicyDao usageLoadBalancerPolicyDao; - @PostConstruct - void init() { - s_usageDao = _usageDao; - s_usageLoadBalancerPolicyDao = _usageLoadBalancerPolicyDao; + @Override + public String getParserName() { + return "Load Balancer Policy"; } - public static boolean parse(AccountVO account, Date startDate, Date endDate) { - if (LOGGER.isDebugEnabled()) { - LOGGER.debug("Parsing all LoadBalancerPolicy usage events for account: " + account.getId()); - } + @Override + protected boolean parse(AccountVO account, Date startDate, Date endDate) { if ((endDate == null) || endDate.after(new Date())) { endDate = new Date(); } @@ -71,10 +57,10 @@ public static boolean parse(AccountVO account, Date startDate, Date endDate) { // - look for an entry for accountId with end date in the given range // - look for an entry for accountId with end date null (currently running vm or owned IP) // - look for an entry for accountId with start date before given range *and* end date after given range - List usageLBs = s_usageLoadBalancerPolicyDao.getUsageRecords(account.getId(), account.getDomainId(), startDate, endDate, false, 0); + List usageLBs = usageLoadBalancerPolicyDao.getUsageRecords(account.getId(), account.getDomainId(), startDate, endDate, false, 0); if (usageLBs.isEmpty()) { - LOGGER.debug("No load balancer usage events for this period"); + logger.debug("No Load Balancer usage events for this period"); return true; } @@ -125,7 +111,7 @@ public static boolean parse(AccountVO account, Date startDate, Date endDate) { return true; } - private static void updateLBUsageData(Map> usageDataMap, String key, long lbId, long duration) { + private void updateLBUsageData(Map> usageDataMap, String key, long lbId, long duration) { Pair lbUsageInfo = usageDataMap.get(key); if (lbUsageInfo == null) { lbUsageInfo = new Pair(new Long(lbId), new Long(duration)); @@ -137,18 +123,18 @@ private static void updateLBUsageData(Map> usageDataMap usageDataMap.put(key, lbUsageInfo); } - private static void createUsageRecord(int type, long runningTime, Date startDate, Date endDate, AccountVO account, long lbId, long zoneId) { + private void createUsageRecord(int type, long runningTime, Date startDate, Date endDate, AccountVO account, long lbId, long zoneId) { // Our smallest increment is hourly for now - if (LOGGER.isDebugEnabled()) { - LOGGER.debug("Total running time " + runningTime + "ms"); - } + + logger.debug("Total running time {} ms", runningTime); + float usage = runningTime / 1000f / 60f / 60f; DecimalFormat dFormat = new DecimalFormat("#.######"); String usageDisplay = dFormat.format(usage); - LOGGER.debug("Creating usage record for load balancer with id [{}], usage [{}], startDate [{}], and endDate [{}], for account [{}].", + logger.debug("Creating usage record for load balancer with id [{}], usage [{}], startDate [{}], and endDate [{}], for account [{}].", lbId, usageDisplay, DateUtil.displayDateInTimezone(UsageManagerImpl.getUsageAggregationTimeZone(), startDate), DateUtil.displayDateInTimezone(UsageManagerImpl.getUsageAggregationTimeZone(), endDate), account.getId()); @@ -159,7 +145,7 @@ private static void createUsageRecord(int type, long runningTime, Date startDate UsageVO usageRecord = new UsageVO(zoneId, account.getId(), account.getDomainId(), usageDesc, usageDisplay + " Hrs", type, new Double(usage), null, null, null, null, lbId, null, startDate, endDate); - s_usageDao.persist(usageRecord); + usageDao.persist(usageRecord); } private static class LBInfo { diff --git a/usage/src/main/java/com/cloud/usage/parser/NetworkOfferingUsageParser.java b/usage/src/main/java/com/cloud/usage/parser/NetworkOfferingUsageParser.java index b0fc6c2df950..6cc6f609db06 100644 --- a/usage/src/main/java/com/cloud/usage/parser/NetworkOfferingUsageParser.java +++ b/usage/src/main/java/com/cloud/usage/parser/NetworkOfferingUsageParser.java @@ -22,46 +22,33 @@ import java.util.List; import java.util.Map; -import javax.annotation.PostConstruct; import javax.inject.Inject; import com.cloud.usage.UsageManagerImpl; import com.cloud.utils.DateUtil; -import org.apache.logging.log4j.Logger; -import org.apache.logging.log4j.LogManager; import org.springframework.stereotype.Component; import org.apache.cloudstack.usage.UsageTypes; import com.cloud.usage.UsageNetworkOfferingVO; import com.cloud.usage.UsageVO; -import com.cloud.usage.dao.UsageDao; import com.cloud.usage.dao.UsageNetworkOfferingDao; import com.cloud.user.AccountVO; import com.cloud.utils.Pair; @Component -public class NetworkOfferingUsageParser { - protected static Logger LOGGER = LogManager.getLogger(NetworkOfferingUsageParser.class); - - private static UsageDao s_usageDao; - private static UsageNetworkOfferingDao s_usageNetworkOfferingDao; - +public class NetworkOfferingUsageParser extends UsageParser { @Inject - private UsageDao _usageDao; - @Inject - private UsageNetworkOfferingDao _usageNetworkOfferingDao; + private UsageNetworkOfferingDao usageNetworkOfferingDao; - @PostConstruct - void init() { - s_usageDao = _usageDao; - s_usageNetworkOfferingDao = _usageNetworkOfferingDao; + @Override + public String getParserName() { + return "Network Offering"; } - public static boolean parse(AccountVO account, Date startDate, Date endDate) { - if (LOGGER.isDebugEnabled()) { - LOGGER.debug("Parsing all NetworkOffering usage events for account: " + account.getId()); - } + @Override + protected boolean parse(AccountVO account, Date startDate, Date endDate) { + if ((endDate == null) || endDate.after(new Date())) { endDate = new Date(); } @@ -71,10 +58,10 @@ public static boolean parse(AccountVO account, Date startDate, Date endDate) { // - look for an entry for accountId with end date in the given range // - look for an entry for accountId with end date null (currently running vm or owned IP) // - look for an entry for accountId with start date before given range *and* end date after given range - List usageNOs = s_usageNetworkOfferingDao.getUsageRecords(account.getId(), account.getDomainId(), startDate, endDate, false, 0); + List usageNOs = usageNetworkOfferingDao.getUsageRecords(account.getId(), account.getDomainId(), startDate, endDate, false, 0); if (usageNOs.isEmpty()) { - LOGGER.debug("No NetworkOffering usage events for this period"); + logger.debug("No NetworkOffering usage events for this period"); return true; } @@ -126,7 +113,7 @@ public static boolean parse(AccountVO account, Date startDate, Date endDate) { return true; } - private static void updateNOUsageData(Map> usageDataMap, String key, long vmId, long duration) { + private void updateNOUsageData(Map> usageDataMap, String key, long vmId, long duration) { Pair noUsageInfo = usageDataMap.get(key); if (noUsageInfo == null) { noUsageInfo = new Pair(new Long(vmId), new Long(duration)); @@ -138,19 +125,18 @@ private static void updateNOUsageData(Map> usageDataMap usageDataMap.put(key, noUsageInfo); } - private static void createUsageRecord(int type, long runningTime, Date startDate, Date endDate, AccountVO account, long vmId, long noId, long zoneId, + private void createUsageRecord(int type, long runningTime, Date startDate, Date endDate, AccountVO account, long vmId, long noId, long zoneId, boolean isDefault) { // Our smallest increment is hourly for now - if (LOGGER.isDebugEnabled()) { - LOGGER.debug("Total running time " + runningTime + "ms"); - } + + logger.debug("Total running time {} ms", runningTime); float usage = runningTime / 1000f / 60f / 60f; DecimalFormat dFormat = new DecimalFormat("#.######"); String usageDisplay = dFormat.format(usage); - LOGGER.debug("Creating network offering usage record for id [{}], vm [{}], usage [{}], startDate [{}], and endDate [{}], for account [{}].", + logger.debug("Creating network offering usage record for id [{}], vm [{}], usage [{}], startDate [{}], and endDate [{}], for account [{}].", noId, vmId, usageDisplay, DateUtil.displayDateInTimezone(UsageManagerImpl.getUsageAggregationTimeZone(), startDate), DateUtil.displayDateInTimezone(UsageManagerImpl.getUsageAggregationTimeZone(), endDate), account.getId()); @@ -161,7 +147,7 @@ private static void createUsageRecord(int type, long runningTime, Date startDate UsageVO usageRecord = new UsageVO(zoneId, account.getId(), account.getDomainId(), usageDesc, usageDisplay + " Hrs", type, new Double(usage), vmId, null, noId, null, defaultNic, null, startDate, endDate); - s_usageDao.persist(usageRecord); + usageDao.persist(usageRecord); } private static class NOInfo { diff --git a/usage/src/main/java/com/cloud/usage/parser/NetworkUsageParser.java b/usage/src/main/java/com/cloud/usage/parser/NetworkUsageParser.java index 912c2b58cb81..ec4d5089a0ec 100644 --- a/usage/src/main/java/com/cloud/usage/parser/NetworkUsageParser.java +++ b/usage/src/main/java/com/cloud/usage/parser/NetworkUsageParser.java @@ -22,20 +22,16 @@ import java.util.List; import java.util.Map; -import javax.annotation.PostConstruct; import javax.inject.Inject; import com.cloud.usage.UsageManagerImpl; import com.cloud.utils.DateUtil; -import org.apache.logging.log4j.Logger; -import org.apache.logging.log4j.LogManager; import org.springframework.stereotype.Component; import org.apache.cloudstack.usage.UsageTypes; import com.cloud.usage.UsageNetworkVO; import com.cloud.usage.UsageVO; -import com.cloud.usage.dao.UsageDao; import com.cloud.usage.dao.UsageNetworkDao; import com.cloud.user.AccountVO; import com.cloud.utils.db.SearchCriteria; @@ -43,38 +39,27 @@ import static com.cloud.utils.NumbersUtil.toHumanReadableSize; @Component -public class NetworkUsageParser { - protected static Logger LOGGER = LogManager.getLogger(NetworkUsageParser.class); - - private static UsageDao s_usageDao; - private static UsageNetworkDao s_usageNetworkDao; - - @Inject - private UsageDao _usageDao; +public class NetworkUsageParser extends UsageParser { @Inject - private UsageNetworkDao _usageNetworkDao; + private UsageNetworkDao usageNetworkDao; - @PostConstruct - void init() { - s_usageDao = _usageDao; - s_usageNetworkDao = _usageNetworkDao; + @Override + public String getParserName() { + return "Network"; } - public static boolean parse(AccountVO account, Date startDate, Date endDate) { - if (LOGGER.isDebugEnabled()) { - LOGGER.debug("Parsing all Network usage events for account: " + account.getId()); - } - + @Override + protected boolean parse(AccountVO account, Date startDate, Date endDate) { if ((endDate == null) || endDate.after(new Date())) { endDate = new Date(); } // - query usage_network table for all entries for userId with // event_date in the given range - SearchCriteria sc = s_usageNetworkDao.createSearchCriteria(); + SearchCriteria sc = usageNetworkDao.createSearchCriteria(); sc.addAnd("accountId", SearchCriteria.Op.EQ, account.getId()); sc.addAnd("eventTimeMillis", SearchCriteria.Op.BETWEEN, startDate.getTime(), endDate.getTime()); - List usageNetworkVOs = s_usageNetworkDao.search(sc, null); + List usageNetworkVOs = usageNetworkDao.search(sc, null); Map networkUsageByZone = new HashMap(); @@ -105,7 +90,7 @@ public static boolean parse(AccountVO account, Date startDate, Date endDate) { long totalBytesReceived = networkInfo.getBytesRcvd(); if ((totalBytesSent > 0L) || (totalBytesReceived > 0L)) { - LOGGER.debug("Creating usage record, total bytes sent [{}], total bytes received [{}], startDate [{}], and endDate [{}], for account [{}] in " + + logger.debug("Creating usage record, total bytes sent [{}], total bytes received [{}], startDate [{}], and endDate [{}], for account [{}] in " + "availability zone [{}].", toHumanReadableSize(totalBytesSent), toHumanReadableSize(totalBytesReceived), DateUtil.displayDateInTimezone(UsageManagerImpl.getUsageAggregationTimeZone(), startDate), DateUtil.displayDateInTimezone(UsageManagerImpl.getUsageAggregationTimeZone(), endDate), account.getId(), networkInfo.getZoneId()); @@ -135,13 +120,11 @@ UsageTypes.NETWORK_BYTES_RECEIVED, new Double(totalBytesReceived), hostId, netwo usageRecords.add(usageRecord); } else { // Don't charge anything if there were zero bytes processed - if (LOGGER.isDebugEnabled()) { - LOGGER.debug("No usage record (0 bytes used) generated for account: " + account.getId()); - } + logger.debug("No usage record (0 bytes used) generated for account: [{}]", account.getUuid()); } } - s_usageDao.saveUsageRecords(usageRecords); + usageDao.saveUsageRecords(usageRecords); return true; } diff --git a/usage/src/main/java/com/cloud/usage/parser/NetworksUsageParser.java b/usage/src/main/java/com/cloud/usage/parser/NetworksUsageParser.java index 39a51e8554f8..a754e2319c00 100644 --- a/usage/src/main/java/com/cloud/usage/parser/NetworksUsageParser.java +++ b/usage/src/main/java/com/cloud/usage/parser/NetworksUsageParser.java @@ -18,16 +18,12 @@ import com.cloud.usage.UsageNetworksVO; import com.cloud.usage.UsageVO; -import com.cloud.usage.dao.UsageDao; import com.cloud.usage.dao.UsageNetworksDao; import com.cloud.user.AccountVO; -import javax.annotation.PostConstruct; import javax.inject.Inject; import org.apache.cloudstack.usage.UsageTypes; import org.apache.commons.collections.CollectionUtils; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; import org.springframework.stereotype.Component; import java.text.DecimalFormat; @@ -35,32 +31,24 @@ import java.util.List; @Component -public class NetworksUsageParser { - private static final Logger LOGGER = LogManager.getLogger(NetworksUsageParser.class.getName()); - +public class NetworksUsageParser extends UsageParser { @Inject private UsageNetworksDao networksDao; - @Inject - private UsageDao usageDao; - - private static UsageDao staticUsageDao; - private static UsageNetworksDao staticNetworksDao; - @PostConstruct - void init() { - staticUsageDao = usageDao; - staticNetworksDao = networksDao; + @Override + public String getParserName() { + return "Networks"; } - public static boolean parse(AccountVO account, Date startDate, Date endDate) { - LOGGER.debug("Parsing all networks usage events for account {}", account); + @Override + protected boolean parse(AccountVO account, Date startDate, Date endDate) { if ((endDate == null) || endDate.after(new Date())) { endDate = new Date(); } - final List usageNetworksVO = staticNetworksDao.getUsageRecords(account.getId(), startDate, endDate); + final List usageNetworksVO = networksDao.getUsageRecords(account.getId(), startDate, endDate); if (CollectionUtils.isEmpty(usageNetworksVO)) { - LOGGER.debug(String.format("Cannot find any VPC usage for account [%s] in period between [%s] and [%s].", account, startDate, endDate)); + logger.debug("Cannot find any Networks usage for account [{}] in period between [{}] and [{}].", account, startDate, endDate); return true; } @@ -83,8 +71,8 @@ public static boolean parse(AccountVO account, Date startDate, Date endDate) { long networkId = usageNetwork.getNetworkId(); long networkOfferingId = usageNetwork.getNetworkOfferingId(); - LOGGER.debug(String.format("Creating network usage record with id [%s], network offering [%s], usage [%s], startDate [%s], and endDate [%s], for account [%s].", - networkId, networkOfferingId, usageDisplay, startDate, endDate, account)); + logger.debug("Creating network usage record with id [{}], network offering [{}], usage [{}], startDate [{}], and endDate [{}], for account [{}].", + networkId, networkOfferingId, usageDisplay, startDate, endDate, account.getId()); String description = String.format("Network usage for network ID: %d, network offering: %d", usageNetwork.getNetworkId(), usageNetwork.getNetworkOfferingId()); UsageVO usageRecord = @@ -92,7 +80,7 @@ public static boolean parse(AccountVO account, Date startDate, Date endDate) { UsageTypes.NETWORK, (double) usage, null, null, usageNetwork.getNetworkOfferingId(), null, usageNetwork.getNetworkId(), (long)0, null, startDate, endDate); usageRecord.setState(usageNetwork.getState()); - staticUsageDao.persist(usageRecord); + usageDao.persist(usageRecord); } return true; diff --git a/usage/src/main/java/com/cloud/usage/parser/PortForwardingUsageParser.java b/usage/src/main/java/com/cloud/usage/parser/PortForwardingUsageParser.java index fce2f6f8a9ce..8dc27264294e 100644 --- a/usage/src/main/java/com/cloud/usage/parser/PortForwardingUsageParser.java +++ b/usage/src/main/java/com/cloud/usage/parser/PortForwardingUsageParser.java @@ -22,46 +22,32 @@ import java.util.List; import java.util.Map; -import javax.annotation.PostConstruct; import javax.inject.Inject; import com.cloud.usage.UsageManagerImpl; import com.cloud.utils.DateUtil; -import org.apache.logging.log4j.Logger; -import org.apache.logging.log4j.LogManager; import org.springframework.stereotype.Component; import org.apache.cloudstack.usage.UsageTypes; import com.cloud.usage.UsagePortForwardingRuleVO; import com.cloud.usage.UsageVO; -import com.cloud.usage.dao.UsageDao; import com.cloud.usage.dao.UsagePortForwardingRuleDao; import com.cloud.user.AccountVO; import com.cloud.utils.Pair; @Component -public class PortForwardingUsageParser { - protected static Logger LOGGER = LogManager.getLogger(PortForwardingUsageParser.class); - - private static UsageDao s_usageDao; - private static UsagePortForwardingRuleDao s_usagePFRuleDao; - - @Inject - private UsageDao _usageDao; +public class PortForwardingUsageParser extends UsageParser { @Inject - private UsagePortForwardingRuleDao _usagePFRuleDao; + private UsagePortForwardingRuleDao usagePFRuleDao; - @PostConstruct - void init() { - s_usageDao = _usageDao; - s_usagePFRuleDao = _usagePFRuleDao; + @Override + public String getParserName() { + return "Port Forwarding Rule"; } - public static boolean parse(AccountVO account, Date startDate, Date endDate) { - if (LOGGER.isDebugEnabled()) { - LOGGER.debug("Parsing all PortForwardingRule usage events for account: " + account.getId()); - } + @Override + protected boolean parse(AccountVO account, Date startDate, Date endDate) { if ((endDate == null) || endDate.after(new Date())) { endDate = new Date(); } @@ -71,10 +57,10 @@ public static boolean parse(AccountVO account, Date startDate, Date endDate) { // - look for an entry for accountId with end date in the given range // - look for an entry for accountId with end date null (currently running vm or owned IP) // - look for an entry for accountId with start date before given range *and* end date after given range - List usagePFs = s_usagePFRuleDao.getUsageRecords(account.getId(), account.getDomainId(), startDate, endDate, false, 0); + List usagePFs = usagePFRuleDao.getUsageRecords(account.getId(), account.getDomainId(), startDate, endDate, false, 0); if (usagePFs.isEmpty()) { - LOGGER.debug("No port forwarding usage events for this period"); + logger.debug("No port forwarding usage events for this period"); return true; } @@ -125,7 +111,7 @@ public static boolean parse(AccountVO account, Date startDate, Date endDate) { return true; } - private static void updatePFUsageData(Map> usageDataMap, String key, long pfId, long duration) { + private void updatePFUsageData(Map> usageDataMap, String key, long pfId, long duration) { Pair pfUsageInfo = usageDataMap.get(key); if (pfUsageInfo == null) { pfUsageInfo = new Pair(new Long(pfId), new Long(duration)); @@ -137,18 +123,16 @@ private static void updatePFUsageData(Map> usageDataMap usageDataMap.put(key, pfUsageInfo); } - private static void createUsageRecord(int type, long runningTime, Date startDate, Date endDate, AccountVO account, long pfId, long zoneId) { + private void createUsageRecord(int type, long runningTime, Date startDate, Date endDate, AccountVO account, long pfId, long zoneId) { // Our smallest increment is hourly for now - if (LOGGER.isDebugEnabled()) { - LOGGER.debug("Total running time " + runningTime + "ms"); - } + logger.debug("Total running time {} ms", runningTime); float usage = runningTime / 1000f / 60f / 60f; DecimalFormat dFormat = new DecimalFormat("#.######"); String usageDisplay = dFormat.format(usage); - LOGGER.debug("Creating usage record for port forwarding rule [{}], usage [{}], startDate [{}], and endDate [{}], for account [{}].", + logger.debug("Creating usage record for port forwarding rule [{}], usage [{}], startDate [{}], and endDate [{}], for account [{}].", pfId, usageDisplay, DateUtil.displayDateInTimezone(UsageManagerImpl.getUsageAggregationTimeZone(), startDate), DateUtil.displayDateInTimezone(UsageManagerImpl.getUsageAggregationTimeZone(), endDate), account.getId()); @@ -159,7 +143,7 @@ private static void createUsageRecord(int type, long runningTime, Date startDate UsageVO usageRecord = new UsageVO(zoneId, account.getId(), account.getDomainId(), usageDesc, usageDisplay + " Hrs", type, new Double(usage), null, null, null, null, pfId, null, startDate, endDate); - s_usageDao.persist(usageRecord); + usageDao.persist(usageRecord); } private static class PFInfo { diff --git a/usage/src/main/java/com/cloud/usage/parser/SecurityGroupUsageParser.java b/usage/src/main/java/com/cloud/usage/parser/SecurityGroupUsageParser.java index 4bb146b77638..e09009bd2190 100644 --- a/usage/src/main/java/com/cloud/usage/parser/SecurityGroupUsageParser.java +++ b/usage/src/main/java/com/cloud/usage/parser/SecurityGroupUsageParser.java @@ -22,46 +22,32 @@ import java.util.List; import java.util.Map; -import javax.annotation.PostConstruct; import javax.inject.Inject; import com.cloud.usage.UsageManagerImpl; import com.cloud.utils.DateUtil; -import org.apache.logging.log4j.Logger; -import org.apache.logging.log4j.LogManager; import org.springframework.stereotype.Component; import org.apache.cloudstack.usage.UsageTypes; import com.cloud.usage.UsageSecurityGroupVO; import com.cloud.usage.UsageVO; -import com.cloud.usage.dao.UsageDao; import com.cloud.usage.dao.UsageSecurityGroupDao; import com.cloud.user.AccountVO; import com.cloud.utils.Pair; @Component -public class SecurityGroupUsageParser { - protected static Logger LOGGER = LogManager.getLogger(SecurityGroupUsageParser.class); - - private static UsageDao s_usageDao; - private static UsageSecurityGroupDao s_usageSecurityGroupDao; - - @Inject - private UsageDao _usageDao; +public class SecurityGroupUsageParser extends UsageParser { @Inject - private UsageSecurityGroupDao _usageSecurityGroupDao; + private UsageSecurityGroupDao usageSecurityGroupDao; - @PostConstruct - void init() { - s_usageDao = _usageDao; - s_usageSecurityGroupDao = _usageSecurityGroupDao; + @Override + public String getParserName() { + return "Security Group"; } - public static boolean parse(AccountVO account, Date startDate, Date endDate) { - if (LOGGER.isDebugEnabled()) { - LOGGER.debug("Parsing all SecurityGroup usage events for account: " + account.getId()); - } + @Override + protected boolean parse(AccountVO account, Date startDate, Date endDate) { if ((endDate == null) || endDate.after(new Date())) { endDate = new Date(); } @@ -71,10 +57,10 @@ public static boolean parse(AccountVO account, Date startDate, Date endDate) { // - look for an entry for accountId with end date in the given range // - look for an entry for accountId with end date null (currently running vm or owned IP) // - look for an entry for accountId with start date before given range *and* end date after given range - List usageSGs = s_usageSecurityGroupDao.getUsageRecords(account.getId(), account.getDomainId(), startDate, endDate, false, 0); + List usageSGs = usageSecurityGroupDao.getUsageRecords(account.getId(), account.getDomainId(), startDate, endDate, false, 0); if (usageSGs.isEmpty()) { - LOGGER.debug("No SecurityGroup usage events for this period"); + logger.debug("No SecurityGroup usage events for this period"); return true; } @@ -126,7 +112,7 @@ public static boolean parse(AccountVO account, Date startDate, Date endDate) { return true; } - private static void updateSGUsageData(Map> usageDataMap, String key, long vmId, long duration) { + private void updateSGUsageData(Map> usageDataMap, String key, long vmId, long duration) { Pair sgUsageInfo = usageDataMap.get(key); if (sgUsageInfo == null) { sgUsageInfo = new Pair(new Long(vmId), new Long(duration)); @@ -138,18 +124,16 @@ private static void updateSGUsageData(Map> usageDataMap usageDataMap.put(key, sgUsageInfo); } - private static void createUsageRecord(int type, long runningTime, Date startDate, Date endDate, AccountVO account, long vmId, long sgId, long zoneId) { + private void createUsageRecord(int type, long runningTime, Date startDate, Date endDate, AccountVO account, long vmId, long sgId, long zoneId) { // Our smallest increment is hourly for now - if (LOGGER.isDebugEnabled()) { - LOGGER.debug("Total running time " + runningTime + "ms"); - } + logger.debug("Total running time {} ms", runningTime); float usage = runningTime / 1000f / 60f / 60f; DecimalFormat dFormat = new DecimalFormat("#.######"); String usageDisplay = dFormat.format(usage); - LOGGER.debug("Creating security group usage record for id [{}], vm [{}], usage [{}], startDate [{}], and endDate [{}], for account [{}].", + logger.debug("Creating security group usage record for id [{}], vm [{}], usage [{}], startDate [{}], and endDate [{}], for account [{}].", sgId, vmId, usageDisplay, DateUtil.displayDateInTimezone(UsageManagerImpl.getUsageAggregationTimeZone(), startDate), DateUtil.displayDateInTimezone(UsageManagerImpl.getUsageAggregationTimeZone(), endDate), account.getId()); @@ -159,7 +143,7 @@ private static void createUsageRecord(int type, long runningTime, Date startDate UsageVO usageRecord = new UsageVO(zoneId, account.getId(), account.getDomainId(), usageDesc, usageDisplay + " Hrs", type, new Double(usage), vmId, null, null, null, sgId, null, startDate, endDate); - s_usageDao.persist(usageRecord); + usageDao.persist(usageRecord); } private static class SGInfo { diff --git a/usage/src/main/java/com/cloud/usage/parser/StorageUsageParser.java b/usage/src/main/java/com/cloud/usage/parser/StorageUsageParser.java index 62d1a429ae30..fc2a366ab99e 100644 --- a/usage/src/main/java/com/cloud/usage/parser/StorageUsageParser.java +++ b/usage/src/main/java/com/cloud/usage/parser/StorageUsageParser.java @@ -22,13 +22,10 @@ import java.util.List; import java.util.Map; -import javax.annotation.PostConstruct; import javax.inject.Inject; import com.cloud.usage.UsageManagerImpl; import com.cloud.utils.DateUtil; -import org.apache.logging.log4j.Logger; -import org.apache.logging.log4j.LogManager; import org.springframework.stereotype.Component; import org.apache.cloudstack.usage.UsageTypes; @@ -36,7 +33,6 @@ import com.cloud.usage.StorageTypes; import com.cloud.usage.UsageStorageVO; import com.cloud.usage.UsageVO; -import com.cloud.usage.dao.UsageDao; import com.cloud.usage.dao.UsageStorageDao; import com.cloud.user.AccountVO; import com.cloud.utils.Pair; @@ -44,27 +40,17 @@ import static com.cloud.utils.NumbersUtil.toHumanReadableSize; @Component -public class StorageUsageParser { - protected static Logger LOGGER = LogManager.getLogger(StorageUsageParser.class); - - private static UsageDao s_usageDao; - private static UsageStorageDao s_usageStorageDao; - - @Inject - private UsageDao _usageDao; +public class StorageUsageParser extends UsageParser { @Inject - private UsageStorageDao _usageStorageDao; + private UsageStorageDao usageStorageDao; - @PostConstruct - void init() { - s_usageDao = _usageDao; - s_usageStorageDao = _usageStorageDao; + @Override + public String getParserName() { + return "Storage"; } - public static boolean parse(AccountVO account, Date startDate, Date endDate) { - if (LOGGER.isDebugEnabled()) { - LOGGER.debug("Parsing all Storage usage events for account: " + account.getId()); - } + @Override + protected boolean parse(AccountVO account, Date startDate, Date endDate) { if ((endDate == null) || endDate.after(new Date())) { endDate = new Date(); } @@ -74,10 +60,10 @@ public static boolean parse(AccountVO account, Date startDate, Date endDate) { // - look for an entry for accountId with end date in the given range // - look for an entry for accountId with end date null (currently running vm or owned IP) // - look for an entry for accountId with start date before given range *and* end date after given range - List usageUsageStorages = s_usageStorageDao.getUsageRecords(account.getId(), account.getDomainId(), startDate, endDate, false, 0); + List usageUsageStorages = usageStorageDao.getUsageRecords(account.getId(), account.getDomainId(), startDate, endDate, false, 0); if (usageUsageStorages.isEmpty()) { - LOGGER.debug("No Storage usage events for this period"); + logger.debug("No Storage usage events for this period"); return true; } @@ -137,7 +123,7 @@ public static boolean parse(AccountVO account, Date startDate, Date endDate) { return true; } - private static void updateStorageUsageData(Map> usageDataMap, String key, long storageId, long duration) { + private void updateStorageUsageData(Map> usageDataMap, String key, long storageId, long duration) { Pair volUsageInfo = usageDataMap.get(key); if (volUsageInfo == null) { volUsageInfo = new Pair(new Long(storageId), new Long(duration)); @@ -149,19 +135,17 @@ private static void updateStorageUsageData(Map> usageDa usageDataMap.put(key, volUsageInfo); } - private static void createUsageRecord(long zoneId, int type, long runningTime, Date startDate, Date endDate, AccountVO account, long storageId, Long sourceId, + private void createUsageRecord(long zoneId, int type, long runningTime, Date startDate, Date endDate, AccountVO account, long storageId, Long sourceId, long size, Long virtualSize) { // Our smallest increment is hourly for now - if (LOGGER.isDebugEnabled()) { - LOGGER.debug("Total running time " + runningTime + "ms"); - } + logger.debug("Total running time {} ms", runningTime); float usage = runningTime / 1000f / 60f / 60f; DecimalFormat dFormat = new DecimalFormat("#.######"); String usageDisplay = dFormat.format(usage); - LOGGER.debug("Creating Storage usage record for type [{}], with id [{}], usage [{}], startDate [{}], and endDate [{}], for account [{}].", + logger.debug("Creating Storage usage record for type [{}], with id [{}], usage [{}], startDate [{}], and endDate [{}], for account [{}].", type, storageId, usageDisplay, DateUtil.displayDateInTimezone(UsageManagerImpl.getUsageAggregationTimeZone(), startDate), DateUtil.displayDateInTimezone(UsageManagerImpl.getUsageAggregationTimeZone(), endDate), account.getId()); @@ -199,7 +183,7 @@ private static void createUsageRecord(long zoneId, int type, long runningTime, D UsageVO usageRecord = new UsageVO(zoneId, account.getId(), account.getDomainId(), usageDesc, usageDisplay + " Hrs", usage_type, new Double(usage), null, null, null, tmplSourceId, storageId, size, virtualSize, startDate, endDate); - s_usageDao.persist(usageRecord); + usageDao.persist(usageRecord); } private static class StorageInfo { diff --git a/usage/src/main/java/com/cloud/usage/parser/UsageParser.java b/usage/src/main/java/com/cloud/usage/parser/UsageParser.java index d37150cf9b95..bb1012d6127b 100644 --- a/usage/src/main/java/com/cloud/usage/parser/UsageParser.java +++ b/usage/src/main/java/com/cloud/usage/parser/UsageParser.java @@ -16,21 +16,30 @@ // under the License. package com.cloud.usage.parser; -import java.util.Date; +import com.cloud.usage.dao.UsageDao; +import com.cloud.user.AccountVO; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import javax.inject.Inject; +import java.util.Date; -import org.apache.cloudstack.managed.context.ManagedContextRunnable; +public abstract class UsageParser { + Logger logger = LogManager.getLogger(getClass()); -public abstract class UsageParser extends ManagedContextRunnable { + @Inject + UsageDao usageDao; - @Override - protected void runInContext() { - try { - parse(null); - } catch (Exception e) { - logger.warn("Error while parsing usage events", e); - } + private void beforeParse(AccountVO account) { + logger.debug("Parsing all {} usage events for account: [{}]", getParserName(), account.getUuid()); } - public abstract void parse(Date endDate); + public abstract String getParserName(); + + protected abstract boolean parse(AccountVO account, Date startDate, Date endDate); + + public boolean doParsing(AccountVO account, Date startDate, Date endDate) { + beforeParse(account); + return parse(account, startDate, endDate); + } } diff --git a/usage/src/main/java/com/cloud/usage/parser/VMInstanceUsageParser.java b/usage/src/main/java/com/cloud/usage/parser/VMInstanceUsageParser.java index b261cc717e65..05afabcd01e0 100644 --- a/usage/src/main/java/com/cloud/usage/parser/VMInstanceUsageParser.java +++ b/usage/src/main/java/com/cloud/usage/parser/VMInstanceUsageParser.java @@ -22,46 +22,32 @@ import java.util.List; import java.util.Map; -import javax.annotation.PostConstruct; import javax.inject.Inject; import com.cloud.usage.UsageManagerImpl; import com.cloud.utils.DateUtil; -import org.apache.logging.log4j.Logger; -import org.apache.logging.log4j.LogManager; import org.springframework.stereotype.Component; import org.apache.cloudstack.usage.UsageTypes; import org.apache.commons.lang3.StringUtils; import com.cloud.usage.UsageVMInstanceVO; import com.cloud.usage.UsageVO; -import com.cloud.usage.dao.UsageDao; import com.cloud.usage.dao.UsageVMInstanceDao; import com.cloud.user.AccountVO; import com.cloud.utils.Pair; @Component -public class VMInstanceUsageParser { - protected static Logger LOGGER = LogManager.getLogger(VMInstanceUsageParser.class); - - private static UsageDao s_usageDao; - private static UsageVMInstanceDao s_usageInstanceDao; - - @Inject - private UsageDao _usageDao;; +public class VMInstanceUsageParser extends UsageParser { @Inject - private UsageVMInstanceDao _usageInstanceDao; + private UsageVMInstanceDao usageInstanceDao; - @PostConstruct - void init() { - s_usageDao = _usageDao; - s_usageInstanceDao = _usageInstanceDao; + @Override + public String getParserName() { + return "VM Instance"; } - public static boolean parse(AccountVO account, Date startDate, Date endDate) { - if (LOGGER.isDebugEnabled()) { - LOGGER.debug("Parsing all VMInstance usage events for account: " + account.getId()); - } + @Override + protected boolean parse(AccountVO account, Date startDate, Date endDate) { if ((endDate == null) || endDate.after(new Date())) { endDate = new Date(); } @@ -71,7 +57,7 @@ public static boolean parse(AccountVO account, Date startDate, Date endDate) { // - look for an entry for accountId with end date in the given range // - look for an entry for accountId with end date null (currently running vm or owned IP) // - look for an entry for accountId with start date before given range *and* end date after given range - List usageInstances = s_usageInstanceDao.getUsageRecords(account.getId(), startDate, endDate); + List usageInstances = usageInstanceDao.getUsageRecords(account.getId(), startDate, endDate); //ToDo: Add domainID for getting usage records // This map has both the running time *and* the usage amount. @@ -151,7 +137,7 @@ public static boolean parse(AccountVO account, Date startDate, Date endDate) { return true; } - private static void updateVmUsageData(Map> usageDataMap, String key, String vmName, long duration) { + private void updateVmUsageData(Map> usageDataMap, String key, String vmName, long duration) { Pair vmUsageInfo = usageDataMap.get(key); if (vmUsageInfo == null) { vmUsageInfo = new Pair(vmName, new Long(duration)); @@ -163,19 +149,17 @@ private static void updateVmUsageData(Map> usageDataM usageDataMap.put(key, vmUsageInfo); } - private static void createUsageRecord(int type, long runningTime, Date startDate, Date endDate, AccountVO account, long vmId, String vmName, long zoneId, + private void createUsageRecord(int type, long runningTime, Date startDate, Date endDate, AccountVO account, long vmId, String vmName, long zoneId, long serviceOfferingId, long templateId, String hypervisorType, Long cpuCores, Long cpuSpeed, Long memory) { // Our smallest increment is hourly for now - if (LOGGER.isDebugEnabled()) { - LOGGER.debug("Total running time " + runningTime + "ms"); - } + logger.debug("Total running time {} ms", runningTime); float usage = runningTime / 1000f / 60f / 60f; DecimalFormat dFormat = new DecimalFormat("#.######"); String usageDisplay = dFormat.format(usage); - LOGGER.debug("Creating VM usage record for vm [{}], type [{}], usage [{}], startDate [{}], and endDate [{}], for account [{}].", + logger.debug("Creating VM usage record for vm [{}], type [{}], usage [{}], startDate [{}], and endDate [{}], for account [{}].", vmName, type, usageDisplay, DateUtil.displayDateInTimezone(UsageManagerImpl.getUsageAggregationTimeZone(), startDate), DateUtil.displayDateInTimezone(UsageManagerImpl.getUsageAggregationTimeZone(), endDate), account.getId()); @@ -190,7 +174,7 @@ private static void createUsageRecord(int type, long runningTime, Date startDate UsageVO usageRecord = new UsageVO(Long.valueOf(zoneId), account.getId(), account.getDomainId(), usageDesc, usageDisplay + " Hrs", type, new Double(usage), Long.valueOf(vmId), vmName, cpuCores, cpuSpeed, memory, Long.valueOf(serviceOfferingId), Long.valueOf(templateId), Long.valueOf(vmId), startDate, endDate, hypervisorType); - s_usageDao.persist(usageRecord); + usageDao.persist(usageRecord); } private static class VMInfo { diff --git a/usage/src/main/java/com/cloud/usage/parser/VMSnapshotOnPrimaryParser.java b/usage/src/main/java/com/cloud/usage/parser/VMSnapshotOnPrimaryParser.java index d59d3c741f1d..7723f1660f09 100644 --- a/usage/src/main/java/com/cloud/usage/parser/VMSnapshotOnPrimaryParser.java +++ b/usage/src/main/java/com/cloud/usage/parser/VMSnapshotOnPrimaryParser.java @@ -22,65 +22,51 @@ import java.util.List; import java.util.Map; -import javax.annotation.PostConstruct; import javax.inject.Inject; import com.cloud.usage.UsageManagerImpl; import com.cloud.utils.DateUtil; -import org.apache.logging.log4j.Logger; -import org.apache.logging.log4j.LogManager; import org.springframework.stereotype.Component; import org.apache.cloudstack.usage.UsageTypes; import com.cloud.usage.UsageSnapshotOnPrimaryVO; import com.cloud.usage.UsageVO; -import com.cloud.usage.dao.UsageDao; import com.cloud.usage.dao.UsageVMSnapshotOnPrimaryDao; import com.cloud.user.AccountVO; import static com.cloud.utils.NumbersUtil.toHumanReadableSize; @Component -public class VMSnapshotOnPrimaryParser { - protected static Logger LOGGER = LogManager.getLogger(VMSnapshotOnPrimaryParser.class); - - private static UsageDao s_usageDao; - private static UsageVMSnapshotOnPrimaryDao s_usageSnapshotOnPrimaryDao; - - @Inject - private UsageDao _usageDao; +public class VMSnapshotOnPrimaryParser extends UsageParser { @Inject - private UsageVMSnapshotOnPrimaryDao _usageSnapshotOnPrimaryDao; + private UsageVMSnapshotOnPrimaryDao usageSnapshotOnPrimaryDao; - @PostConstruct - void init() { - s_usageDao = _usageDao; - s_usageSnapshotOnPrimaryDao = _usageSnapshotOnPrimaryDao; + @Override + public String getParserName() { + return "VM Snapshot on Primary"; } - public static boolean parse(AccountVO account, Date startDate, Date endDate) { - if (LOGGER.isDebugEnabled()) { - LOGGER.debug("Parsing all VmSnapshot on primary usage events for account: " + account.getId()); - } + @Override + protected boolean parse(AccountVO account, Date startDate, Date endDate) { if ((endDate == null) || endDate.after(new Date())) { endDate = new Date(); } - List usageUsageVMSnapshots = s_usageSnapshotOnPrimaryDao.getUsageRecords(account.getId(), account.getDomainId(), startDate, endDate); + List usageUsageVMSnapshots = usageSnapshotOnPrimaryDao.getUsageRecords(account.getId(), account.getDomainId(), startDate, endDate); if (usageUsageVMSnapshots.isEmpty()) { - LOGGER.debug("No VM snapshot on primary usage events for this period"); + logger.debug("No VM snapshot on primary usage events for this period"); return true; } Map unprocessedUsage = new HashMap(); for (UsageSnapshotOnPrimaryVO usageRec : usageUsageVMSnapshots) { - LOGGER.debug("usageRec for VMsnap on primary " + usageRec.toString()); + logger.debug("usageRec for VMsnap on primary [{}]", usageRec.toString()); String key = usageRec.getName(); if (usageRec.getPhysicalSize() == 0) { usageRec.setDeleted(new Date()); - s_usageSnapshotOnPrimaryDao.updateDeleted(usageRec); + usageSnapshotOnPrimaryDao.updateDeleted(usageRec); } else { unprocessedUsage.put(key, usageRec); } @@ -95,7 +81,7 @@ public static boolean parse(AccountVO account, Date startDate, Date endDate) { Date endDateEffective = endDate; if (usageRec.getDeleted() != null && usageRec.getDeleted().before(endDate)){ endDateEffective = usageRec.getDeleted(); - LOGGER.debug("Remoevd vm snapshot found endDateEffective " + endDateEffective + " period end data " + endDate); + logger.debug("Removed vm snapshot found endDateEffective [{}] period end data [{}]", endDateEffective, endDate); } long duration = (endDateEffective.getTime() - created.getTime()) + 1; createUsageRecord(UsageTypes.VM_SNAPSHOT_ON_PRIMARY, duration, created, endDateEffective, account, usageRec.getVolumeId(), usageRec.getName(), usageRec.getZoneId(), @@ -105,19 +91,17 @@ public static boolean parse(AccountVO account, Date startDate, Date endDate) { return true; } - private static void createUsageRecord(int usageType, long runningTime, Date startDate, Date endDate, AccountVO account, long vmId, String name, long zoneId, long virtualSize, + private void createUsageRecord(int usageType, long runningTime, Date startDate, Date endDate, AccountVO account, long vmId, String name, long zoneId, long virtualSize, long physicalSize, Long vmSnapshotId) { // Our smallest increment is hourly for now - if (LOGGER.isDebugEnabled()) { - LOGGER.debug("Total running time " + runningTime + "ms"); - } + logger.debug("Total running time {} ms", runningTime); float usage = runningTime / 1000f / 60f / 60f; DecimalFormat dFormat = new DecimalFormat("#.######"); String usageDisplay = dFormat.format(usage); - LOGGER.debug("Creating usage record for VMSnapshot with id [{}] in primary, vm [{}], usage [{}], startDate [{}], and endDate [{}], for account [{}].", + logger.debug("Creating usage record for VMSnapshot with id [{}] in primary, vm [{}], usage [{}], startDate [{}], and endDate [{}], for account [{}].", vmSnapshotId, vmId, usageDisplay, DateUtil.displayDateInTimezone(UsageManagerImpl.getUsageAggregationTimeZone(), startDate), DateUtil.displayDateInTimezone(UsageManagerImpl.getUsageAggregationTimeZone(), endDate), account.getId()); @@ -127,7 +111,7 @@ private static void createUsageRecord(int usageType, long runningTime, Date star UsageVO usageRecord = new UsageVO(zoneId, account.getId(), account.getDomainId(), usageDesc, usageDisplay + " Hrs", usageType, new Double(usage), vmId, name, null, null, vmSnapshotId, physicalSize, virtualSize, startDate, endDate); - s_usageDao.persist(usageRecord); + usageDao.persist(usageRecord); } } diff --git a/usage/src/main/java/com/cloud/usage/parser/VMSnapshotUsageParser.java b/usage/src/main/java/com/cloud/usage/parser/VMSnapshotUsageParser.java index 63fc213f4aa2..f5aa2480ece8 100644 --- a/usage/src/main/java/com/cloud/usage/parser/VMSnapshotUsageParser.java +++ b/usage/src/main/java/com/cloud/usage/parser/VMSnapshotUsageParser.java @@ -22,55 +22,41 @@ import java.util.List; import java.util.Map; -import javax.annotation.PostConstruct; import javax.inject.Inject; import com.cloud.usage.UsageManagerImpl; import com.cloud.utils.DateUtil; -import org.apache.logging.log4j.Logger; -import org.apache.logging.log4j.LogManager; import org.springframework.stereotype.Component; import org.apache.cloudstack.usage.UsageTypes; import com.cloud.usage.UsageVMSnapshotVO; import com.cloud.usage.UsageVO; -import com.cloud.usage.dao.UsageDao; import com.cloud.usage.dao.UsageVMSnapshotDao; import com.cloud.user.AccountVO; import static com.cloud.utils.NumbersUtil.toHumanReadableSize; @Component -public class VMSnapshotUsageParser { - protected static Logger LOGGER = LogManager.getLogger(VMSnapshotUsageParser.class); - - private static UsageDao s_usageDao; - private static UsageVMSnapshotDao s_usageVMSnapshotDao; - - @Inject - private UsageDao _usageDao; +public class VMSnapshotUsageParser extends UsageParser { @Inject - private UsageVMSnapshotDao _usageVMSnapshotDao; + private UsageVMSnapshotDao usageVMSnapshotDao; - @PostConstruct - void init() { - s_usageDao = _usageDao; - s_usageVMSnapshotDao = _usageVMSnapshotDao; + @Override + public String getParserName() { + return "VM Snapshot"; } - public static boolean parse(AccountVO account, Date startDate, Date endDate) { - if (LOGGER.isDebugEnabled()) { - LOGGER.debug("Parsing all VmSnapshot volume usage events for account: " + account.getId()); - } + @Override + protected boolean parse(AccountVO account, Date startDate, Date endDate) { if ((endDate == null) || endDate.after(new Date())) { endDate = new Date(); } - List usageUsageVMSnapshots = s_usageVMSnapshotDao.getUsageRecords(account.getId(), account.getDomainId(), startDate, endDate); + List usageUsageVMSnapshots = usageVMSnapshotDao.getUsageRecords(account.getId(), account.getDomainId(), startDate, endDate); if (usageUsageVMSnapshots.isEmpty()) { - LOGGER.debug("No VM snapshot usage events for this period"); + logger.debug("No VM snapshot usage events for this period"); return true; } @@ -84,7 +70,7 @@ public static boolean parse(AccountVO account, Date startDate, Date endDate) { unprocessedUsage.put(key, usageRec); continue; } - UsageVMSnapshotVO previousEvent = s_usageVMSnapshotDao.getPreviousUsageRecord(usageRec); + UsageVMSnapshotVO previousEvent = usageVMSnapshotDao.getPreviousUsageRecord(usageRec); if (previousEvent == null || previousEvent.getSize() == 0) { unprocessedUsage.put(key, usageRec); continue; @@ -101,11 +87,11 @@ public static boolean parse(AccountVO account, Date startDate, Date endDate) { createUsageRecord(UsageTypes.VM_SNAPSHOT, duration, previousCreated, createDate, account, volId, zoneId, previousEvent.getDiskOfferingId(), vmId, previousEvent.getSize(), usageRec.getVmSnapshotId()); previousEvent.setProcessed(new Date()); - s_usageVMSnapshotDao.update(previousEvent); + usageVMSnapshotDao.update(previousEvent); if (usageRec.getSize() == 0) { usageRec.setProcessed(new Date()); - s_usageVMSnapshotDao.update(usageRec); + usageVMSnapshotDao.update(usageRec); } else unprocessedUsage.put(key, usageRec); } @@ -124,19 +110,17 @@ public static boolean parse(AccountVO account, Date startDate, Date endDate) { return true; } - private static void createUsageRecord(int type, long runningTime, Date startDate, Date endDate, AccountVO account, long volId, long zoneId, Long doId, Long vmId, + private void createUsageRecord(int type, long runningTime, Date startDate, Date endDate, AccountVO account, long volId, long zoneId, Long doId, Long vmId, long size, Long vmSnapshotId) { // Our smallest increment is hourly for now - if (LOGGER.isDebugEnabled()) { - LOGGER.debug("Total running time " + runningTime + "ms"); - } + logger.debug("Total running time {} ms", runningTime); float usage = runningTime / 1000f / 60f / 60f; DecimalFormat dFormat = new DecimalFormat("#.######"); String usageDisplay = dFormat.format(usage); - LOGGER.debug("Creating usage record for VMSnapshot with id [{}], vol [{}], usage [{}], startDate [{}], and endDate [{}], for account [{}].", + logger.debug("Creating usage record for VMSnapshot with id [{}], vol [{}], usage [{}], startDate [{}], and endDate [{}], for account [{}].", vmSnapshotId, volId, usageDisplay, DateUtil.displayDateInTimezone(UsageManagerImpl.getUsageAggregationTimeZone(), startDate), DateUtil.displayDateInTimezone(UsageManagerImpl.getUsageAggregationTimeZone(), endDate), account.getId()); @@ -152,7 +136,7 @@ private static void createUsageRecord(int type, long runningTime, Date startDate UsageVO usageRecord = new UsageVO(zoneId, account.getId(), account.getDomainId(), usageDesc, usageDisplay + " Hrs", type, new Double(usage), vmId, null, doId, null, vmSnapshotId, size, startDate, endDate); - s_usageDao.persist(usageRecord); + usageDao.persist(usageRecord); } } diff --git a/usage/src/main/java/com/cloud/usage/parser/VPNUserUsageParser.java b/usage/src/main/java/com/cloud/usage/parser/VPNUserUsageParser.java index d5eac4fea20c..fb4cb0a75376 100644 --- a/usage/src/main/java/com/cloud/usage/parser/VPNUserUsageParser.java +++ b/usage/src/main/java/com/cloud/usage/parser/VPNUserUsageParser.java @@ -22,54 +22,40 @@ import java.util.List; import java.util.Map; -import javax.annotation.PostConstruct; import javax.inject.Inject; import com.cloud.usage.UsageManagerImpl; import com.cloud.utils.DateUtil; -import org.apache.logging.log4j.Logger; -import org.apache.logging.log4j.LogManager; import org.springframework.stereotype.Component; import org.apache.cloudstack.usage.UsageTypes; import com.cloud.usage.UsageVO; import com.cloud.usage.UsageVPNUserVO; -import com.cloud.usage.dao.UsageDao; import com.cloud.usage.dao.UsageVPNUserDao; import com.cloud.user.AccountVO; import com.cloud.utils.Pair; @Component -public class VPNUserUsageParser { - protected static Logger LOGGER = LogManager.getLogger(VPNUserUsageParser.class); - - private static UsageDao s_usageDao; - private static UsageVPNUserDao s_usageVPNUserDao; - - @Inject - private UsageDao _usageDao; +public class VPNUserUsageParser extends UsageParser { @Inject - private UsageVPNUserDao _usageVPNUserDao; + private UsageVPNUserDao usageVPNUserDao; - @PostConstruct - void init() { - s_usageDao = _usageDao; - s_usageVPNUserDao = _usageVPNUserDao; + @Override + public String getParserName() { + return "VPN User"; } - public static boolean parse(AccountVO account, Date startDate, Date endDate) { - if (LOGGER.isDebugEnabled()) { - LOGGER.debug("Parsing all VPN user usage events for account: " + account.getId()); - } + @Override + protected boolean parse(AccountVO account, Date startDate, Date endDate) { if ((endDate == null) || endDate.after(new Date())) { endDate = new Date(); } - List usageVUs = s_usageVPNUserDao.getUsageRecords(account.getId(), account.getDomainId(), startDate, endDate, false, 0); + List usageVUs = usageVPNUserDao.getUsageRecords(account.getId(), account.getDomainId(), startDate, endDate, false, 0); if (usageVUs.isEmpty()) { - LOGGER.debug("No VPN user usage events for this period"); + logger.debug("No VPN user usage events for this period"); return true; } @@ -121,7 +107,7 @@ public static boolean parse(AccountVO account, Date startDate, Date endDate) { return true; } - private static void updateVUUsageData(Map> usageDataMap, String key, long userId, long duration) { + private void updateVUUsageData(Map> usageDataMap, String key, long userId, long duration) { Pair vuUsageInfo = usageDataMap.get(key); if (vuUsageInfo == null) { vuUsageInfo = new Pair(new Long(userId), new Long(duration)); @@ -133,18 +119,16 @@ private static void updateVUUsageData(Map> usageDataMap usageDataMap.put(key, vuUsageInfo); } - private static void createUsageRecord(int type, long runningTime, Date startDate, Date endDate, AccountVO account, long userId, String userName, long zoneId) { + private void createUsageRecord(int type, long runningTime, Date startDate, Date endDate, AccountVO account, long userId, String userName, long zoneId) { // Our smallest increment is hourly for now - if (LOGGER.isDebugEnabled()) { - LOGGER.debug("Total running time " + runningTime + "ms"); - } + logger.debug("Total running time {} ms", runningTime); float usage = runningTime / 1000f / 60f / 60f; DecimalFormat dFormat = new DecimalFormat("#.######"); String usageDisplay = dFormat.format(usage); - LOGGER.debug("Creating usage record for VPN user [{}], usage [{}], startDate [{}], and endDate [{}], for account [{}].", + logger.debug("Creating usage record for VPN user [{}], usage [{}], startDate [{}], and endDate [{}], for account [{}].", userId, usageDisplay, DateUtil.displayDateInTimezone(UsageManagerImpl.getUsageAggregationTimeZone(), startDate), DateUtil.displayDateInTimezone(UsageManagerImpl.getUsageAggregationTimeZone(), endDate), account.getId()); @@ -154,7 +138,7 @@ private static void createUsageRecord(int type, long runningTime, Date startDate UsageVO usageRecord = new UsageVO(zoneId, account.getId(), account.getDomainId(), usageDesc, usageDisplay + " Hrs", type, new Double(usage), null, null, null, null, userId, null, startDate, endDate); - s_usageDao.persist(usageRecord); + usageDao.persist(usageRecord); } private static class VUInfo { diff --git a/usage/src/main/java/com/cloud/usage/parser/VmDiskUsageParser.java b/usage/src/main/java/com/cloud/usage/parser/VmDiskUsageParser.java index a5b537b8ffdd..a417edbf14d8 100644 --- a/usage/src/main/java/com/cloud/usage/parser/VmDiskUsageParser.java +++ b/usage/src/main/java/com/cloud/usage/parser/VmDiskUsageParser.java @@ -22,20 +22,16 @@ import java.util.List; import java.util.Map; -import javax.annotation.PostConstruct; import javax.inject.Inject; import com.cloud.usage.UsageManagerImpl; import com.cloud.utils.DateUtil; -import org.apache.logging.log4j.Logger; -import org.apache.logging.log4j.LogManager; import org.springframework.stereotype.Component; import org.apache.cloudstack.usage.UsageTypes; import com.cloud.usage.UsageVO; import com.cloud.usage.UsageVmDiskVO; -import com.cloud.usage.dao.UsageDao; import com.cloud.usage.dao.UsageVmDiskDao; import com.cloud.user.AccountVO; import com.cloud.utils.db.SearchCriteria; @@ -43,38 +39,27 @@ import static com.cloud.utils.NumbersUtil.toHumanReadableSize; @Component -public class VmDiskUsageParser { - protected static Logger LOGGER = LogManager.getLogger(VmDiskUsageParser.class); - - private static UsageDao s_usageDao; - private static UsageVmDiskDao s_usageVmDiskDao; - - @Inject - private UsageDao _usageDao; +public class VmDiskUsageParser extends UsageParser { @Inject - private UsageVmDiskDao _usageVmDiskDao; + private UsageVmDiskDao usageVmDiskDao; - @PostConstruct - void init() { - s_usageDao = _usageDao; - s_usageVmDiskDao = _usageVmDiskDao; + @Override + public String getParserName() { + return "VM Disk"; } - public static boolean parse(AccountVO account, Date startDate, Date endDate) { - if (LOGGER.isDebugEnabled()) { - LOGGER.debug("Parsing all Vm Disk usage events for account: " + account.getId()); - } - + @Override + protected boolean parse(AccountVO account, Date startDate, Date endDate) { if ((endDate == null) || endDate.after(new Date())) { endDate = new Date(); } // - query usage_disk table for all entries for userId with // event_date in the given range - SearchCriteria sc = s_usageVmDiskDao.createSearchCriteria(); + SearchCriteria sc = usageVmDiskDao.createSearchCriteria(); sc.addAnd("accountId", SearchCriteria.Op.EQ, account.getId()); sc.addAnd("eventTimeMillis", SearchCriteria.Op.BETWEEN, startDate.getTime(), endDate.getTime()); - List usageVmDiskVOs = s_usageVmDiskDao.search(sc, null); + List usageVmDiskVOs = usageVmDiskDao.search(sc, null); Map vmDiskUsageByZone = new HashMap(); @@ -110,7 +95,7 @@ public static boolean parse(AccountVO account, Date startDate, Date endDate) { long bytesWrite = vmDiskInfo.getBytesWrite(); if ((ioRead > 0L) || (ioWrite > 0L) || (bytesRead > 0L) || (bytesWrite > 0L)) { - LOGGER.debug("Creating vm disk usage record, io read [{}], io write [{}], bytes read [{}], bytes write [{}], startDate [{}], and endDate [{}], " + + logger.debug("Creating vm disk usage record, io read [{}], io write [{}], bytes read [{}], bytes write [{}], startDate [{}], and endDate [{}], " + "for account [{}] in availability zone [{}].", toHumanReadableSize(ioRead), toHumanReadableSize(ioWrite), toHumanReadableSize(bytesRead), toHumanReadableSize(bytesWrite), DateUtil.displayDateInTimezone(UsageManagerImpl.getUsageAggregationTimeZone(), startDate), DateUtil.displayDateInTimezone(UsageManagerImpl.getUsageAggregationTimeZone(), endDate), account.getId(), vmDiskInfo.getZoneId()); @@ -162,13 +147,11 @@ public static boolean parse(AccountVO account, Date startDate, Date endDate) { } else { // Don't charge anything if there were zero bytes processed - if (LOGGER.isDebugEnabled()) { - LOGGER.debug("No vm disk usage record (0 bytes used) generated for account: " + account.getId()); - } + logger.debug("No vm disk usage record (0 bytes used) generated for account: [{}]", account.getId()); } } - s_usageDao.saveUsageRecords(usageRecords); + usageDao.saveUsageRecords(usageRecords); return true; } diff --git a/usage/src/main/java/com/cloud/usage/parser/VolumeUsageParser.java b/usage/src/main/java/com/cloud/usage/parser/VolumeUsageParser.java index a5b6d77e9ab1..e834b713d420 100644 --- a/usage/src/main/java/com/cloud/usage/parser/VolumeUsageParser.java +++ b/usage/src/main/java/com/cloud/usage/parser/VolumeUsageParser.java @@ -22,46 +22,32 @@ import java.util.List; import java.util.Map; -import javax.annotation.PostConstruct; import javax.inject.Inject; import com.cloud.usage.UsageManagerImpl; import com.cloud.utils.DateUtil; -import org.apache.logging.log4j.Logger; -import org.apache.logging.log4j.LogManager; import org.springframework.stereotype.Component; import org.apache.cloudstack.usage.UsageTypes; import com.cloud.usage.UsageVO; import com.cloud.usage.UsageVolumeVO; -import com.cloud.usage.dao.UsageDao; import com.cloud.usage.dao.UsageVolumeDao; import com.cloud.user.AccountVO; import com.cloud.utils.Pair; @Component -public class VolumeUsageParser { - protected static Logger LOGGER = LogManager.getLogger(VolumeUsageParser.class); - - private static UsageDao s_usageDao; - private static UsageVolumeDao s_usageVolumeDao; - - @Inject - private UsageDao _usageDao; +public class VolumeUsageParser extends UsageParser { @Inject - private UsageVolumeDao _usageVolumeDao; + private UsageVolumeDao usageVolumeDao; - @PostConstruct - void init() { - s_usageDao = _usageDao; - s_usageVolumeDao = _usageVolumeDao; + @Override + public String getParserName() { + return "Volume"; } - public static boolean parse(AccountVO account, Date startDate, Date endDate) { - if (LOGGER.isDebugEnabled()) { - LOGGER.debug("Parsing all Volume usage events for account: " + account.getId()); - } + @Override + protected boolean parse(AccountVO account, Date startDate, Date endDate) { if ((endDate == null) || endDate.after(new Date())) { endDate = new Date(); } @@ -71,10 +57,10 @@ public static boolean parse(AccountVO account, Date startDate, Date endDate) { // - look for an entry for accountId with end date in the given range // - look for an entry for accountId with end date null (currently running vm or owned IP) // - look for an entry for accountId with start date before given range *and* end date after given range - List usageUsageVols = s_usageVolumeDao.getUsageRecords(account.getId(), account.getDomainId(), startDate, endDate, false, 0); + List usageUsageVols = usageVolumeDao.getUsageRecords(account.getId(), account.getDomainId(), startDate, endDate, false, 0); if (usageUsageVols.isEmpty()) { - LOGGER.debug("No volume usage events for this period"); + logger.debug("No volume usage events for this period"); return true; } @@ -131,7 +117,7 @@ public static boolean parse(AccountVO account, Date startDate, Date endDate) { return true; } - private static void updateVolUsageData(Map> usageDataMap, String key, long volId, long duration) { + private void updateVolUsageData(Map> usageDataMap, String key, long volId, long duration) { Pair volUsageInfo = usageDataMap.get(key); if (volUsageInfo == null) { volUsageInfo = new Pair(new Long(volId), new Long(duration)); @@ -143,19 +129,17 @@ private static void updateVolUsageData(Map> usageDataMa usageDataMap.put(key, volUsageInfo); } - private static void createUsageRecord(int type, long runningTime, Date startDate, Date endDate, AccountVO account, long volId, long zoneId, Long doId, + private void createUsageRecord(int type, long runningTime, Date startDate, Date endDate, AccountVO account, long volId, long zoneId, Long doId, Long templateId, long size) { // Our smallest increment is hourly for now - if (LOGGER.isDebugEnabled()) { - LOGGER.debug("Total running time " + runningTime + "ms"); - } + logger.debug("Total running time {} ms", runningTime); float usage = runningTime / 1000f / 60f / 60f; DecimalFormat dFormat = new DecimalFormat("#.######"); String usageDisplay = dFormat.format(usage); - LOGGER.debug("Creating Volume usage record for vol [{}], usage [{}], startDate [{}], and endDate [{}], for account [{}].", + logger.debug("Creating Volume usage record for vol [{}], usage [{}], startDate [{}], and endDate [{}], for account [{}].", volId, usageDisplay, DateUtil.displayDateInTimezone(UsageManagerImpl.getUsageAggregationTimeZone(), startDate), DateUtil.displayDateInTimezone(UsageManagerImpl.getUsageAggregationTimeZone(), endDate), account.getId()); @@ -170,7 +154,7 @@ private static void createUsageRecord(int type, long runningTime, Date startDate UsageVO usageRecord = new UsageVO(zoneId, account.getId(), account.getDomainId(), usageDesc, usageDisplay + " Hrs", type, new Double(usage), null, null, doId, templateId, volId, size, startDate, endDate); - s_usageDao.persist(usageRecord); + usageDao.persist(usageRecord); } private static class VolInfo { diff --git a/usage/src/main/java/com/cloud/usage/parser/VpcUsageParser.java b/usage/src/main/java/com/cloud/usage/parser/VpcUsageParser.java index 794e066c8974..90fd008570ed 100644 --- a/usage/src/main/java/com/cloud/usage/parser/VpcUsageParser.java +++ b/usage/src/main/java/com/cloud/usage/parser/VpcUsageParser.java @@ -17,15 +17,11 @@ package com.cloud.usage.parser; import com.cloud.usage.UsageVpcVO; -import com.cloud.usage.dao.UsageDao; import com.cloud.usage.UsageVO; import com.cloud.usage.dao.UsageVpcDao; import com.cloud.user.AccountVO; -import javax.annotation.PostConstruct; import javax.inject.Inject; import org.apache.cloudstack.usage.UsageTypes; -import org.apache.logging.log4j.Logger; -import org.apache.logging.log4j.LogManager; import org.springframework.stereotype.Component; import java.text.DecimalFormat; @@ -33,31 +29,24 @@ import java.util.List; @Component -public class VpcUsageParser { - private static final Logger LOGGER = LogManager.getLogger(VpcUsageParser.class.getName()); - +public class VpcUsageParser extends UsageParser { @Inject private UsageVpcDao vpcDao; - @Inject - private UsageDao usageDao; - private static UsageDao s_usageDao; - private static UsageVpcDao s_usageVpcDao; - @PostConstruct - void init() { - s_usageDao = usageDao; - s_usageVpcDao = vpcDao; + @Override + public String getParserName() { + return "VPC"; } - public static boolean parse(AccountVO account, Date startDate, Date endDate) { - LOGGER.debug("Parsing all VPC usage events for account {}", account); + @Override + protected boolean parse(AccountVO account, Date startDate, Date endDate) { if ((endDate == null) || endDate.after(new Date())) { endDate = new Date(); } - final List usageVPCs = s_usageVpcDao.getUsageRecords(account.getId(), startDate, endDate); + final List usageVPCs = vpcDao.getUsageRecords(account.getId(), startDate, endDate); if (usageVPCs == null || usageVPCs.isEmpty()) { - LOGGER.debug(String.format("Cannot find any VPC usage for account [%s] in period between [%s] and [%s].", account, startDate, endDate)); + logger.debug("Cannot find any VPC usage for account [{}] in period between [{}] and [{}].", account, startDate, endDate); return true; } @@ -79,15 +68,15 @@ public static boolean parse(AccountVO account, Date startDate, Date endDate) { String usageDisplay = dFormat.format(usage); long vpcId = usageVPC.getVpcId(); - LOGGER.debug("Creating VPC usage record with id [{}], usage [{}], startDate [{}], and endDate [{}], for account [{}].", - vpcId, usageDisplay, startDate, endDate, account); + logger.debug("Creating VPC usage record with id [{}], usage [{}], startDate [{}], and endDate [{}], for account [{}].", + vpcId, usageDisplay, startDate, endDate, account.getId()); String description = String.format("VPC usage for VPC ID: %d", usageVPC.getVpcId()); UsageVO usageRecord = new UsageVO(zoneId, account.getAccountId(), account.getDomainId(), description, usageDisplay + " Hrs", UsageTypes.VPC, (double) usage, null, null, null, null, usageVPC.getVpcId(), (long)0, null, startDate, endDate); - s_usageDao.persist(usageRecord); + usageDao.persist(usageRecord); } return true;