<!-- 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="destroyed" 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>
