<?xml version="1.0"?>
<!--
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.
-->
<!--
  usage-components.xml is the configuration file for the VM Ops
  usage servers.

  Here are some places to look for information.
    - To find out the general functionality that each Manager 
      or Adapter provide, look at the javadoc for the interface
      that it implements.  The interface is usually the
      "key" attribute in the declaration.
    - To find specific implementation of each Manager or
      Adapter, look at the javadoc for the actual class.  The 
      class can be found in the <class> element.
    - To find out the configuration parameters for each Manager 
      or Adapter, look at the javadoc for the actual implementation
      class.  It should be documented in the description of the 
      class.
    - To know more about the components.xml in general, look for
      the javadoc for ComponentLocator.java.

  If you found that the Manager or Adapter are not properly 
  documented, please contact the author.
-->
<components.xml>
    <usage-server>
        <system-integrity-checker class="com.cloud.utils.crypt.EncryptionSecretKeyChecker">
            <checker name="EncryptionSecretKeyChecker" class="com.cloud.utils.crypt.EncryptionSecretKeyChecker"/>
        </system-integrity-checker>    
        <dao name="VM Instance" class="com.cloud.vm.dao.VMInstanceDaoImpl"/>
        <dao name="User VM" class="com.cloud.vm.dao.UserVmDaoImpl"/>
        <dao name="ServiceOffering" class="com.cloud.service.dao.ServiceOfferingDaoImpl">
            <param name="cache.size">50</param>
            <param name="cache.time.to.live">-1</param>
        </dao>
        <dao name="Events" class="com.cloud.event.dao.EventDaoImpl"/>
        <dao name="UserStats" class="com.cloud.user.dao.UserStatisticsDaoImpl"/>
        <dao name="IP Addresses" class="com.cloud.network.dao.IPAddressDaoImpl"/>
        <dao name="Usage" class="com.cloud.usage.dao.UsageDaoImpl"/>
        <dao name="Domain" class="com.cloud.domain.dao.DomainDaoImpl"/>
        <dao name="Account" class="com.cloud.user.dao.AccountDaoImpl"/>
        <dao name="UserAccount" class="com.cloud.user.dao.UserAccountDaoImpl"/>
        <dao name="Usage VmInstance" class="com.cloud.usage.dao.UsageVMInstanceDaoImpl"/>
        <dao name="Usage Network" class="com.cloud.usage.dao.UsageNetworkDaoImpl"/>
        <dao name="Usage IPAddress" class="com.cloud.usage.dao.UsageIPAddressDaoImpl"/>
        <dao name="Usage Volume" class="com.cloud.usage.dao.UsageVolumeDaoImpl"/>
        <dao name="Usage Storage" class="com.cloud.usage.dao.UsageStorageDaoImpl"/>
    	<dao name="Usage Load Balancer Policy" class="com.cloud.usage.dao.UsageLoadBalancerPolicyDaoImpl"/>
    	<dao name="Usage Port Forwarding Rule" class="com.cloud.usage.dao.UsagePortForwardingRuleDaoImpl"/>
    	<dao name="Usage Network Offering" class="com.cloud.usage.dao.UsageNetworkOfferingDaoImpl"/>
    	<dao name="Usage VPN User" class="com.cloud.usage.dao.UsageVPNUserDaoImpl"/>
    	<dao name="Usage Security Group" class="com.cloud.usage.dao.UsageSecurityGroupDaoImpl"/>
        <dao name="Usage Job" class="com.cloud.usage.dao.UsageJobDaoImpl"/>
        <dao name="Configuration" class="com.cloud.configuration.dao.ConfigurationDaoImpl"/>
        <dao name="Alert" class="com.cloud.alert.dao.AlertDaoImpl"/>
        <dao name="Usage Event" class="com.cloud.event.dao.UsageEventDaoImpl"/>
        <manager name="usage manager" class="com.cloud.usage.UsageManagerImpl">
            <param name="period">DAILY</param> <!-- DAILY, WEEKLY, MONTHLY; how often it creates usage records -->
        </manager>
        <manager name="Alert Manager" class="com.cloud.usage.UsageAlertManagerImpl">
        </manager>
    </usage-server>
</components.xml>
