use a view to retrieve trigger docs (#73)
diff --git a/.jshintrc b/.jshintrc
index f8e9dc9..d6a6c55 100644
--- a/.jshintrc
+++ b/.jshintrc
@@ -1,5 +1,6 @@
{
"esversion" : 6,
"module" : true,
- "node" : true
+ "node" : true,
+ "predef" : ["emit"]
}
diff --git a/provider/app.js b/provider/app.js
index 28787e0..c6845cb 100644
--- a/provider/app.js
+++ b/provider/app.js
@@ -48,6 +48,7 @@
var dbProtocol = process.env.DB_PROTOCOL;
var dbPrefix = process.env.DB_PREFIX;
var databaseName = dbPrefix + constants.TRIGGER_DB_SUFFIX;
+var ddname = '_design/filters';
// Create the Provider Server
var server = http.createServer(app);
@@ -56,32 +57,55 @@
});
function createDatabase (nanop) {
+ logger.info(tid, 'createDatabase', 'creating the trigger database');
+ return new Promise(function(resolve, reject) {
+ nanop.db.create(databaseName, function (err, body) {
+ if (!err) {
+ logger.info(tid, databaseName, ' database for triggers was created.');
+ }
+ else {
+ logger.info(tid, databaseName, 'failed to create the trigger database. it might already exist ',err);
+ }
+ var db = nanop.db.use(databaseName);
+ var only_triggers = {
+ map: function (doc) {
+ if (doc.maxTriggers) {
+ emit(doc._id, 1);
+ }
+ }.toString()
+ };
- logger.info(tid, 'createDatabase', 'creating the trigger database');
- if (nanop !== null) {
- nanop.db.create(databaseName, function(err, body, header) {
- if (!err) {
- logger.info(tid, databaseName, ' database for triggers was created.');
- } else {
- logger.info(tid, databaseName, 'failed to create the trigger database. it might already exist ',err);
- }
+ db.get(ddname, function (error, body) {
+ if (error) {
+ //new design doc
+ db.insert({
+ views: {
+ only_triggers: only_triggers
+ },
+ }, ddname, function (error, body) {
+ if (error) {
+ reject("view could not be created: " + error);
+ }
+ resolve(db);
+ });
+ }
+ else {
+ resolve(db);
+ }
+ });
+ });
});
- var chDb = nanop.db.use(databaseName);
- return chDb;
- } else {
- logger.info(tid, databaseName, 'failed to create the trigger database. nano provider did not get created. check db URL: ' + dbHost);
- return null;
- }
-
}
function createTriggerDb () {
-
- logger.info('url is ' + dbProtocol + '://' + dbUsername + ':' + dbPassword + '@' + dbHost);
- var nanop = require('nano')(dbProtocol + '://' + dbUsername + ':' + dbPassword + '@' + dbHost);
-
- return createDatabase (nanop);
-
+ logger.info('url is ' + dbProtocol + '://' + dbUsername + ':' + dbPassword + '@' + dbHost);
+ var nanop = require('nano')(dbProtocol + '://' + dbUsername + ':' + dbPassword + '@' + dbHost);
+ if (nanop !== null) {
+ return createDatabase (nanop);
+ }
+ else {
+ Promise.reject('nano provider did not get created. check db URL: ' + dbHost);
+ }
}
// Initialize the Provider Server
@@ -95,34 +119,33 @@
}
}
- var nanoDb = createTriggerDb();
- if (nanoDb === null) {
- logger.error(tid, 'init', 'an error occurred creating database');
- } else {
+ createTriggerDb()
+ .then(nanoDb => {
+ logger.info(tid, 'init', 'trigger storage database details: ', nanoDb);
- logger.info(tid, 'init', 'trigger storage database details: ', nanoDb);
+ var providerUtils = new ProviderUtils(tid, logger, app, retriesBeforeDelete, nanoDb, routerHost, supportIncludeDocs);
+ var providerRAS = new ProviderRAS(tid, logger, providerUtils);
+ var providerHealth = new ProviderHealth(tid, logger, providerUtils);
+ var providerUpdate = new ProviderUpdate(tid, logger, providerUtils);
+ var providerDelete = new ProviderDelete(tid, logger, providerUtils);
- var providerUtils = new ProviderUtils (tid, logger, app, retriesBeforeDelete, nanoDb, routerHost, supportIncludeDocs);
- var providerRAS = new ProviderRAS (tid, logger, providerUtils);
- var providerHealth = new ProviderHealth (tid, logger, providerUtils);
- var providerUpdate = new ProviderUpdate (tid, logger, providerUtils);
- var providerDelete = new ProviderDelete (tid, logger, providerUtils);
+ // RAS Endpoint
+ app.get(providerRAS.endPoint, providerRAS.ras);
- // RAS Endpoint
- app.get(providerRAS.endPoint, providerRAS.ras);
+ // Health Endpoint
+ app.get(providerHealth.endPoint, providerHealth.health);
- // Health Endpoint
- app.get(providerHealth.endPoint, providerHealth.health);
+ // Endpoint for Update OR Create a Trigger
+ app.put(providerUpdate.endPoint, providerUtils.authorize, providerUpdate.update);
- // Endpoint for Update OR Create a Trigger
- app.put(providerUpdate.endPoint, providerUtils.authorize, providerUpdate.update);
+ // Endpoint for Deleting an existing Trigger.
+ app.delete(providerDelete.endPoint, providerUtils.authorize, providerDelete.delete);
- // Endpoint for Deleting an existing Trigger.
- app.delete(providerDelete.endPoint, providerUtils.authorize, providerDelete.delete);
+ providerUtils.initAllTriggers();
- providerUtils.initAllTriggers();
-
- }
+ }).catch(err => {
+ logger.error(tid, 'init', 'an error occurred creating database:', err);
+ });
}
diff --git a/provider/lib/utils.js b/provider/lib/utils.js
index bf758ab..8c5db12 100644
--- a/provider/lib/utils.js
+++ b/provider/lib/utils.js
@@ -213,7 +213,7 @@
var method = 'initAllTriggers';
logger.info(tid, that.module, method, 'Initializing all cloudant triggers from database.');
- triggerDB.list({include_docs: true}, function(err, body) {
+ triggerDB.view('filters', 'only_triggers', {include_docs: true}, function(err, body) {
if (!err) {
body.rows.forEach(function(trigger) {