<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor
  license agreements. See the NOTICE file distributed with this work for additional
  information regarding copyright ownership. The ASF licenses this file to you under
  the Apache License, Version 2.0 (the "License"); you may not use this file except
  in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
  Unless required by applicable law or agreed to in writing, software distributed under
  the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
  OF ANY KIND, either express or implied. See the License for the specific language
  governing permissions and limitations under the License. -->
<!-- cloud_usage -->
<dataset>
<cloud_usage usage_type="1" account_id="1" domain_id="1" description="test" usage_display=" "  raw_usage="11" usage_id="8" id="8" start_date="2019-01-01 00:00:01" end_date="2019-01-01 00:00:01" zone_id="1"/>
<cloud_usage usage_type="1" account_id="1" domain_id="1" description="test" usage_display=" "  raw_usage="12" usage_id="7" id="7" start_date="2019-01-01 00:00:01" end_date="2019-01-01 00:00:01" zone_id="1"/>
<cloud_usage usage_type="1" account_id="1" domain_id="1" description="test" usage_display=" "  raw_usage="13" usage_id="6" id="6" start_date="2019-01-01 00:00:01" end_date="2019-01-01 00:00:01" zone_id="1"/>

<cloud_usage usage_type="6" account_id="1" domain_id="1" description="test" usage_display=" "  raw_usage="1" usage_id="16" id="15" start_date="2019-01-01 00:00:01" end_date="2019-01-01 00:00:01" zone_id="1"/>
<cloud_usage usage_type="6" account_id="1" domain_id="1" description="test" usage_display=" "  raw_usage="1" usage_id="17" id="16" start_date="2019-01-01 00:00:01" end_date="2019-01-01 00:00:01" zone_id="1"/>

<cloud_usage usage_type="6" account_id="1" domain_id="1" description="test" usage_display=" "  raw_usage="5" usage_id="14" id="9" start_date="2019-01-01 00:00:01" end_date="2019-01-01 00:00:01" zone_id="1" />
<cloud_usage usage_type="8" account_id="1" domain_id="1" description="test" usage_display=" "  raw_usage="6" usage_id="14" id="10" start_date="2019-01-01 00:00:01" end_date="2019-01-01 00:00:01" zone_id="1" />
<cloud_usage usage_type="7" account_id="1" domain_id="1" description="test" usage_display=" "  raw_usage="7" usage_id="16" id="11" start_date="2019-01-01 00:00:01" end_date="2019-01-01 00:00:01" zone_id="1" />

<cloud_usage usage_type="9" account_id="1" domain_id="1" description="test" usage_display=" "  raw_usage="8" usage_id="18" id="12" start_date="2019-01-01 00:00:01" end_date="2019-01-01 00:00:01" zone_id="1" />

<usage_volume id="3" zone_id="1" account_id="1" domain_id="1" created="2019-01-01 00:00:01"/>
<usage_volume id="3" zone_id="1" account_id="1" domain_id="1" created="2019-01-01 00:00:02"/>
<usage_volume id="3" zone_id="1" account_id="1" domain_id="1" created="2019-01-01 00:00:03"/>
<usage_volume id="3" zone_id="1" account_id="1" domain_id="1" created="2019-01-01 00:00:04"/>
<usage_volume id="3" zone_id="1" account_id="1" domain_id="1" created="2019-01-01 00:00:05"/>
<usage_volume id="3" zone_id="1" account_id="1" domain_id="1" created="2019-01-01 00:00:06"/>

<usage_vm_instance usage_type="1" vm_instance_id="1" zone_id="1" account_id="1" vm_name="test" service_offering_id="1" template_id="1" start_date="2019-01-01 00:00:01"/>
<usage_vm_instance usage_type="1" vm_instance_id="1" zone_id="1" account_id="1" vm_name="test" service_offering_id="1" template_id="1" start_date="2019-01-01 00:00:02"/>
<usage_vm_instance usage_type="1" vm_instance_id="2" zone_id="1" account_id="1" vm_name="test" service_offering_id="1" template_id="1" start_date="2019-01-01 00:00:03"/>
<usage_vm_instance usage_type="1" vm_instance_id="2" zone_id="1" account_id="1" vm_name="test" service_offering_id="1" template_id="1" start_date="2019-01-01 00:00:04"/>
<usage_vm_instance usage_type="1" vm_instance_id="3" zone_id="1" account_id="1" vm_name="test" service_offering_id="1" template_id="1" start_date="2019-01-01 00:00:05"/>
<usage_vm_instance usage_type="1" vm_instance_id="3" zone_id="1" account_id="1" vm_name="test" service_offering_id="1" template_id="1" start_date="2019-01-01 00:00:06"/>
<usage_vm_instance usage_type="1" vm_instance_id="3" zone_id="1" account_id="1" vm_name="test" service_offering_id="1" template_id="1" start_date="2019-01-01 00:00:07"/>
<usage_vm_instance usage_type="1" vm_instance_id="3" zone_id="1" account_id="1" vm_name="test" service_offering_id="1" template_id="1" start_date="2019-01-01 00:00:08"/>

<usage_vm_instance usage_type="2" vm_instance_id="1" zone_id="1" account_id="1" vm_name="test" service_offering_id="1" template_id="1" start_date="2019-01-01 00:00:08"/>
<usage_vm_instance usage_type="2" vm_instance_id="1" zone_id="1" account_id="1" vm_name="test" service_offering_id="1" template_id="1" start_date="2019-01-01 00:00:10"/>
<usage_vm_instance usage_type="2" vm_instance_id="2" zone_id="1" account_id="1" vm_name="test" service_offering_id="1" template_id="1" start_date="2019-01-01 00:00:11"/>
<usage_vm_instance usage_type="2" vm_instance_id="2" zone_id="1" account_id="1" vm_name="test" service_offering_id="1" template_id="1" start_date="2019-01-01 00:00:21"/>
</dataset>
