Skip to content

Commit 5118e9e

Browse files
author
Mice Xia
committed
1) fix CLOUDSTACK-2129 and CLOUDSTACK-2128
2) include nicId in network.offerings.assign/remove event 3) use publishUsageEvent instead of saveUsageEvent to track usageEvent
1 parent 9ae29bb commit 5118e9e

8 files changed

Lines changed: 59 additions & 19 deletions

File tree

server/src/com/cloud/network/NetworkServiceImpl.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1988,8 +1988,11 @@ public Network updateGuestNetwork(long networkId, String name, String displayTex
19881988
continue;
19891989
}
19901990
long isDefault = (nic.isDefaultNic()) ? 1 : 0;
1991-
UsageEventUtils.saveUsageEvent(EventTypes.EVENT_NETWORK_OFFERING_REMOVE, vm.getAccountId(), vm.getDataCenterId(), vm.getId(), null, oldNetworkOfferingId, null, 0L);
1992-
UsageEventUtils.saveUsageEvent(EventTypes.EVENT_NETWORK_OFFERING_ASSIGN, vm.getAccountId(), vm.getDataCenterId(), vm.getId(), vm.getHostName(), networkOfferingId, null, isDefault);
1991+
String nicIdString = Long.toString(nic.getId());
1992+
UsageEventUtils.publishUsageEvent(EventTypes.EVENT_NETWORK_OFFERING_REMOVE, vm.getAccountId(), vm.getDataCenterId(),
1993+
vm.getId(), nicIdString, oldNetworkOfferingId, null, isDefault, VirtualMachine.class.getName(), vm.getUuid());
1994+
UsageEventUtils.publishUsageEvent(EventTypes.EVENT_NETWORK_OFFERING_ASSIGN, vm.getAccountId(), vm.getDataCenterId(),
1995+
vm.getId(), nicIdString, networkOfferingId, null, isDefault, VirtualMachine.class.getName(), vm.getUuid());
19931996
}
19941997
txn.commit();
19951998
} else {

server/src/com/cloud/usage/UsageNetworkOfferingVO.java

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,11 +53,14 @@ public class UsageNetworkOfferingVO {
5353
@Column(name="deleted")
5454
@Temporal(value=TemporalType.TIMESTAMP)
5555
private Date deleted = null;
56+
57+
@Column(name="nic_id")
58+
private Long nicId;
5659

5760
protected UsageNetworkOfferingVO() {
5861
}
5962

60-
public UsageNetworkOfferingVO(long zoneId, long accountId, long domainId, long vmInstanceId, long networkOfferingId, boolean isDefault, Date created, Date deleted) {
63+
public UsageNetworkOfferingVO(long zoneId, long accountId, long domainId, long vmInstanceId, long networkOfferingId, long nicId, boolean isDefault, Date created, Date deleted) {
6164
this.zoneId = zoneId;
6265
this.accountId = accountId;
6366
this.domainId = domainId;
@@ -66,6 +69,7 @@ public UsageNetworkOfferingVO(long zoneId, long accountId, long domainId, long v
6669
this.isDefault = isDefault;
6770
this.created = created;
6871
this.deleted = deleted;
72+
this.nicId = nicId;
6973
}
7074

7175
public long getZoneId() {
@@ -102,4 +106,12 @@ public Date getDeleted() {
102106
public void setDeleted(Date deleted) {
103107
this.deleted = deleted;
104108
}
109+
110+
public Long getNicId() {
111+
return nicId;
112+
}
113+
114+
public void setNicId(Long nicId) {
115+
this.nicId = nicId;
116+
}
105117
}

server/src/com/cloud/usage/dao/UsageNetworkOfferingDaoImpl.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,15 +39,15 @@ public class UsageNetworkOfferingDaoImpl extends GenericDaoBase<UsageNetworkOffe
3939
public static final Logger s_logger = Logger.getLogger(UsageNetworkOfferingDaoImpl.class.getName());
4040

4141
protected static final String UPDATE_DELETED = "UPDATE usage_network_offering SET deleted = ? WHERE account_id = ? AND vm_instance_id = ? AND network_offering_id = ? and deleted IS NULL";
42-
protected static final String GET_USAGE_RECORDS_BY_ACCOUNT = "SELECT zone_id, account_id, domain_id, vm_instance_id, network_offering_id, is_default, created, deleted " +
42+
protected static final String GET_USAGE_RECORDS_BY_ACCOUNT = "SELECT zone_id, account_id, domain_id, vm_instance_id, network_offering_id, nic_id, is_default, created, deleted " +
4343
"FROM usage_network_offering " +
4444
"WHERE account_id = ? AND ((deleted IS NULL) OR (created BETWEEN ? AND ?) OR " +
4545
" (deleted BETWEEN ? AND ?) OR ((created <= ?) AND (deleted >= ?)))";
46-
protected static final String GET_USAGE_RECORDS_BY_DOMAIN = "SELECT zone_id, account_id, domain_id, vm_instance_id, network_offering_id, is_default, created, deleted " +
46+
protected static final String GET_USAGE_RECORDS_BY_DOMAIN = "SELECT zone_id, account_id, domain_id, vm_instance_id, network_offering_id, nic_id, is_default, created, deleted " +
4747
"FROM usage_network_offering " +
4848
"WHERE domain_id = ? AND ((deleted IS NULL) OR (created BETWEEN ? AND ?) OR " +
4949
" (deleted BETWEEN ? AND ?) OR ((created <= ?) AND (deleted >= ?)))";
50-
protected static final String GET_ALL_USAGE_RECORDS = "SELECT zone_id, account_id, domain_id, vm_instance_id, network_offering_id, is_default, created, deleted " +
50+
protected static final String GET_ALL_USAGE_RECORDS = "SELECT zone_id, account_id, domain_id, vm_instance_id, network_offering_id, nic_id, is_default, created, deleted " +
5151
"FROM usage_network_offering " +
5252
"WHERE (deleted IS NULL) OR (created BETWEEN ? AND ?) OR " +
5353
" (deleted BETWEEN ? AND ?) OR ((created <= ?) AND (deleted >= ?))";
@@ -124,6 +124,7 @@ public List<UsageNetworkOfferingVO> getUsageRecords(Long accountId, Long domainI
124124
Long dId = Long.valueOf(rs.getLong(3));
125125
long vmId = Long.valueOf(rs.getLong(4));
126126
long noId = Long.valueOf(rs.getLong(5));
127+
long nicId = Long.valueOf(rs.getLong(6));
127128
boolean isDefault = Boolean.valueOf(rs.getBoolean(6));
128129
Date createdDate = null;
129130
Date deletedDate = null;
@@ -138,7 +139,7 @@ public List<UsageNetworkOfferingVO> getUsageRecords(Long accountId, Long domainI
138139
deletedDate = DateUtil.parseDateString(s_gmtTimeZone, deletedTS);
139140
}
140141

141-
usageRecords.add(new UsageNetworkOfferingVO(zoneId, acctId, dId, vmId, noId, isDefault, createdDate, deletedDate));
142+
usageRecords.add(new UsageNetworkOfferingVO(zoneId, acctId, dId, vmId, noId, nicId, isDefault, createdDate, deletedDate));
142143
}
143144
} catch (Exception e) {
144145
txn.rollback();

server/src/com/cloud/vm/UserVmManagerImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2777,7 +2777,7 @@ public boolean finalizeStart(VirtualMachineProfile<UserVmVO> profile,
27772777
NetworkVO network = _networkDao.findById(nic.getNetworkId());
27782778
long isDefault = (nic.isDefaultNic()) ? 1 : 0;
27792779
UsageEventUtils.publishUsageEvent(EventTypes.EVENT_NETWORK_OFFERING_ASSIGN, vm.getAccountId(),
2780-
vm.getDataCenterId(), vm.getId(), vm.getHostName(), network.getNetworkOfferingId(),
2780+
vm.getDataCenterId(), vm.getId(), Long.toString(nic.getId()), network.getNetworkOfferingId(),
27812781
null, isDefault, VirtualMachine.class.getName(), vm.getUuid());
27822782
if (network.getTrafficType() == TrafficType.Guest) {
27832783
originalIp = nic.getIp4Address();

server/src/com/cloud/vm/UserVmStateListener.java

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -72,21 +72,26 @@ public boolean postStateTransitionEvent(State oldState, Event event, State newSt
7272
pubishOnEventBus(event.name(), "postStateTransitionEvent", vo, oldState, newState);
7373

7474
if (VirtualMachine.State.isVmCreated(oldState, event, newState)) {
75-
UsageEventUtils.saveUsageEvent(EventTypes.EVENT_VM_CREATE, vo.getAccountId(), vo.getDataCenterId(), vo.getId(), vo.getHostName(), vo.getServiceOfferingId(),
76-
vo.getTemplateId(), vo.getHypervisorType().toString());
75+
UsageEventUtils.publishUsageEvent(EventTypes.EVENT_VM_CREATE, vo.getAccountId(), vo.getDataCenterId(), vo.getId(),
76+
vo.getHostName(), vo.getServiceOfferingId(),vo.getTemplateId(), vo.getHypervisorType().toString(),
77+
vo.getClass().getName(), vo.getUuid());
7778
} else if (VirtualMachine.State.isVmStarted(oldState, event, newState)) {
78-
UsageEventUtils.saveUsageEvent(EventTypes.EVENT_VM_START, vo.getAccountId(), vo.getDataCenterId(), vo.getId(), vo.getHostName(), vo.getServiceOfferingId(),
79-
vo.getTemplateId(), vo.getHypervisorType().toString());
79+
UsageEventUtils.publishUsageEvent(EventTypes.EVENT_VM_START, vo.getAccountId(), vo.getDataCenterId(), vo.getId(),
80+
vo.getHostName(), vo.getServiceOfferingId(),vo.getTemplateId(), vo.getHypervisorType().toString(),
81+
vo.getClass().getName(), vo.getUuid());
8082
} else if (VirtualMachine.State.isVmStopped(oldState, event, newState)) {
81-
UsageEventUtils.saveUsageEvent(EventTypes.EVENT_VM_STOP, vo.getAccountId(), vo.getDataCenterId(), vo.getId(), vo.getHostName());
83+
UsageEventUtils.publishUsageEvent(EventTypes.EVENT_VM_STOP, vo.getAccountId(), vo.getDataCenterId(), vo.getId(), vo.getHostName(),
84+
vo.getClass().getName(), vo.getUuid());
8285
List<NicVO> nics = _nicDao.listByVmId(vo.getId());
8386
for (NicVO nic : nics) {
8487
NetworkVO network = _networkDao.findById(nic.getNetworkId());
85-
UsageEventUtils.saveUsageEvent(EventTypes.EVENT_NETWORK_OFFERING_REMOVE, vo.getAccountId(), vo.getDataCenterId(), vo.getId(), null, network.getNetworkOfferingId(), null, 0L);
88+
UsageEventUtils.publishUsageEvent(EventTypes.EVENT_NETWORK_OFFERING_REMOVE, vo.getAccountId(), vo.getDataCenterId(),
89+
vo.getId(), Long.toString(nic.getId()),network.getNetworkOfferingId(), null, 0L, vo.getClass().getName(), vo.getUuid());
8690
}
8791
} else if (VirtualMachine.State.isVmDestroyed(oldState, event, newState)) {
88-
UsageEventUtils.saveUsageEvent(EventTypes.EVENT_VM_DESTROY, vo.getAccountId(), vo.getDataCenterId(), vo.getId(), vo.getHostName(), vo.getServiceOfferingId(),
89-
vo.getTemplateId(), vo.getHypervisorType().toString());
92+
UsageEventUtils.publishUsageEvent(EventTypes.EVENT_VM_DESTROY, vo.getAccountId(), vo.getDataCenterId(), vo.getId(),
93+
vo.getHostName(), vo.getServiceOfferingId(),vo.getTemplateId(), vo.getHypervisorType().toString(),
94+
vo.getClass().getName(), vo.getUuid());
9095
}
9196
return true;
9297
}

server/src/com/cloud/vm/VirtualMachineManagerImpl.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,8 @@
7878
import com.cloud.deploy.DeploymentPlanner.ExcludeList;
7979
import com.cloud.deploy.DeploymentPlanningManager;
8080
import com.cloud.domain.dao.DomainDao;
81+
import com.cloud.event.EventTypes;
82+
import com.cloud.event.UsageEventUtils;
8183
import com.cloud.exception.AffinityConflictException;
8284
import com.cloud.exception.AgentUnavailableException;
8385
import com.cloud.exception.ConcurrentOperationException;
@@ -2751,6 +2753,11 @@ public NicProfile addVmToNetwork(VirtualMachine vm, Network network, NicProfile
27512753
result = vmGuru.plugNic(network, nicTO, vmTO, context, dest);
27522754
if (result) {
27532755
s_logger.debug("Nic is plugged successfully for vm " + vm + " in network " + network + ". Vm is a part of network now");
2756+
long isDefault = (nic.isDefaultNic()) ? 1 : 0;
2757+
// insert nic's Id into DB as resource_name
2758+
UsageEventUtils.publishUsageEvent(EventTypes.EVENT_NETWORK_OFFERING_ASSIGN, vmVO.getAccountId(),
2759+
vmVO.getDataCenterId(), vmVO.getId(), Long.toString(nic.getId()), nic.getNetworkId(),
2760+
null, isDefault, VirtualMachine.class.getName(), vmVO.getUuid());
27542761
return nic;
27552762
} else {
27562763
s_logger.warn("Failed to plug nic to the vm " + vm + " in network " + network);
@@ -2814,6 +2821,10 @@ public boolean removeNicFromVm(VirtualMachine vm, NicVO nic) throws ConcurrentOp
28142821
boolean result = vmGuru.unplugNic(network, nicTO, vmTO, context, dest);
28152822
if (result) {
28162823
s_logger.debug("Nic is unplugged successfully for vm " + vm + " in network " + network );
2824+
long isDefault = (nic.isDefaultNic()) ? 1 : 0;
2825+
UsageEventUtils.publishUsageEvent(EventTypes.EVENT_NETWORK_OFFERING_REMOVE, vm.getAccountId(), vm.getDataCenterId(),
2826+
vm.getId(), Long.toString(nic.getId()), network.getNetworkOfferingId(), null,
2827+
isDefault, VirtualMachine.class.getName(), vm.getUuid());
28172828
} else {
28182829
s_logger.warn("Failed to unplug nic for the vm " + vm + " from network " + network);
28192830
return false;

setup/db/db/schema-410to420.sql

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -774,4 +774,6 @@ CREATE VIEW `cloud`.`account_view` AS
774774
left join
775775
`cloud`.`async_job` ON async_job.instance_id = account.id
776776
and async_job.instance_type = 'Account'
777-
and async_job.job_status = 0;
777+
and async_job.job_status = 0;
778+
779+
alter table `cloud_usage`.`usage_network_offering` add column nic_id bigint(20) unsigned NOT NULL;

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

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,6 @@
7878
import com.cloud.utils.db.GlobalLock;
7979
import com.cloud.utils.db.SearchCriteria;
8080
import com.cloud.utils.db.Transaction;
81-
import com.cloud.utils.exception.CloudRuntimeException;
8281

8382
@Component
8483
@Local(value={UsageManager.class})
@@ -1298,6 +1297,12 @@ private void createNetworkOfferingEvent(UsageEventVO event) {
12981297

12991298
long vmId = event.getResourceId();
13001299
long networkOfferingId = event.getOfferingId();
1300+
long nicId = 0;
1301+
try{
1302+
nicId = Long.parseLong(event.getResourceName());
1303+
}catch (Exception e) {
1304+
s_logger.warn("failed to get nic id from resource name, resource name is: " + event.getResourceName());
1305+
}
13011306

13021307
if (EventTypes.EVENT_NETWORK_OFFERING_CREATE.equals(event.getType()) || EventTypes.EVENT_NETWORK_OFFERING_ASSIGN.equals(event.getType())) {
13031308
if (s_logger.isDebugEnabled()) {
@@ -1306,12 +1311,13 @@ private void createNetworkOfferingEvent(UsageEventVO event) {
13061311
zoneId = event.getZoneId();
13071312
Account acct = m_accountDao.findByIdIncludingRemoved(event.getAccountId());
13081313
boolean isDefault = (event.getSize() == 1) ? true : false ;
1309-
UsageNetworkOfferingVO networkOffering = new UsageNetworkOfferingVO(zoneId, event.getAccountId(), acct.getDomainId(), vmId, networkOfferingId, isDefault, event.getCreateDate(), null);
1314+
UsageNetworkOfferingVO networkOffering = new UsageNetworkOfferingVO(zoneId, event.getAccountId(), acct.getDomainId(), vmId, networkOfferingId, nicId, isDefault, event.getCreateDate(), null);
13101315
m_usageNetworkOfferingDao.persist(networkOffering);
13111316
} else if (EventTypes.EVENT_NETWORK_OFFERING_DELETE.equals(event.getType()) || EventTypes.EVENT_NETWORK_OFFERING_REMOVE.equals(event.getType())) {
13121317
SearchCriteria<UsageNetworkOfferingVO> sc = m_usageNetworkOfferingDao.createSearchCriteria();
13131318
sc.addAnd("accountId", SearchCriteria.Op.EQ, event.getAccountId());
13141319
sc.addAnd("vmInstanceId", SearchCriteria.Op.EQ, vmId);
1320+
sc.addAnd("nicId", SearchCriteria.Op.EQ, nicId);
13151321
sc.addAnd("networkOfferingId", SearchCriteria.Op.EQ, networkOfferingId);
13161322
sc.addAnd("deleted", SearchCriteria.Op.NULL);
13171323
List<UsageNetworkOfferingVO> noVOs = m_usageNetworkOfferingDao.search(sc, null);

0 commit comments

Comments
 (0)