fh-reportingclient
Version:
FH Reporting Client
64 lines (57 loc) • 2.11 kB
JavaScript
var GUID = process.env.FH_INSTANCE;
var DOMAIN = process.env.FH_DOMAIN;
var ENVIRONMENT = process.env.FH_ENV;
var HOST = process.env.FH_MBAAS_HOST;
var ACCESS_KEY = process.env.FH_MBAAS_ENV_ACCESS_KEY;
var API_KEY = process.env.FH_APP_API_KEY;
var PROJECT = process.env.FH_WIDGET;
var PROTOCOL = process.env.FH_MBAAS_PROTOCOL || 'https';
var MBaaSClient = require('fh-mbaas-client').MbaasClient;
var URL = require('url');
var async = require('async');
var log = require('./logger')();
//responsible for syncing messages to mbaas. Has a retry option
module.exports = function sync() {
//requeue the send of messages on failure. stopping after times or first success
function reqeueBatch(times,interval,batch) {
async.retry({times: times, interval: interval}, function(cb) {
syncBatch(batch,cb);
}, function done(err) {
if (err) {
log.error("failed to sync message batch", {err: err, data: batch});
}
});
}
//send data to fhmbaas
function syncBatch(batch, cb) {
if (batch && batch.length > 0) {
var mbaasClient = new MBaaSClient(ENVIRONMENT, {
url: URL.format(PROTOCOL + '://' + HOST),
accessKey: ACCESS_KEY,
project: PROJECT,
app: GUID,
appApiKey: API_KEY
});
// /api/app/:domain/:environment/:projectid/:appid/message/:topic with [] or messages for data (a batch)
mbaasClient.app.message.sendbatch({
'host': HOST,
'environment': ENVIRONMENT,
'domain': DOMAIN,
'data': batch,
'topic': 'fhact' //the only other topic is fhweb which is not longer used
}, function(err) {
if (err) {
return cb(err, {message: 'Error sending message batch to MBaaS', host: HOST, environment: ENVIRONMENT, domain: DOMAIN, topic:'fhact', batch: batch});
} else {
return cb(undefined, {message: 'Batch sent to MBaaS'});
}
});
} else {
return cb(undefined, {message: 'Batch empty...nothing to sync at this time'});
}
}
return {
"requeueFailedBatch": reqeueBatch,
"syncBatch":syncBatch
};
};