Skip to content

Usage parsers refactoring #11097

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 2 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
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 @@
@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 @@
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 @@
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);

Check warning on line 946 in usage/src/main/java/com/cloud/usage/UsageManagerImpl.java

View check run for this annotation

Codecov / codecov/patch

usage/src/main/java/com/cloud/usage/UsageManagerImpl.java#L946

Added line #L946 was not covered by tests

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";

Check warning on line 41 in usage/src/main/java/com/cloud/usage/parser/BackupUsageParser.java

View check run for this annotation

Codecov / codecov/patch

usage/src/main/java/com/cloud/usage/parser/BackupUsageParser.java#L40-L41

Added lines #L40 - L41 were not covered by tests
}

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) {

Check warning on line 45 in usage/src/main/java/com/cloud/usage/parser/BackupUsageParser.java

View check run for this annotation

Codecov / codecov/patch

usage/src/main/java/com/cloud/usage/parser/BackupUsageParser.java#L45

Added line #L45 was not covered by tests
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);

Check warning on line 50 in usage/src/main/java/com/cloud/usage/parser/BackupUsageParser.java

View check run for this annotation

Codecov / codecov/patch

usage/src/main/java/com/cloud/usage/parser/BackupUsageParser.java#L50

Added line #L50 was not covered by tests
if (usageBackups == null || usageBackups.isEmpty()) {
LOGGER.debug("No VM Backup usage for this period");
logger.debug("No VM Backup usage for this period");

Check warning on line 52 in usage/src/main/java/com/cloud/usage/parser/BackupUsageParser.java

View check run for this annotation

Codecov / codecov/patch

usage/src/main/java/com/cloud/usage/parser/BackupUsageParser.java#L52

Added line #L52 was not covered by tests
return true;
}

Expand Down Expand Up @@ -91,7 +77,7 @@
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);

Check warning on line 80 in usage/src/main/java/com/cloud/usage/parser/BackupUsageParser.java

View check run for this annotation

Codecov / codecov/patch

usage/src/main/java/com/cloud/usage/parser/BackupUsageParser.java#L80

Added line #L80 was not covered by tests
}

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";

Check warning on line 38 in usage/src/main/java/com/cloud/usage/parser/BucketUsageParser.java

View check run for this annotation

Codecov / codecov/patch

usage/src/main/java/com/cloud/usage/parser/BucketUsageParser.java#L37-L38

Added lines #L37 - L38 were not covered by tests
}

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) {

Check warning on line 42 in usage/src/main/java/com/cloud/usage/parser/BucketUsageParser.java

View check run for this annotation

Codecov / codecov/patch

usage/src/main/java/com/cloud/usage/parser/BucketUsageParser.java#L42

Added line #L42 was not covered by tests
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());

Check warning on line 47 in usage/src/main/java/com/cloud/usage/parser/BucketUsageParser.java

View check run for this annotation

Codecov / codecov/patch

usage/src/main/java/com/cloud/usage/parser/BucketUsageParser.java#L47

Added line #L47 was not covered by tests

List<UsageVO> usageRecords = new ArrayList<>();
for (BucketStatisticsVO bucketStatistics : BucketStatisticsVOs) {
Expand All @@ -72,7 +57,7 @@
}
}

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

Check warning on line 60 in usage/src/main/java/com/cloud/usage/parser/BucketUsageParser.java

View check run for this annotation

Codecov / codecov/patch

usage/src/main/java/com/cloud/usage/parser/BucketUsageParser.java#L60

Added line #L60 was not covered by tests

return true;
}
Expand Down
Loading
Loading