Skip to content

Commit 6187e61

Browse files
committed
Usage parsers refactoring
1 parent 7632814 commit 6187e61

19 files changed

+254
-616
lines changed

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

Lines changed: 8 additions & 122 deletions
Original file line numberDiff line numberDiff line change
@@ -34,10 +34,9 @@
3434

3535
import com.cloud.network.Network;
3636
import com.cloud.usage.dao.UsageNetworksDao;
37-
import com.cloud.usage.parser.NetworksUsageParser;
37+
import com.cloud.usage.parser.UsageParser;
3838
import com.cloud.network.vpc.Vpc;
3939
import com.cloud.usage.dao.UsageVpcDao;
40-
import com.cloud.usage.parser.VpcUsageParser;
4140
import javax.inject.Inject;
4241
import javax.naming.ConfigurationException;
4342
import javax.persistence.EntityExistsException;
@@ -75,21 +74,6 @@
7574
import com.cloud.usage.dao.UsageVPNUserDao;
7675
import com.cloud.usage.dao.UsageVmDiskDao;
7776
import com.cloud.usage.dao.UsageVolumeDao;
78-
import com.cloud.usage.parser.BackupUsageParser;
79-
import com.cloud.usage.parser.BucketUsageParser;
80-
import com.cloud.usage.parser.IPAddressUsageParser;
81-
import com.cloud.usage.parser.LoadBalancerUsageParser;
82-
import com.cloud.usage.parser.NetworkOfferingUsageParser;
83-
import com.cloud.usage.parser.NetworkUsageParser;
84-
import com.cloud.usage.parser.PortForwardingUsageParser;
85-
import com.cloud.usage.parser.SecurityGroupUsageParser;
86-
import com.cloud.usage.parser.StorageUsageParser;
87-
import com.cloud.usage.parser.VMInstanceUsageParser;
88-
import com.cloud.usage.parser.VMSnapshotOnPrimaryParser;
89-
import com.cloud.usage.parser.VMSnapshotUsageParser;
90-
import com.cloud.usage.parser.VPNUserUsageParser;
91-
import com.cloud.usage.parser.VmDiskUsageParser;
92-
import com.cloud.usage.parser.VolumeUsageParser;
9377
import com.cloud.user.Account;
9478
import com.cloud.user.AccountVO;
9579
import com.cloud.user.UserStatisticsVO;
@@ -180,6 +164,9 @@ public class UsageManagerImpl extends ManagerBase implements UsageManager, Runna
180164
@Inject
181165
private UsageVpcDao usageVpcDao;
182166

167+
@Inject
168+
private List<UsageParser> usageParsers;
169+
183170
private String _version = null;
184171
private final Calendar _jobExecTime = Calendar.getInstance();
185172
private int _aggregationDuration = 0;
@@ -198,6 +185,7 @@ public class UsageManagerImpl extends ManagerBase implements UsageManager, Runna
198185
private Future _heartbeat = null;
199186
private Future _sanity = null;
200187
private boolean usageSnapshotSelection = false;
188+
201189
private static TimeZone usageAggregationTimeZone = TimeZone.getTimeZone("GMT");
202190

203191
public UsageManagerImpl() {
@@ -954,114 +942,12 @@ public void parse(UsageJobVO job, long startDateMillis, long endDateMillis) {
954942
private boolean parseHelperTables(AccountVO account, Date currentStartDate, Date currentEndDate) {
955943
boolean parsed = false;
956944

957-
parsed = VMInstanceUsageParser.parse(account, currentStartDate, currentEndDate);
958-
if (logger.isDebugEnabled()) {
959-
if (!parsed) {
960-
logger.debug("vm usage instances successfully parsed? " + parsed + " (for account: " + account.getAccountName() + ", id: " + account.getId() + ")");
961-
}
962-
}
945+
for (UsageParser parser : usageParsers) {
946+
parsed = parser.doParsing(account, currentStartDate, currentEndDate);
963947

964-
parsed = NetworkUsageParser.parse(account, currentStartDate, currentEndDate);
965-
if (logger.isDebugEnabled()) {
966-
if (!parsed) {
967-
logger.debug("network usage successfully parsed? " + parsed + " (for account: " + account.getAccountName() + ", id: " + account.getId() + ")");
968-
}
948+
logger.debug("{} usage was {} parsed for [{}].", parser.getParserName(), parsed ? "successfully" : "not successfully", account);
969949
}
970950

971-
parsed = VmDiskUsageParser.parse(account, currentStartDate, currentEndDate);
972-
if (logger.isDebugEnabled()) {
973-
if (!parsed) {
974-
logger.debug("vm disk usage successfully parsed? " + parsed + " (for account: " + account.getAccountName() + ", id: " + account.getId() + ")");
975-
}
976-
}
977-
978-
parsed = VolumeUsageParser.parse(account, currentStartDate, currentEndDate);
979-
if (logger.isDebugEnabled()) {
980-
if (!parsed) {
981-
logger.debug("volume usage successfully parsed? " + parsed + " (for account: " + account.getAccountName() + ", id: " + account.getId() + ")");
982-
}
983-
}
984-
985-
parsed = StorageUsageParser.parse(account, currentStartDate, currentEndDate);
986-
if (logger.isDebugEnabled()) {
987-
if (!parsed) {
988-
logger.debug("storage usage successfully parsed? " + parsed + " (for account: " + account.getAccountName() + ", id: " + account.getId() + ")");
989-
}
990-
}
991-
992-
parsed = SecurityGroupUsageParser.parse(account, currentStartDate, currentEndDate);
993-
if (logger.isDebugEnabled()) {
994-
if (!parsed) {
995-
logger.debug("Security Group usage successfully parsed? " + parsed + " (for account: " + account.getAccountName() + ", id: " + account.getId() + ")");
996-
}
997-
}
998-
999-
parsed = LoadBalancerUsageParser.parse(account, currentStartDate, currentEndDate);
1000-
if (logger.isDebugEnabled()) {
1001-
if (!parsed) {
1002-
logger.debug("load balancer usage successfully parsed? " + parsed + " (for account: " + account.getAccountName() + ", id: " + account.getId() + ")");
1003-
}
1004-
}
1005-
1006-
parsed = PortForwardingUsageParser.parse(account, currentStartDate, currentEndDate);
1007-
if (logger.isDebugEnabled()) {
1008-
if (!parsed) {
1009-
logger.debug("port forwarding usage successfully parsed? " + parsed + " (for account: " + account.getAccountName() + ", id: " + account.getId() + ")");
1010-
}
1011-
}
1012-
1013-
parsed = NetworkOfferingUsageParser.parse(account, currentStartDate, currentEndDate);
1014-
if (logger.isDebugEnabled()) {
1015-
if (!parsed) {
1016-
logger.debug("network offering usage successfully parsed? " + parsed + " (for account: " + account.getAccountName() + ", id: " + account.getId() + ")");
1017-
}
1018-
}
1019-
1020-
parsed = IPAddressUsageParser.parse(account, currentStartDate, currentEndDate);
1021-
if (logger.isDebugEnabled()) {
1022-
if (!parsed) {
1023-
logger.debug("IPAddress usage successfully parsed? " + parsed + " (for account: " + account.getAccountName() + ", id: " + account.getId() + ")");
1024-
}
1025-
}
1026-
parsed = VPNUserUsageParser.parse(account, currentStartDate, currentEndDate);
1027-
if (logger.isDebugEnabled()) {
1028-
if (!parsed) {
1029-
logger.debug("VPN user usage successfully parsed? " + parsed + " (for account: " + account.getAccountName() + ", id: " + account.getId() + ")");
1030-
}
1031-
}
1032-
parsed = VMSnapshotUsageParser.parse(account, currentStartDate, currentEndDate);
1033-
if (logger.isDebugEnabled()) {
1034-
if (!parsed) {
1035-
logger.debug("VM Snapshot usage successfully parsed? " + parsed + " (for account: " + account.getAccountName() + ", id: " + account.getId() + ")");
1036-
}
1037-
}
1038-
parsed = VMSnapshotOnPrimaryParser.parse(account, currentStartDate, currentEndDate);
1039-
if (logger.isDebugEnabled()) {
1040-
if (!parsed) {
1041-
logger.debug("VM Snapshot on primary usage successfully parsed? " + parsed + " (for account: " + account.getAccountName() + ", id: " + account.getId() + ")");
1042-
}
1043-
}
1044-
parsed = BackupUsageParser.parse(account, currentStartDate, currentEndDate);
1045-
if (logger.isDebugEnabled()) {
1046-
if (!parsed) {
1047-
logger.debug("VM Backup usage successfully parsed? " + parsed + " (for account: " + account.getAccountName() + ", id: " + account.getId() + ")");
1048-
}
1049-
}
1050-
parsed = BucketUsageParser.parse(account, currentStartDate, currentEndDate);
1051-
if (logger.isDebugEnabled()) {
1052-
if (!parsed) {
1053-
logger.debug("Bucket usage successfully parsed? " + parsed + " (for account: " + account.getAccountName() + ", id: " + account.getId() + ")");
1054-
}
1055-
}
1056-
parsed = NetworksUsageParser.parse(account, currentStartDate, currentEndDate);
1057-
if (!parsed) {
1058-
logger.debug("Networks usage not parsed for account [{}}].", account);
1059-
}
1060-
1061-
parsed = VpcUsageParser.parse(account, currentStartDate, currentEndDate);
1062-
if (!parsed) {
1063-
logger.debug(String.format("VPC usage failed to parse for account [%s].", account));
1064-
}
1065951
return parsed;
1066952
}
1067953

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

Lines changed: 9 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -21,49 +21,35 @@
2121
import java.util.Date;
2222
import java.util.List;
2323

24-
import javax.annotation.PostConstruct;
2524
import javax.inject.Inject;
2625

2726
import org.apache.cloudstack.usage.UsageTypes;
28-
import org.apache.logging.log4j.Logger;
29-
import org.apache.logging.log4j.LogManager;
3027
import org.springframework.stereotype.Component;
3128

3229
import com.cloud.usage.UsageBackupVO;
3330
import com.cloud.usage.UsageVO;
34-
import com.cloud.usage.dao.UsageDao;
3531
import com.cloud.usage.dao.UsageBackupDao;
3632
import com.cloud.user.AccountVO;
3733

3834
@Component
39-
public class BackupUsageParser {
40-
protected static Logger LOGGER = LogManager.getLogger(BackupUsageParser.class);
41-
42-
private static UsageDao s_usageDao;
43-
private static UsageBackupDao s_usageBackupDao;
44-
45-
@Inject
46-
private UsageDao usageDao;
35+
public class BackupUsageParser extends UsageParser {
4736
@Inject
4837
private UsageBackupDao usageBackupDao;
4938

50-
@PostConstruct
51-
void init() {
52-
s_usageDao = usageDao;
53-
s_usageBackupDao = usageBackupDao;
39+
@Override
40+
public String getParserName() {
41+
return "VM Backup";
5442
}
5543

56-
public static boolean parse(AccountVO account, Date startDate, Date endDate) {
57-
if (LOGGER.isDebugEnabled()) {
58-
LOGGER.debug("Parsing all VM Backup usage events for account: " + account.getId());
59-
}
44+
@Override
45+
protected boolean parse(AccountVO account, Date startDate, Date endDate) {
6046
if ((endDate == null) || endDate.after(new Date())) {
6147
endDate = new Date();
6248
}
6349

64-
final List<UsageBackupVO> usageBackups = s_usageBackupDao.getUsageRecords(account.getId(), startDate, endDate);
50+
final List<UsageBackupVO> usageBackups = usageBackupDao.getUsageRecords(account.getId(), startDate, endDate);
6551
if (usageBackups == null || usageBackups.isEmpty()) {
66-
LOGGER.debug("No VM Backup usage for this period");
52+
logger.debug("No VM Backup usage for this period");
6753
return true;
6854
}
6955

@@ -91,7 +77,7 @@ public static boolean parse(AccountVO account, Date startDate, Date endDate) {
9177
new UsageVO(zoneId, account.getAccountId(), account.getDomainId(), description, usageDisplay + " Hrs",
9278
UsageTypes.BACKUP, new Double(usage), vmId, null, offeringId, null, vmId,
9379
usageBackup.getSize(), usageBackup.getProtectedSize(), startDate, endDate);
94-
s_usageDao.persist(usageRecord);
80+
usageDao.persist(usageRecord);
9581
}
9682

9783
return true;

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

Lines changed: 9 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -19,47 +19,32 @@
1919
import com.cloud.usage.BucketStatisticsVO;
2020
import com.cloud.usage.UsageVO;
2121
import com.cloud.usage.dao.BucketStatisticsDao;
22-
import com.cloud.usage.dao.UsageDao;
2322
import com.cloud.user.AccountVO;
2423
import org.apache.cloudstack.usage.UsageTypes;
25-
import org.apache.logging.log4j.LogManager;
26-
import org.apache.logging.log4j.Logger;
2724
import org.springframework.stereotype.Component;
2825

29-
import javax.annotation.PostConstruct;
3026
import javax.inject.Inject;
3127
import java.util.ArrayList;
3228
import java.util.Date;
3329
import java.util.List;
3430

3531
@Component
36-
public class BucketUsageParser {
37-
public static final Logger LOGGER = LogManager.getLogger(BucketUsageParser.class);
38-
39-
private static UsageDao s_usageDao;
40-
private static BucketStatisticsDao s_bucketStatisticsDao;
41-
42-
@Inject
43-
private UsageDao _usageDao;
32+
public class BucketUsageParser extends UsageParser {
4433
@Inject
45-
private BucketStatisticsDao _bucketStatisticsDao;
34+
private BucketStatisticsDao bucketStatisticsDao;
4635

47-
@PostConstruct
48-
void init() {
49-
s_usageDao = _usageDao;
50-
s_bucketStatisticsDao = _bucketStatisticsDao;
36+
@Override
37+
public String getParserName() {
38+
return "Bucket";
5139
}
5240

53-
public static boolean parse(AccountVO account, Date startDate, Date endDate) {
54-
if (LOGGER.isDebugEnabled()) {
55-
LOGGER.debug("Parsing all Bucket usage events for account {}", account);
56-
}
57-
41+
@Override
42+
protected boolean parse(AccountVO account, Date startDate, Date endDate) {
5843
if ((endDate == null) || endDate.after(new Date())) {
5944
endDate = new Date();
6045
}
6146

62-
List<BucketStatisticsVO> BucketStatisticsVOs = s_bucketStatisticsDao.listBy(account.getId());
47+
List<BucketStatisticsVO> BucketStatisticsVOs = bucketStatisticsDao.listBy(account.getId());
6348

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

75-
s_usageDao.saveUsageRecords(usageRecords);
60+
usageDao.saveUsageRecords(usageRecords);
7661

7762
return true;
7863
}

0 commit comments

Comments
 (0)