Commit 4853e358 authored by loganathan.shanmugam@tarento.com's avatar loganathan.shanmugam@tarento.com Committed by kochhar
Browse files

Issue #SB-4854 fix: Integrated config helper with meta filter

parent c9dc3c7b
master dependabot/npm_and_yarn/src/async-2.6.4 dependabot/npm_and_yarn/src/decode-uri-component-0.2.2 dependabot/npm_and_yarn/src/flat-and-mocha-5.0.2 dependabot/npm_and_yarn/src/handlebars-4.7.7 dependabot/npm_and_yarn/src/jsonwebtoken-9.0.0 dependabot/npm_and_yarn/src/lodash-4.17.21 dependabot/npm_and_yarn/src/minimist-and-project-sunbird/telemetry-sdk-and-handlebars-and-mkdirp-1.2.8 release-3.6.0 release-4.3.0 release-4.8.0 release-5.2.0 release-5.3.0 release-5.6.0 release-6.0.0 v1.13.3 v1.13 v1.12 v1.11.1 v1.11 v1.10.1 v1.10 v1.9 tmp-testPR tmp-sunbird-bootcamp tmp-rjshrjndrn-patch-1 tmp-revert-118-testPR tmp-revert-110-logs tmp-revert-99-revert-98-revert-97-revert-96-rjshrjndrn-patch-1 tmp-revert-98-revert-97-revert-96-rjshrjndrn-patch-1 tmp-revert-97-revert-96-rjshrjndrn-patch-1 tmp-revert-96-rjshrjndrn-patch-1 tmp-release-sonarcloud tmp-release-2.6.0 tmp-release-2.3.0 tmp-release-2.1.1 tmp-release-2.1.0 tmp-release-2.1.0_pluginSearch tmp-release-2.0.0 tmp-release-1.15 tmp-release-1.14.3 tmp-release-1.14 tmp-release-1.14-sp3 tmp-refactored-dev-deploy tmp-master tmp-loadtest tmp-load-testing tmp-jenkins-test tmp-jenkins-pipeline tmp-final-variable-refac tmp-dial-assemble-api tmp-content-update-read tmp-circleci release-5.6.0_RC1 release-5.2.0_RC1 release-4.8.5_RC1 release-4.8.0_RC2 release-4.8.0_RC1 release-4.3.0_RC1 release-3.8.0_RC3 release-3.8.0_RC2 release-3.8.0_RC1 release-3.7.0_RC2 release-3.7.0_RC1 release-3.6.0_RC1 release-3.2.0_RC2 release-3.2.0_RC1 release-3.1.0 release-3.1.0_RC2 release-3.1.0_RC1 release-3.0.1_RC1 release-3.0.0 release-3.0.0_RC1 release-2.10.0 release-2.10.0_RC2 release-2.10.0_RC1 release-2.9.0_RC3 release-2.9.0_RC2 release-2.9.0_RC1 release-2.8.0 release-2.8.0_RC4 release-2.8.0_RC3 release-2.8.0_RC2 release-2.8.0_RC1 release-2.7.0 release-2.7.0_RC2 release-2.7.0_RC1 release-2.6.0 release-2.6.0_RC4 release-2.6.0_RC3 release-2.6.0_RC2 release-2.6.0_RC1 release-2.3.0 release-2.3.0_RC2 release-2.3.0_RC1 release-2.1.1_RC1 release-2.1.0_RC2 release-2.1.0_RC1 release-2.0.0 release-2.0.0_RC5 release-2.0.0_RC4 release-2.0.0_RC3 release-2.0.0_RC2 release-2.0.0_RC1 release-1.15.0 release-1.15_RC7 release-1.15_RC6 release-1.15_RC5 release-1.15_RC4 release-1.15_RC3 release-1.15_RC2 release-1.15_RC1 release-1.14.0
No related merge requests found
Showing with 80 additions and 137 deletions
+80 -137
...@@ -11,7 +11,6 @@ var configUtil = require('sb-config-util') ...@@ -11,7 +11,6 @@ var configUtil = require('sb-config-util')
const contentProvider = require('sb_content_provider_util') const contentProvider = require('sb_content_provider_util')
var contentMetaProvider = require('./contentMetaFilter') var contentMetaProvider = require('./contentMetaFilter')
var configHelper = require('./helpers/configHelper')
// TODO below configuration should to be refactored in a seperate file // TODO below configuration should to be refactored in a seperate file
const contentProviderConfigPath = path.join(__dirname, '/config/contentProviderApiConfig.json') const contentProviderConfigPath = path.join(__dirname, '/config/contentProviderApiConfig.json')
...@@ -121,8 +120,12 @@ if (defaultChannel) { ...@@ -121,8 +120,12 @@ if (defaultChannel) {
'start service Eg: sunbird_environment = dev, sunbird_instance = sunbird') 'start service Eg: sunbird_environment = dev, sunbird_instance = sunbird')
process.exit(1) process.exit(1)
} }
configUtil.setConfig('META_FILTER_REQUEST_JSON', contentMetaProvider.getMetaFilterConfig()) contentMetaProvider.getMetaFilterConfig().then((configStr) => {
configHelper.updateConfig() configUtil.setConfig('META_FILTER_REQUEST_JSON', configStr)
}).catch((err) => {
console.log('error in getting meta filters', err)
process.exit(1)
})
}) })
} else { } else {
console.log('error in fetching default channel', defaultChannel, err, res) console.log('error in fetching default channel', defaultChannel, err, res)
......
...@@ -3,29 +3,67 @@ var LOG = require('sb_logger_util') ...@@ -3,29 +3,67 @@ var LOG = require('sb_logger_util')
var path = require('path') var path = require('path')
var filename = path.basename(__filename) var filename = path.basename(__filename)
var _ = require('lodash') 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 to generate the Config Array
function generateConfigString (metaFiltersArray) {
var configArray = {} var generateConfigString = async(function(metaFiltersArray) {
_.forOwn(metaFiltersArray, function (value, key) { var configArray = {}
const allowedMetadata = value[0] _.forOwn(metaFiltersArray, function (value, key) {
const blackListedMetadata = value[1] var allowedMetadata = value[0]
if ((allowedMetadata && allowedMetadata.length > 0) && (blackListedMetadata && blackListedMetadata.length > 0)) { var blackListedMetadata = value[1]
configArray[key] = _.difference(allowedMetadata, blackListedMetadata) if (key === 'channel' && _.includes(allowedMetadata, '$.instance.all')) {
} else if (allowedMetadata && allowedMetadata.length > 0) { if (channelRefreshCronStr && !ischannelRefreshEnabled) {
configArray[key] = allowedMetadata setChannelRefreshTask()
} else if (blackListedMetadata && blackListedMetadata.length > 0) { ischannelRefreshEnabled = true
configArray[key] = { 'ne': blackListedMetadata } }
} 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', LOG.info(utilsService.getLoggerData({}, 'INFO',
filename, 'getFilterConfig', 'config array', configArray)) filename, 'getconfigStringFromMeta', 'config string', configString))
return configArray return configString
} }
// function to generate the search filter and return JSON Object // function to generate the search filter and return JSON Object
function getMetaFilterConfig () { function getMetaFilterConfig () {
LOG.info(utilsService.getLoggerData({}, 'INFO', 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 var allowedChannels = process.env.sunbird_content_service_whitelisted_channels
? process.env.sunbird_content_service_whitelisted_channels.split(',') : [] ? process.env.sunbird_content_service_whitelisted_channels.split(',') : []
var blackListedChannels = process.env.sunbird_content_service_blacklisted_channels var blackListedChannels = process.env.sunbird_content_service_blacklisted_channels
...@@ -70,4 +108,16 @@ function getFilterJSONfromConfigService () { ...@@ -70,4 +108,16 @@ function getFilterJSONfromConfigService () {
throw new Error('Config service is unavailable') 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 module.exports.getMetaFilterConfig = getMetaFilterConfig
...@@ -5,12 +5,6 @@ var LOG = require('sb_logger_util') ...@@ -5,12 +5,6 @@ var LOG = require('sb_logger_util')
const contentProvider = require('sb_content_provider_util') const contentProvider = require('sb_content_provider_util')
var async = require('async') var async = require('async')
var _ = require('lodash') 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 * This function executes the org search lms API to get all orgs
...@@ -31,67 +25,9 @@ function getRootOrgs (requestObj, cb) { ...@@ -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 * This method gets all channels through 'getRootOrgs' method response
* data asynchronously and return callback * data asynchronously and return back a promise
* @param cb callback method which takes error and allchannels as param
* @returns promise * @returns promise
*/ */
function getAllChannelsFromAPI () { function getAllChannelsFromAPI () {
...@@ -148,34 +84,6 @@ 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 = { module.exports = {
updateConfig: updateConfig, getAllChannelsFromAPI: getAllChannelsFromAPI
getFilterConfig: getFilterConfig
} }
...@@ -16,6 +16,7 @@ ...@@ -16,6 +16,7 @@
"license": "ISC", "license": "ISC",
"dependencies": { "dependencies": {
"async": "^2.4.0", "async": "^2.4.0",
"asyncawait": "^1.0.7",
"azure-storage": "2.7.0", "azure-storage": "2.7.0",
"body-parser": "^1.14.2", "body-parser": "^1.14.2",
"cassandra-driver": "^3.4.1", "cassandra-driver": "^3.4.1",
......
var configHelper = require('../../helpers/configHelper') var configHelper = require('../../helpers/configHelper')
describe('configuration helper methods', function () { describe('configuration helper methods', function () {
it('should set the configuration ', function () { it('should get all the channels', function () {
spyOn(configHelper, 'getFilterConfig') spyOn(configHelper, 'getRootOrgs')
configHelper.updateConfig() configHelper.getAllChannelsFromAPI().then((configStr) => {
expect(configHelper.getFilterConfig).toHaveBeenCalled() expect(configStr.length).toBeGreaterThanOrEqual(0)
})
})
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()
}) })
}) })
}) })
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment