1.0.0-beta.4 • Published 5 years ago
@hisptz/function-analytics v1.0.0-beta.4
Fn
Function Analytics Library
Library to aid in the development of functions. Built with best practices in mind from the experience on function maintenance. This is to make it easy for developers to concentrate on the business logic of their functions while also considering the best way to perform operations with out of the box performance execution strategy.
Features
- Fetching data for analytics.
- Fetching DHIS Identifiable objects.
- Perform execution of functions with optimization
Getting started
Browser
<script src="https://raw.githack.com/hisptz/function-analytics/master/lib/function-analytics.min.js"></script>
Node
var Fn = require('function-analytics').Fn;
Initializing
Fn.init({
baseUrl: 'api_url_to_dhis_server',
username: 'username', //Optional if in a DHIS app
pasword: 'password' //Optional if in a DHIS app
});
Fetch analytics
You can fetch analytic with a few lines of code
new Fn.Analytics()
.setData('dx')
.setOrgUnit('ou')
.setPeriod('pe')
.postProcess(function(analyticsResult) {
// This adds post processing after fetching is done
return analyticsResult;
})
.get()
.progress(function(value) {
// Do something with the progress value
})
.then(function(analyticsResult) {
//The result after fetching and processing with the post process callback
});
Dependency
You can put together dependencies if calls depend on one another
var orgunit = new Fn.IdentifiableObject('organisationUnits'); // Example of an organisation fetcher
orgunit.where('id', 'in', ['Rp268JB6Ne4', 'Rp268JB6Ne2']);
//Declare business process to run after orgunit results
var bussinessAfterOrgunitProcess = (orgUnitResult, analytics) => {
// Adds dependency
let ous = orgUnitResult.organisationUnits
.map(organisationUnit => {
return organisationUnit.id;
})
.join(';');
analytics.setPeriod('2016').setOrgUnit(ous);
}
var analytics = new Fn.Analytics();
analytics.preProcess(
new Fn.Dependency(orgunit, bussinessAfterOrgunitProcess)
);
analytics.get().then(results => {});
Multiple Processing
You can invoke multiple processes
var orgunit = new Fn.IdentifiableObject('organisationUnits');
orgunit.where('id', 'in', ['Rp268JB6Ne4', 'Rp268JB6Ne2']);
var analytics = new Fn.Analytics();
analytics.setPeriod('2016').setOrgUnit('Rp268JB6Ne4;Rp268JB6Ne2');
var multiProcesses = Fn.all([orgunit, analytics]);
multiProcesses.postProcess(res => {
//res[0] is from orgunit
//res[1] is from analytics
return [res[1], res[0]];
});
multiProcesses.get().then(results => {});
For detailed documentation please visit our documentation.