From 40ad018ed6954b458eee98f4f102a244a346c62b Mon Sep 17 00:00:00 2001 From: Artyom Katsap Date: Wed, 17 May 2017 22:02:40 +0200 Subject: [PATCH 1/2] added cache to drupal search --- config/default.js | 3 ++- libs/drupal_access.js | 22 ++++++++++++++++------ package.json | 1 + 3 files changed, 19 insertions(+), 7 deletions(-) diff --git a/config/default.js b/config/default.js index 4ce19e8be..44bb8ab25 100644 --- a/config/default.js +++ b/config/default.js @@ -124,5 +124,6 @@ exports.api_tokens = { exports.profiles_api = { url: process.env.DRUPAL_PROFILE_API_URL || 'http://dummy.url', username: process.env.DRUPAL_PROFILE_API_USER || 'dummy', - password: process.env.DRUPAL_PROFILE_API_PASSWORD || 'dummy' + password: process.env.DRUPAL_PROFILE_API_PASSWORD || 'dummy', + useCache: process.env.USE_DRUPAL_CACHE || false, }; diff --git a/libs/drupal_access.js b/libs/drupal_access.js index 252fb9861..3889083e3 100644 --- a/libs/drupal_access.js +++ b/libs/drupal_access.js @@ -1,7 +1,9 @@ require('dotenv').config() -var request = require('superagent'); -var logger = require('../libs/logger')(module); -var drupalConfig = require('config').get('profiles_api'); +const request = require('superagent'); +const logger = require('../libs/logger')(module); +const drupalConfig = require('config').get('profiles_api'); +const NodeCache = require("node-cache"); +const drupalCache = new NodeCache({ stdTTL: 60*60*24, checkperiod: 600 }); function parseFromAnchorTag(uid_string) { var re = /(.+)<\/a>/g; @@ -74,17 +76,25 @@ var search_multiple_emails = function(login_data, email_arr) { var search = function(login_data, email, uid, is_retry) { return new Promise((resolve, reject) => { var qs = {}; + var key; if (email) { - qs.mail = email + qs.mail = email; + key = email; } if (uid) { - qs.uid = uid + qs.uid = uid; + key = uid; + } + var user_data_ = drupalCache.get(key) + if (user_data_ && drupalConfig.useCache) { + return resolve({ email: qs.mail, uid: qs.uid, user_data: user_data_ }); } login_data.request_agent .get(drupalConfig.url + '/en/api/usersearch') .query(qs) .then((res) => { - var user_data_ = parseUser(res.body) + user_data_ = parseUser(res.body) + drupalCache.set(key, user_data_); resolve({ email: qs.mail, uid: qs.uid, user_data: user_data_ }); }).catch((err) => { if (err.status === 403 && !is_retry) { diff --git a/package.json b/package.json index 180db3667..e82647d1a 100644 --- a/package.json +++ b/package.json @@ -76,6 +76,7 @@ "module-id": "2.0.4", "morgan": "~1.7.0", "mysql": "^2.11.1", + "node-cache": "^4.1.1", "node-sass": "^3.13.0", "passport": "^0.3.2", "passport-facebook": "2.1.1", From 07afea52db3e46e68f80f38736a67ad3f985e0ef Mon Sep 17 00:00:00 2001 From: Artyom Katsap Date: Wed, 17 May 2017 22:15:03 +0200 Subject: [PATCH 2/2] Added env variable for ttl --- config/default.js | 1 + libs/drupal_access.js | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/config/default.js b/config/default.js index 44bb8ab25..a1d2ee323 100644 --- a/config/default.js +++ b/config/default.js @@ -126,4 +126,5 @@ exports.profiles_api = { username: process.env.DRUPAL_PROFILE_API_USER || 'dummy', password: process.env.DRUPAL_PROFILE_API_PASSWORD || 'dummy', useCache: process.env.USE_DRUPAL_CACHE || false, + cacheTTL: process.env.USE_DRUPAL_CACHE_TTL || 3600*24, }; diff --git a/libs/drupal_access.js b/libs/drupal_access.js index 3889083e3..adfb51b5b 100644 --- a/libs/drupal_access.js +++ b/libs/drupal_access.js @@ -3,7 +3,8 @@ const request = require('superagent'); const logger = require('../libs/logger')(module); const drupalConfig = require('config').get('profiles_api'); const NodeCache = require("node-cache"); -const drupalCache = new NodeCache({ stdTTL: 60*60*24, checkperiod: 600 }); + +const drupalCache = new NodeCache({ stdTTL: drupalConfig.cacheTTL, checkperiod: 600 }); function parseFromAnchorTag(uid_string) { var re = /(.+)<\/a>/g;