...
...
Table of Contents |
---|
Abiquo offers standard resource metrics and you can also define your own as described in this document. You can define custom metrics using Abiquo data or from another source.
...
If you have OpenFlow or Netflow network data for your platform, you can import consolidated network data into a table or schema for the Abiquo database. Create Then create a custom resource definition for it. Abiquo will read the data and create custom network usage records in the accounting_event_detail table. You can then use this data to bill your customers for their network bandwidth usage.
Overview
...
The UpdateAccounting stored procedure (located in the ‘kinton’ schema) runs.
The UpdateAccounting procedure processes one account period at a time.
It runs the ‘GenerateAccountingPeriodDataExt’ to process the period:
It creates temporary tables with a subset of data from the accounting_event_... tables for the time period
It creates a temporary table to hold unconsolidated accounting_event_detail data, which is populated with data from the temporary accounting_event_... tables
It consolidates the unconsolidated temporary data into the main accounting_event_detail table by calling the ‘FLUSH_TMP_ACCOUNTING_EVENT_DETAIL’ stored procedure.
For each duplicate resource usage it accounts for the MAXIMUM resource identified. For example, if the number of CPUs is increased from 4 to 6 CPUs on a VM during the account period, then two rows will exist in the accounting_event_vm table for that VM. The consolidation process identifies the maximum CPU used 6, and accounts for that.
When the above ‘core’ resources have been processed for a given account period the platform process the custom resources. The accounting process looks for the custom stored procedure and runs it with details of the account period.
The CUSTOM_GENERATE_ACCOUNTING_DATA_V1 stored procedure
The CUSTOM_GENERATE_ACCOUNTING_DATA_V1 stored procedure is the entry point for generating custom accounting data.
The procedure should be defined as follows:
...
To define a custom stored procedure, start with the template version of the CUSTOM_GENERATE_ACCOUNTING_DATA_TEMPLATE_V1 defined within the kinton_accounting schema.
When you run the custom stored procedure, it has access to the temporary accounting_event_... tables, and also to the (empty) tmp_accounting_event_detail table which holds unconsolidated temporary data. The custom stored procedure may access any Abiquo database data (because it is running in the context of the Abiquo system) and use it populate the unconsolidated temporary table. Depending on availability and configuration, the custom stored procedure can access non-Abiquo DBMS data too. Finally, as the last thing it does, the custom procedure should call the accounting procedure used to flush the data from the temporary table into the main accounting table, which will automatically consolidate data in the process.
...
Identify custom resource types for Abiquo
Abiquo needs to uniquely identify custom accounting resources by their resource name and resource ID. And it will need to avoid clashes with any further extensions to the core Abiquo accounting resources. Abiquo stores resource names in the accounting_event_detail table (and its temporary equivalent table) using a name ID rather than the resource name itself.
Give each custom resource a unique name
Set a unique custom resource IDs as a numeric value in the range of -1 to -127
Use the 'ABQ_OBJECT_NAME_TO_ID' function to add the reource name to the name table
If any of the core accounting resources are disabled, add the names of VMs, VApps, VDCs, and Enterprises to the appropriate name tables
Calculating the correct number of resources for the account period granularity
...
Code Block |
---|
DELIMITER | CREATE PROCEDURE kinton_accounting.CUSTOM_GENERATE_ACCOUNTING_DATA_V1 (IN period_start TIMESTAMP, IN period_end TIMESTAMP, IN period_hours INTEGER, IN granularity_hours INTEGER) NOT DETERMINISTIC SQL SECURITY DEFINER BEGIN INSERT INTO kinton_accounting.tmp_accounting_event_detail( startTime, endTime, idAccountingResourceType, resourceType, resourceUnits, resourceName, idEnterprise, idVirtualDataCenter, idVirtualApp, idVirtualMachine, costCode, idStorageTier) SELECT DISTINCT period_start, period_end, -1, ABQ_OBJECT_NAME_TO_ID('VirtualMachine-haHosted'), 1 * (period_hours/granularity_hours), ABQ_OBJECT_NAME_TO_ID(ABQ_VM_ID_TO_NAME(acc_vm.idVM)), acc_vm.idEnterprise, # Assumes already in name table from 'core' processing acc_vm.idVirtualDataCenter, # Assumes already in name table from 'core' processing acc_vm.idVirtualApp, # Assumes already in name table from 'core' processing acc_vm.idVM, # Assumes already in name table from 'core' processing NULL, NULL FROM accounting_event_vm acc_vm WHERE # Is currently active, and was active prior to the end of the account period ((acc_vm.startTime <= period_end AND (acc_vm.stopTime IS NULL OR acc_vm.stopTime >= period_end)) OR # OR stopped running during the account period ((acc_vm.stopTime >= period_start) AND (acc_vm.stopTime < period_end))) AND acc_vm.haEnabled=1; # Finally, consolidate and write the entries from the TMP table into the # accounting_event_detail table... CALL FLUSH_TMP_ACCOUNTING_EVENT_DETAIL(); END| DELIMITER ; |
...