Difference between revisions of "Accounting Library"
Luca.frosini (Talk | contribs) (→Code Example) |
Luca.frosini (Talk | contribs) (→Code Example) |
||
Line 44: | Line 44: | ||
The following snippet of code provide an example of '''ServiceUsageRecord''' account which is automatically made from wHN and gHN. | The following snippet of code provide an example of '''ServiceUsageRecord''' account which is automatically made from wHN and gHN. | ||
− | See [[Accounting Model#ServiceUsageRecord | + | See [[Accounting Model#ServiceUsageRecord | Service Usage Record Model]] |
Revision as of 17:46, 9 May 2016
This component is responsible of collecting, harmonizing and storing Accounting data.
Contents
Accounting Lib in the Accounting Architecture
The following image evidences the accounting-lib component as part of Accounting Architecture:
Library
The library has been tough to provide a common way to elaborate Usage Record (UR) (see Accounting Model to check which Usage Records are supported by default). In particular is responsible for:
- Collecting Accounting Data
It uses facilities provided by Document Store Lib for:
- Aggregating
- Buffering
- Storing
- Providing Fallback and Retry capability
Collecting Usage Record
The library allows to collect Usage Records providing the following functionality:
- Attribute Validation and Harmonization
- Usage Record Validation
To set the various properties of an usage records two different methods are available
- Developer Friendly methods (getter and setter)
- Generic Key-Value method (key:String, value:Comparable<? extends Serializable> )
The methods are idempotent. This means that any of the way you are using to set a properties the value is always validated and harmonized in the same way (i.e. from the the same code). You can mix different methods for different properties.
Moreover you can provide a Map<String,Comparable<? extends Serializable>> to set all properties at once.
Usage Record Record Validation and Harmonization
This library provides support to validate and harmonize the values to a common type (e.g. the string representation on an integer to a integer type, the string representation of an enum to the enum type). This functionality is very useful especially when the developer use a the key-value method.
For further details see Accounting Model.
Code Example
The following snippet of code provide an example of ServiceUsageRecord account which is automatically made from wHN and gHN. See Service Usage Record Model
// This code auto-discover the available persistence and retrieve the configuration from IS to correctly initialize it.
AccountingPersistence accountingPersistence = AccountingPersistenceFactory.getPersistence();
// Create a new Service Usage Record
ServiceUsageRecord usageRecord = new ServiceUsageRecord();
/*
* Commented to show the use of key-value setResourceProperty function
* instead of the convenient setter
* usageRecord.setConsumerId("luca.frosini");
* Please note that as KEY is used the provided static variable. Always behave like this.
*/
usageRecord.setResourceProperty(ServiceUsageRecord.CONSUMER_ID, "luca.frosini");
usageRecord.setOperationResult(OperationResult.SUCCESS);
usageRecord.setCallerHost("node13.d4science.org");
usageRecord.setHost("node22.d4science.org");
usageRecord.setServiceClass("VREManagement");
usageRecord.setServiceName("SmartExecutor");
usageRecord.setCalledMethod("launch");
// usageRecord.setDuration(300)
// Duration should be an integer. Anyway the string is converted from the validator.
usageRecord.setResourceProperty(ServiceUsageRecord.DURATION, "300");
accountingPersistence.account(usageRecord);
Development
The library is identified by the following maven coordinates:
<groupId>org.gcube.accounting</groupId>
<artifactId>accounting-lib</artifactId>
Every components has to account UsageRecords must depend from this library.
In some cases you may also depended from Document Store Lib. The maven coordinates of Document Store Lib are:
<groupId>org.gcube.data-publishing</groupId>
<artifactId>document-store-lib</artifactId>
Please set the scope of both library to PROVIDED if your component runs on a container gHN or vHN.
Accounting Persistence Lib
The current implementation of persistence for this library is for CouchDB storage.
<groupId>org.gcube.accounting</groupId>
<artifactId>accounting-lib-persistence-couchdb</artifactId>
The developer MUST not depend from this library. This library is already available on container because has been included in gCore and smartgears bundles. Also, when a component does not run on a container , the component MUST not include this library as dependency. It will be responsibility of the person in charge of deploying the component to provide also that library.
This library must be available on every node of the infrastructure. To respect as much possible the smartgears ZERO-DEPENDENCY paradigm a simple couchdb-connector (simple HTTP client library) has been developed.
Other implementations are:
<groupId>org.gcube.accounting</groupId>
<artifactId>accounting-lib-persistence-couchbase</artifactId>
<groupId>org.gcube.accounting</groupId>
<artifactId>accounting-lib-persistence-mongodb</artifactId>
Deployment
Accounting Lib and the Accounting Persistence Lib are already available on gCore and smartgears bundles (gHN and wHN).