<!-- 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 -->
<dataset>
    <configuration name="usage.stats.job.aggregation.range" value="600" instance="test"/>

    <vm_instance type="User" id="8" account_id="1" domain_id="1" name="test" instance_name="test" state="destoyed" guest_os_id="1" service_offering_id="1" data_center_id="1" vnc_password="xyz" vm_type="User" created="2019-01-01 00:00:01" removed="2018-01-01 00:00:01" />

    <volumes id="16" account_id="1" domain_id="1" size="1" data_center_id="1" volume_type="root" disk_offering_id="1" removed="2018-01-01 00:00:01"/>
    <volumes id="17" account_id="1" domain_id="1" size="1" data_center_id="1" volume_type="root" disk_offering_id="1" removed="2019-01-01 00:00:01"/>

    <vm_template id="14" account_id="1" unique_name="test" name="test" public="1" featured="1" hvm="1" bits="64" guest_os_id="1" format="ova" created="2019-01-01 00:00:01"/>
    <vm_template id="15" account_id="1" unique_name="test" name="test" public="1" featured="1" hvm="1" bits="64" guest_os_id="1" format="ova" created="2019-01-01 00:00:01"/>
    <vm_template id="16" account_id="1" unique_name="test" name="test" public="1" featured="1" hvm="1" bits="64" guest_os_id="1" format="ova" created="2019-01-01 00:00:01"/>

    <template_zone_ref template_id="14" zone_id="1" created="2019-01-01 00:00:01" removed="2018-01-01 00:00:01" />
    <template_zone_ref template_id="15" zone_id="1" created="2019-01-01 00:00:01" removed="2019-01-01 00:00:01" />
    <template_zone_ref template_id="16" zone_id="1" created="2019-01-01 00:00:01" removed="2019-01-01 00:00:01" />

    <snapshots id="18" account_id="1" domain_id="1"  volume_id="1" disk_offering_id="1" name="test" snapshot_type="0" size="10" hypervisor_type="KVM" removed="2018-01-01 00:00:01" data_center_id="1"/>
</dataset>
