diff --git a/src/app.js b/src/app.js index d98950e75034d48d8688bc40243016e7df3cea92..267a8ab6bb4ebdb28753bc31638da6dcab7ae8d6 100644 --- a/src/app.js +++ b/src/app.js @@ -11,7 +11,6 @@ var configUtil = require('sb-config-util') const contentProvider = require('sb_content_provider_util') var contentMetaProvider = require('./contentMetaFilter') -var configHelper = require('./helpers/configHelper') // TODO below configuration should to be refactored in a seperate file const contentProviderConfigPath = path.join(__dirname, '/config/contentProviderApiConfig.json') @@ -121,8 +120,12 @@ if (defaultChannel) { 'start service Eg: sunbird_environment = dev, sunbird_instance = sunbird') process.exit(1) } - configUtil.setConfig('META_FILTER_REQUEST_JSON', contentMetaProvider.getMetaFilterConfig()) - configHelper.updateConfig() + contentMetaProvider.getMetaFilterConfig().then((configStr) => { + configUtil.setConfig('META_FILTER_REQUEST_JSON', configStr) + }).catch((err) => { + console.log('error in getting meta filters', err) + process.exit(1) + }) }) } else { console.log('error in fetching default channel', defaultChannel, err, res) diff --git a/src/contentMetaFilter.js b/src/contentMetaFilter.js index eef40e4720e5281bca9f86f4f25ced135e7d2a65..8e98d6693bc5107a1e2401664b17eaf8e2f4dfc1 100644 --- a/src/contentMetaFilter.js +++ b/src/contentMetaFilter.js @@ -3,29 +3,67 @@ var LOG = require('sb_logger_util') var path = require('path') var filename = path.basename(__filename) var _ = require('lodash') - +var configHelper = require('./helpers/configHelper.js') +var cron = require('node-cron') +var channelRefreshCronStr = process.env.sunbird_content_service_channel_refresh_cron +var ischannelRefreshEnabled = false +var async = require('asyncawait/async'); +var await = require('asyncawait/await'); // Function to generate the Config Array -function generateConfigString (metaFiltersArray) { - var configArray = {} - _.forOwn(metaFiltersArray, function (value, key) { - const allowedMetadata = value[0] - const blackListedMetadata = value[1] - if ((allowedMetadata && allowedMetadata.length > 0) && (blackListedMetadata && blackListedMetadata.length > 0)) { - configArray[key] = _.difference(allowedMetadata, blackListedMetadata) - } else if (allowedMetadata && allowedMetadata.length > 0) { - configArray[key] = allowedMetadata - } else if (blackListedMetadata && blackListedMetadata.length > 0) { - configArray[key] = { 'ne': blackListedMetadata } - } - }) + +var generateConfigString = async(function(metaFiltersArray) { + var configArray = {} + _.forOwn(metaFiltersArray, function (value, key) { + var allowedMetadata = value[0] + var blackListedMetadata = value[1] + if (key === 'channel' && _.includes(allowedMetadata, '$.instance.all')) { + if (channelRefreshCronStr && !ischannelRefreshEnabled) { + setChannelRefreshTask() + ischannelRefreshEnabled = true + } + LOG.info(utilsService.getLoggerData({}, 'INFO', + filename, 'generateConfigString', 'allowed channels', allowedMetadata)) + var allChannels = await(configHelper.getAllChannelsFromAPI()) + allowedMetadata = _.pull(allowedMetadata, '$.instance.all').concat(allChannels) + LOG.info(utilsService.getLoggerData({}, 'INFO', + filename, 'generateConfigString', 'all whitelisted channels count', allowedMetadata.length)) + configArray[key] = getconfigStringFromMeta(allowedMetadata, blackListedMetadata) + + } else { + LOG.info(utilsService.getLoggerData({}, 'INFO', + filename, 'generateConfigString', 'allowed metadata', allowedMetadata)) + configArray[key] = getconfigStringFromMeta(allowedMetadata, blackListedMetadata) + } + }) + LOG.info(utilsService.getLoggerData({}, 'INFO', + filename, 'generateConfigString', 'config array', configArray)) + return configArray +}) + +/** + * This function generates the config string for given allowed and blacklisted channels + * @param allowedMetadata array of metadata item to be allowed in filters + * @param blackListedMetadata array of metadata item to be blacklisted or ignored + * @returns Js object or array which contains the allowed whitelisted meta items + */ +function getconfigStringFromMeta (allowedMetadata, blackListedMetadata) { + var configString = {} + if ((allowedMetadata && allowedMetadata.length > 0) && (blackListedMetadata && blackListedMetadata.length > 0)) { + configString = _.difference(allowedMetadata, blackListedMetadata) + } else if (allowedMetadata && allowedMetadata.length > 0) { + configString = allowedMetadata + } else if (blackListedMetadata && blackListedMetadata.length > 0) { + configString = { 'ne': blackListedMetadata } + } LOG.info(utilsService.getLoggerData({}, 'INFO', - filename, 'getFilterConfig', 'config array', configArray)) - return configArray + filename, 'getconfigStringFromMeta', 'config string', configString)) + return configString } + // function to generate the search filter and return JSON Object function getMetaFilterConfig () { LOG.info(utilsService.getLoggerData({}, 'INFO', - filename, 'getFilterConfig', 'environment info', process.env)) + filename, 'getMetaFilterConfig', 'environment info', process.env)) var allowedChannels = process.env.sunbird_content_service_whitelisted_channels ? process.env.sunbird_content_service_whitelisted_channels.split(',') : [] var blackListedChannels = process.env.sunbird_content_service_blacklisted_channels @@ -70,4 +108,16 @@ function getFilterJSONfromConfigService () { throw new Error('Config service is unavailable') } +/** + * This function executes the scheduler cron job to refresh the whitelisted + * channels based given cron interval string 'channelRefreshCronStr' + */ +function setChannelRefreshTask () { + cron.schedule(channelRefreshCronStr, function () { + LOG.info(utilsService.getLoggerData({}, 'INFO', + filename, 'setChannelRefreshTask', 'running scheduler task', channelRefreshCronStr)) + getMetaFilterConfig() + }) +} + module.exports.getMetaFilterConfig = getMetaFilterConfig diff --git a/src/helpers/configHelper.js b/src/helpers/configHelper.js index 69ec2173c7d982bcf3a72ccb8fa1b42596e4b12e..a2c3524e2fb871cceb60e8f31b40dd82a6a6c458 100644 --- a/src/helpers/configHelper.js +++ b/src/helpers/configHelper.js @@ -5,12 +5,6 @@ var LOG = require('sb_logger_util') const contentProvider = require('sb_content_provider_util') var async = require('async') var _ = require('lodash') -var configUtil = require('sb-config-util') -var channelRefreshCronStr = process.env.sunbird_content_service_channel_refresh_cron -var cron = require('node-cron') -const whiteListedChannelList = process.env.sunbird_content_service_whitelisted_channels -const blackListedChannelList = process.env.sunbird_content_service_blacklisted_channels -var ischannelRefreshEnabled = false /** * This function executes the org search lms API to get all orgs @@ -31,67 +25,9 @@ function getRootOrgs (requestObj, cb) { }) } -/** - * This function returns the config string based on condition for channel filters which - * contains the whitelisted channels - * @returns Promise which contains the allowed whitelisted channels - */ -function getFilterConfig () { - return new Promise(function (resolve, reject) { - LOG.info(utilsService.getLoggerData({}, 'INFO', - filename, 'getFilterConfig', 'environment info', process.env)) - var allowedChannels = whiteListedChannelList ? whiteListedChannelList.split(',') : [] - var blackListedChannels = blackListedChannelList ? blackListedChannelList.split(',') : [] - if (_.includes(allowedChannels, '$.instance.all')) { - if (channelRefreshCronStr && !ischannelRefreshEnabled) { - setChannelRefreshTask() - ischannelRefreshEnabled = true - } - LOG.info(utilsService.getLoggerData({}, 'INFO', - filename, 'getFilterConfig', 'allowed channels', allowedChannels)) - getAllChannelsFromAPI().then(allChannels => { - allowedChannels = _.pull(allowedChannels, '$.instance.all').concat(allChannels) - LOG.info(utilsService.getLoggerData({}, 'INFO', - filename, 'getFilterConfig', 'all whitelisted channels count', allowedChannels.length)) - resolve(getconfigStringFromChannels(allowedChannels, blackListedChannels)) - }, (err) => { - console.log(err) - LOG.error(utilsService.getLoggerData({}, 'ERROR', - filename, 'getFilterConfig', 'getAllChannelsFromAPI callback', err)) - reject(err) - }) - } else { - LOG.info(utilsService.getLoggerData({}, 'INFO', - filename, 'getFilterConfig', 'allowed channels', allowedChannels)) - resolve(getconfigStringFromChannels(allowedChannels, blackListedChannels)) - } - }) -} - -/** - * This function generates the config string for given allowed and blacklisted channels - * @param allowedChannels array of channels to be allowed in filters - * @param blacklistedchannels array of channels to be blacklisted or ignored - * @returns Js object or array which contains the allowed whitelisted channels - */ -function getconfigStringFromChannels (allowedChannels, blackListedChannels) { - var configString = {} - if ((allowedChannels && allowedChannels.length > 0) && (blackListedChannels && blackListedChannels.length > 0)) { - configString = _.difference(allowedChannels, blackListedChannels) - } else if (allowedChannels && allowedChannels.length > 0) { - configString = allowedChannels - } else if (blackListedChannels && blackListedChannels.length > 0) { - configString = { 'ne': blackListedChannels } - } - LOG.info(utilsService.getLoggerData({}, 'INFO', - filename, 'getconfigStringFromChannels', 'config string', configString)) - return configString -} - /** * This method gets all channels through 'getRootOrgs' method response - * data asynchronously and return callback - * @param cb callback method which takes error and allchannels as param + * data asynchronously and return back a promise * @returns promise */ function getAllChannelsFromAPI () { @@ -148,34 +84,6 @@ function getAllChannelsFromAPI () { }) } -/** - * This method sets the given channel filter value to the config utils - * @param configString configstring which contains the whitelisted channels - */ -function updateConfig () { - getFilterConfig().then((configString) => { - LOG.info(utilsService.getLoggerData({}, 'INFO', - filename, 'updateConfig', 'config string', configString)) - configUtil.setConfig('CHANNEL_FILTER_QUERY_STRING', configString) - }, (err) => { - LOG.error(utilsService.getLoggerData({}, 'ERROR', - filename, 'updateConfig', 'error', err)) - }) -} - -/** - * This function executes the scheduler cron job to refresh the whitelisted - * channels based given cron interval string 'channelRefreshCronStr' - */ -function setChannelRefreshTask () { - cron.schedule(channelRefreshCronStr, function () { - LOG.info(utilsService.getLoggerData({}, 'INFO', - filename, 'setChannelRefreshTask', 'running scheduler task', channelRefreshCronStr)) - updateConfig() - }) -} - module.exports = { - updateConfig: updateConfig, - getFilterConfig: getFilterConfig + getAllChannelsFromAPI: getAllChannelsFromAPI } diff --git a/src/package.json b/src/package.json index d4ec670cbe70b90336a4d5bdaae6739b51bd5338..394760428272754e91244bd9da3f2fb5c52293fb 100644 --- a/src/package.json +++ b/src/package.json @@ -16,6 +16,7 @@ "license": "ISC", "dependencies": { "async": "^2.4.0", + "asyncawait": "^1.0.7", "azure-storage": "2.7.0", "body-parser": "^1.14.2", "cassandra-driver": "^3.4.1", diff --git a/src/test/helpers/configHelperSpec.js b/src/test/helpers/configHelperSpec.js index 06063e1eb4db95895f642e0fdfbe3c9cba60670c..4f64e4a231cc97546e71bd2cb7a29435fe972a10 100644 --- a/src/test/helpers/configHelperSpec.js +++ b/src/test/helpers/configHelperSpec.js @@ -1,29 +1,10 @@ var configHelper = require('../../helpers/configHelper') describe('configuration helper methods', function () { - it('should set the configuration ', function () { - spyOn(configHelper, 'getFilterConfig') - configHelper.updateConfig() - expect(configHelper.getFilterConfig).toHaveBeenCalled() - }) -}) -describe('configuration string', function () { - it('should return the config string with all channels when $.instance.all is present', function (done) { - process.env.sunbird_content_service_whitelisted_channels = - '505c7c48ac6dc1edc9b08f21db5a571d,b00bc992ef25f1a9a8d63291e20efc8d,$.instance.all' - process.env.sunbird_content_service_blacklisted_channels = 'b00bc992ef25f1a9a8d63291e20efc8d' - configHelper.getFilterConfig().then(function (configStr) { - expect(configStr.length).toBeGreaterThanOrEqual(process.env.sunbird_content_service_whitelisted_channels.length) - done() - }) - }) - it('should return the config string with whitelisted channels', function (done) { - process.env.sunbird_content_service_whitelisted_channels = - '505c7c48ac6dc1edc9b08f21db5a571d,b00bc992ef25f1a9a8d63291e20efc8d' - process.env.sunbird_content_service_blacklisted_channels = 'b00bc992ef25f1a9a8d63291e20efc8d' - configHelper.getFilterConfig().then(function (configStr) { - expect(configStr.length).toBeLessThanOrEqual(process.env.sunbird_content_service_whitelisted_channels.length) - done() + it('should get all the channels', function () { + spyOn(configHelper, 'getRootOrgs') + configHelper.getAllChannelsFromAPI().then((configStr) => { + expect(configStr.length).toBeGreaterThanOrEqual(0) }) }) })