Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
130 changes: 8 additions & 122 deletions usage/src/main/java/com/cloud/usage/UsageManagerImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -180,6 +164,9 @@ public class UsageManagerImpl extends ManagerBase implements UsageManager, Runna
@Inject
private UsageVpcDao usageVpcDao;

@Inject
private List<UsageParser> usageParsers;

private String _version = null;
private final Calendar _jobExecTime = Calendar.getInstance();
private int _aggregationDuration = 0;
Expand All @@ -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() {
Expand Down Expand Up @@ -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;
}

Expand Down
32 changes: 9 additions & 23 deletions usage/src/main/java/com/cloud/usage/parser/BackupUsageParser.java
Original file line number Diff line number Diff line change
Expand Up @@ -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<UsageBackupVO> usageBackups = s_usageBackupDao.getUsageRecords(account.getId(), startDate, endDate);
final List<UsageBackupVO> 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;
}

Expand Down Expand Up @@ -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;
Expand Down
33 changes: 9 additions & 24 deletions usage/src/main/java/com/cloud/usage/parser/BucketUsageParser.java
Original file line number Diff line number Diff line change
Expand Up @@ -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<BucketStatisticsVO> BucketStatisticsVOs = s_bucketStatisticsDao.listBy(account.getId());
List<BucketStatisticsVO> BucketStatisticsVOs = bucketStatisticsDao.listBy(account.getId());

List<UsageVO> usageRecords = new ArrayList<>();
for (BucketStatisticsVO bucketStatistics : BucketStatisticsVOs) {
Expand All @@ -72,7 +57,7 @@ public static boolean parse(AccountVO account, Date startDate, Date endDate) {
}
}

s_usageDao.saveUsageRecords(usageRecords);
usageDao.saveUsageRecords(usageRecords);

return true;
}
Expand Down
Loading
Loading