1616// under the License.
1717package com .cloud .usage .parser ;
1818
19+ import java .util .ArrayList ;
1920import java .util .Date ;
2021import java .util .HashMap ;
2122import java .util .List ;
@@ -93,6 +94,7 @@ public static boolean parse(AccountVO account, Date startDate, Date endDate) {
9394 vmDiskUsageByZone .put (key , new VmDiskInfo (zoneId , usageVmDisk .getVmId (), usageVmDisk .getVolumeId (), ioRead , ioWrite , bytesRead , bytesWrite ));
9495 }
9596
97+ List <UsageVO > usageRecords = new ArrayList <UsageVO >();
9698 for (String key : vmDiskUsageByZone .keySet ()) {
9799 VmDiskInfo vmDiskInfo = vmDiskUsageByZone .get (key );
98100 long ioRead = vmDiskInfo .getIORead ();
@@ -107,44 +109,45 @@ public static boolean parse(AccountVO account, Date startDate, Date endDate) {
107109 }
108110
109111 Long vmId = null ;
112+ Long volumeId = null ;
110113
111114 // Create the usage record for bytes read
112115 String usageDesc = "disk bytes read" ;
113- if ( vmDiskInfo .getVmId () != 0 ){
116+ if (( vmDiskInfo .getVmId () != 0 ) && ( vmDiskInfo . getVolumeId () != 0 ) ){
114117 vmId = vmDiskInfo .getVmId ();
115- usageDesc += " for Vm: " +vmDiskInfo .getVmId ()+" and Volume: " + vmDiskInfo .getVolumeId ();
118+ volumeId = vmDiskInfo .getVolumeId ();
119+ usageDesc += " for Vm: " + vmId + " and Volume: " + volumeId ;
116120 }
117121 UsageVO usageRecord = new UsageVO (vmDiskInfo .getZoneId (), account .getId (), account .getDomainId (), usageDesc , ioRead + " io read" ,
118- UsageTypes .VM_DISK_IO_READ , new Double (ioRead ), vmId , "VirtualMachine" , vmDiskInfo .getVolumeId (), startDate , endDate );
119- m_usageDao . persist (usageRecord );
122+ UsageTypes .VM_DISK_IO_READ , new Double (ioRead ), vmId , null , null , null , vmDiskInfo .getVolumeId (), startDate , endDate , "VirtualMachine" );
123+ usageRecords . add (usageRecord );
120124
121125 // Create the usage record for bytes write
122126 usageDesc = "disk bytes write" ;
123- if ( vmDiskInfo .getVmId () != 0 ){
124- usageDesc += " for Vm: " + vmDiskInfo . getVmId ()+ " and Volume: " + vmDiskInfo . getVolumeId ();
127+ if (( vmDiskInfo .getVmId () != 0 ) && ( vmDiskInfo . getVolumeId () != 0 ) ){
128+ usageDesc += " for Vm: " + vmId + " and Volume: " + volumeId ;
125129 }
126130 usageRecord = new UsageVO (vmDiskInfo .getZoneId (), account .getId (), account .getDomainId (), usageDesc , ioWrite + " io write" ,
127- UsageTypes .VM_DISK_BYTES_WRITE , new Double (ioWrite ), vmId , "VirtualMachine" , vmDiskInfo .getVolumeId (), startDate , endDate );
128- m_usageDao . persist (usageRecord );
131+ UsageTypes .VM_DISK_BYTES_WRITE , new Double (ioWrite ), vmId , null , null , null , vmDiskInfo .getVolumeId (), startDate , endDate , "VirtualMachine" );
132+ usageRecords . add (usageRecord );
129133
130134 // Create the usage record for bytes read
131135 usageDesc = "disk bytes read" ;
132- if (vmDiskInfo .getVmId () != 0 ){
133- vmId = vmDiskInfo .getVmId ();
134- usageDesc += " for Vm: " +vmDiskInfo .getVmId ()+" and Volume: " + vmDiskInfo .getVolumeId ();
136+ if ((vmDiskInfo .getVmId () != 0 ) && (vmDiskInfo .getVolumeId () != 0 )){
137+ usageDesc += " for Vm: " + vmId + " and Volume: " + volumeId ;
135138 }
136139 usageRecord = new UsageVO (vmDiskInfo .getZoneId (), account .getId (), account .getDomainId (), usageDesc , bytesRead + " bytes read" ,
137- UsageTypes .VM_DISK_BYTES_READ , new Double (bytesRead ), vmId , "VirtualMachine" , vmDiskInfo .getVolumeId (), startDate , endDate );
138- m_usageDao . persist (usageRecord );
140+ UsageTypes .VM_DISK_BYTES_READ , new Double (bytesRead ), vmId , null , null , null , vmDiskInfo .getVolumeId (), startDate , endDate , "VirtualMachine" );
141+ usageRecords . add (usageRecord );
139142
140143 // Create the usage record for bytes write
141144 usageDesc = "disk bytes write" ;
142- if ( vmDiskInfo .getVmId () != 0 ){
143- usageDesc += " for Vm: " + vmDiskInfo . getVmId ()+ " and Volume: " + vmDiskInfo . getVolumeId ();
145+ if (( vmDiskInfo .getVmId () != 0 ) && ( vmDiskInfo . getVolumeId () != 0 ) ){
146+ usageDesc += " for Vm: " + vmId + " and Volume: " + volumeId ;
144147 }
145148 usageRecord = new UsageVO (vmDiskInfo .getZoneId (), account .getId (), account .getDomainId (), usageDesc , bytesWrite + " bytes write" ,
146- UsageTypes .VM_DISK_BYTES_WRITE , new Double (bytesWrite ), vmId , "VirtualMachine" , vmDiskInfo .getVolumeId (), startDate , endDate );
147- m_usageDao . persist (usageRecord );
149+ UsageTypes .VM_DISK_BYTES_WRITE , new Double (bytesWrite ), vmId , null , null , null , vmDiskInfo .getVolumeId (), startDate , endDate , "VirtualMachine" );
150+ usageRecords . add (usageRecord );
148151
149152 } else {
150153 // Don't charge anything if there were zero bytes processed
@@ -154,6 +157,12 @@ public static boolean parse(AccountVO account, Date startDate, Date endDate) {
154157 }
155158 }
156159
160+ try {
161+ m_usageDao .saveUsageRecords (usageRecords );
162+ } catch (Exception ex ) {
163+ s_logger .error ("Exception in usage manager" , ex );
164+ }
165+
157166 return true ;
158167 }
159168
0 commit comments