Github user wido commented on a diff in the pull request:

    https://github.com/apache/cloudstack/pull/926#discussion_r41961830
  
    --- Diff: server/src/com/cloud/server/StatsCollector.java ---
    @@ -700,6 +734,121 @@ public void 
doInTransactionWithoutResult(TransactionStatus status) {
             }
         }
     
    +    class VmNetworkStatsTask extends ManagedContextRunnable {
    +        @Override
    +        protected void runInContext() {
    +            //Check for ownership
    +            //msHost in UP state with min id should run the job
    +            ManagementServerHostVO msHost = 
_msHostDao.findOneInUpState(new Filter(ManagementServerHostVO.class, "id", 
true, 0L, 1L));
    +            if(msHost == null || (msHost.getMsid() != mgmtSrvrId)){
    +                s_logger.debug("Skipping collect vm network stats from 
hosts");
    +                return;
    +            }
    +            // collect the vm network statistics(total) from hypervisor
    +            try {
    +                Transaction.execute(new TransactionCallbackNoReturn() {
    +                    @Override
    +                    public void 
doInTransactionWithoutResult(TransactionStatus status) {
    +                        s_logger.debug("VmNetworkStatsTask is running...");
    +
    +                        SearchCriteria<HostVO> sc = 
_hostDao.createSearchCriteria();
    +                        sc.addAnd("status", SearchCriteria.Op.EQ, 
Status.Up.toString());
    +                        sc.addAnd("resourceState", SearchCriteria.Op.NIN, 
ResourceState.Maintenance, ResourceState.PrepareForMaintenance, 
ResourceState.ErrorInMaintenance);
    +                        sc.addAnd("type", SearchCriteria.Op.EQ, 
Host.Type.Routing.toString());
    +                        List<HostVO> hosts = _hostDao.search(sc, null);
    +
    +                        for (HostVO host : hosts)
    +                        {
    +                            List<UserVmVO> vms = 
_userVmDao.listRunningByHostId(host.getId());
    +                            List<Long> vmIds = new ArrayList<Long>();
    +
    +                            for (UserVmVO vm : vms) {
    +                                if (vm.getType() == 
VirtualMachine.Type.User) // user vm
    +                                    vmIds.add(vm.getId());
    +                            }
    +
    +                            HashMap<Long, List<VmNetworkStatsEntry>> 
vmNetworkStatsById = _userVmMgr.getVmNetworkStatistics(host.getId(), 
host.getName(), vmIds);
    +                            if (vmNetworkStatsById == null)
    +                                continue;
    +
    +                            Set<Long> vmIdSet = 
vmNetworkStatsById.keySet();
    +                            for(Long vmId : vmIdSet)
    +                            {
    +                                List<VmNetworkStatsEntry> vmNetworkStats = 
vmNetworkStatsById.get(vmId);
    +                                if (vmNetworkStats == null)
    +                                    continue;
    +                                UserVmVO userVm = 
_userVmDao.findById(vmId);
    +                                for (VmNetworkStatsEntry 
vmNetworkStat:vmNetworkStats) {
    +                                    SearchCriteria<NicVO> sc_nic = 
_nicDao.createSearchCriteria();
    +                                    sc_nic.addAnd("macAddress", 
SearchCriteria.Op.EQ, vmNetworkStat.getMacAddress());
    +                                    NicVO nic = _nicDao.search(sc_nic, 
null).get(0);
    +                                    List<VlanVO> vlan = 
_vlanDao.listVlansByNetworkId(nic.getNetworkId());
    +                                    if (vlan == null || vlan.size() == 0 
|| vlan.get(0).getVlanType() != VlanType.DirectAttached)
    +                                        continue; // only get network 
statistics for DirectAttached network (shared networks in Basic zone and 
Advanced zone with/without SG)
    +                                    UserStatisticsVO 
previousvmNetworkStats = _userStatsDao.findBy(userVm.getAccountId(), 
userVm.getDataCenterId(), nic.getNetworkId(), nic.getIPv4Address(), vmId, 
"UserVm");
    +                                    if (previousvmNetworkStats == null) {
    +                                        previousvmNetworkStats = new 
UserStatisticsVO(userVm.getAccountId(), 
userVm.getDataCenterId(),nic.getIPv4Address(), vmId, "UserVm", 
nic.getNetworkId());
    +                                        
_userStatsDao.persist(previousvmNetworkStats);
    +                                    }
    +                                    UserStatisticsVO vmNetworkStat_lock = 
_userStatsDao.lock(userVm.getAccountId(), userVm.getDataCenterId(), 
nic.getNetworkId(), nic.getIPv4Address(), vmId, "UserVm");
    +
    +                                    if ((vmNetworkStat.getBytesSent() == 
0) && (vmNetworkStat.getBytesReceived() == 0)) {
    +                                        s_logger.debug("bytes sent and 
received are all 0. Not updating user_statistics");
    --- End diff --
    
    Shouldn't we print the vmId here as well? Now you don't know which VM we 
are talking about


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at infrastruct...@apache.org or file a JIRA ticket
with INFRA.
---

Reply via email to