UNPKG

ibmapm-restclient

Version:
953 lines (867 loc) 36 kB
'use strict'; // # Config options (order) // serverConfig (Highest) // System properties (if applicable i.e JAVA) // Environment variables // Auto discover // global.environment // Bluemix VCAP (lowest) var url = require('url'); var fs = require('fs'); var path = require('path'); var properties = require('properties'); var pluginConfig = require('../restclient/config.js').pluginConfig; var k8sutil = require('../tools/k8sutil'); var sender = require('../restclient/sender-queue'); var rcutil = require('./util'); var logger = require('./logutil').getLogger('BAMPlugin.js'); var queue; var MOUNT_PATH = '/opt/ibm/apm/serverconfig'; var mountPathGlobalEnv = path.join(MOUNT_PATH, 'global.environment'); var bamconns = {}; var app_guid; // This connection is setted by env IBM_APM_SERVER_INGRESS_URL var IBAM_options; var providerPath = '?type=providers'; var aarPath = '?type=aar/middleware'; var adrPath = '?type=adr/middleware'; var gzipped = true; var tId = pluginConfig.cfg.tenantID; process.env.APM_TENANT_ID = tId; var EventEmitter = require('events').EventEmitter; var ready_event = new EventEmitter(); var initialized = false; var WF_SVCS_CONN = { RESOURCEMGMT_SERVICE_BASE_PATH: process.env.RESOURCEMGMT_SERVICE_BASE_PATH ? rcutil.decBase64Ex(process.env.RESOURCEMGMT_SERVICE_BASE_PATH) : pluginConfig.globalEnv.RESOURCEMGMT_SERVICE_BASE_PATH || '/applicationmgmt/0.9', METRICS_SERVICE_BASE_PATH: process.env.METRICS_SERVICE_BASE_PATH ? rcutil.decBase64Ex(process.env.METRICS_SERVICE_BASE_PATH) : pluginConfig.globalEnv.METRICS_SERVICE_BASE_PATH || '/metric/1.0', UI_SERVICE_BASE_PATH: process.env.UI_SERVICE_BASE_PATH ? rcutil.decBase64Ex(process.env.UI_SERVICE_BASE_PATH) : pluginConfig.globalEnv.UI_SERVICE_BASE_PATH || '/uielement/0.8', AGENTMGMT_SERVICE_BASE_PATH: process.env.AGENTMGMT_SERVICE_BASE_PATH ? rcutil.decBase64Ex(process.env.AGENTMGMT_SERVICE_BASE_PATH) : pluginConfig.globalEnv.AGENTMGMT_SERVICE_BASE_PATH || '/agent_mgmt/0.6' }; /* function concatTask(tasks) { var task = { payload: '' }; var payloads = []; if (tasks.length > 0) { tasks.forEach(function(element) { task = element; if (Array.isArray(element.payload)) { payloads = payloads.concat(element.payload); } else { payloads.push(element.payload); } }, this); task.payload = payloads; } return task; }*/ module.exports.Name = function() { return 'BAMPlugin'; }; module.exports.checkReadyStatus = function(callback) { logger.debug('checkReadyStatus()'); if (callback) { ready_event.once('bam_initialized', function() { logger.debug('Got bam_initialized event'); callback(initialized); }); } }; var metadataUploadTimestamp = 0; var uiUploadTimestamp = 0; module.exports.send = function(tasks) { if (!queue) { queue = sender.getQueue('bam'); } for (let indext = 0; indext < tasks.length; indext++) { const task = tasks[indext]; let payloads = []; if (Array.isArray(task.payload)) { payloads = payloads.concat(task.payload); } else if (task.payload !== undefined) { payloads.push(task.payload); } else { sendOne(task); // send a task without payload } if (task.type !== 'metrics: ') { if (task.type.indexOf('adr:') === 0 || task.type.indexOf('aar:') === 0) { sendOne(task); } else { for (let index = 0; payloads && index < payloads.length; index++) { if (Array.isArray(payloads[index])) { for (var i = 0; i < payloads[index].length; i++) { var payload = payloads[index][i]; if (payload.BIOnly) { continue; // ignore BI-only part } task.payload = payload; sendOne(task); } } else { if (!payloads[index].BIOnly) { task.payload = payloads[index]; sendOne(task); } } } } } else if (payloads.length > 0) { var metricsPayload = []; for (let index = 0; payloads && index < payloads.length; index++) { if (payloads[index].BIOnly) { continue; } metricsPayload.push(formatMetrics(payloads[index])); } task.payload = metricsPayload; sendOne(task); } } var curr = new Date(); if (!global.META_ISSEND && curr - metadataUploadTimestamp > 120000) { metadataUploadTimestamp = curr; sendMetadata(); } if (!global.UI_ISSEND && curr - uiUploadTimestamp > 120000) { uiUploadTimestamp = curr; postAMUI(); } }; function formatMetrics(payload) { if (payload.metrics && payload.metrics.requestErrorRate) { payload.metrics.requestErrorRate *= 100; } if (payload.metrics && payload.metrics.errorRate) { payload.metrics.errorRate *= 100; } if (payload.metrics && payload.metrics.loopCpuSystem) { payload.metrics.loopCpuSystem *= 100; } if (payload.metrics && payload.metrics.loopCpuUser) { payload.metrics.loopCpuUser *= 100; } return payload; } function sendOne(task) { if (task.empty) { queue.send(task); return; } logger.debug('BAMPlugin.sendOne', 'the type is ', task.type); dumpResourceIDs4Test(task.type, task.payload); if (!task.additionalHeader) { task.additionalHeader = {}; } if (!task.addtionalOptions) { task.addtionalOptions = {}; } if (IBAM_options) { var additionalHeader = task.additionalHeader; if (IBAM_options.headers) { for (let key in IBAM_options.headers) { additionalHeader[key] = additionalHeader[key] ? additionalHeader[key] : IBAM_options.headers[key]; } } var addtionalOptions = task.addtionalOptions; if (IBAM_options.addtionalOptions) { for (let key in IBAM_options.addtionalOptions) { task.addtionalOptions[key] = addtionalOptions[key] ? addtionalOptions[key] : IBAM_options.addtionalOptions[key]; } } // env IBAM_INGRESS_URL & IBAM_TOKEN are set let wf_url = process.env.IBAM_INGRESS_URL; let me = '&origin=' + global.KNJ_BAM_ORIGINID; if (task.type.indexOf('resources:') === 0) { task.url = wf_url + WF_SVCS_CONN.RESOURCEMGMT_SERVICE_BASE_PATH + '/resources'; } if (task.type.indexOf('updateResources:') === 0) { task.url = wf_url + task.location; task.PUT = true; } if (task.type && task.type.indexOf('metadata:') === 0) { task.url = wf_url + WF_SVCS_CONN.RESOURCEMGMT_SERVICE_BASE_PATH + '/metadata'; } if (task.type && task.type.indexOf('amui:') === 0) { task.url = wf_url + WF_SVCS_CONN.AGENTMGMT_SERVICE_BASE_PATH + '/providers/uiconfiguration/bulk' + '?version=' + global.DC_VERSION; if (!(task.payload instanceof Buffer)) { task.payload = Buffer.from(task.payload); } } if (task.type && task.type.indexOf('dcconfig:') === 0) { if (process.env.UA_LWDC_LISTENER_URL) { task.url = process.env.UA_LWDC_LISTENER_URL + '/providers/configuration'; } else { task.url = wf_url + WF_SVCS_CONN.AGENTMGMT_SERVICE_BASE_PATH + '/providers/configuration'; } } if (task.type && task.type.indexOf('rteNotify:') === 0) { task.url = wf_url + WF_SVCS_CONN.AGENTMGMT_SERVICE_BASE_PATH + '/notification?providerUniqueId=' + task.keyIndexName; } if (task.type && task.type.indexOf('situation:') === 0) { task.url = wf_url + WF_SVCS_CONN.AGENTMGMT_SERVICE_BASE_PATH + '/providers/situation_configuration'; } if (task.type.indexOf('queryDc:') === 0) { task.url = wf_url + WF_SVCS_CONN.RESOURCEMGMT_SERVICE_BASE_PATH + '/providers?_filter=keyIndexName=' + task.keyIndexName; task.GET = true; task.additionalHeader['Accept'] = 'application/json'; } if (task.type.indexOf('queryK8MC:') === 0) { task.url = wf_url + '/api/v1/namespaces/' + task.namespace + '/configmaps/' + task.k8mc; task.GET = true; task.additionalHeader['Accept'] = 'application/json'; } if (task.type.indexOf('queryResource:') === 0) { task.url = wf_url + WF_SVCS_CONN.RESOURCEMGMT_SERVICE_BASE_PATH + '/resources?_filter=uid=' + task.uid; task.GET = true; } if (task.type.indexOf('queryRelationship:') === 0) { task.url = wf_url + WF_SVCS_CONN.RESOURCEMGMT_SERVICE_BASE_PATH + '/resources/' + task.id + '/relationships'; task.GET = true; task.additionalHeader['Accept'] = 'application/json'; } if (task.type.indexOf('queryConfiguration:') === 0) { if (process.env.UA_LWDC_LISTENER_URL) { task.url = process.env.UA_LWDC_LISTENER_URL + '/providers/configuration?providerUniqueId=' + task.keyIndexName; } else { task.url = wf_url + WF_SVCS_CONN.AGENTMGMT_SERVICE_BASE_PATH + '/providers/configuration?providerUniqueId=' + task.keyIndexName; } task.GET = true; task.additionalHeader['Accept'] = 'application/json'; } if (task.type.indexOf('metrics:') === 0) { if (process.env.UA_LWDC_LISTENER_URL) { task.url = process.env.UA_LWDC_LISTENER_URL + '/metric'; } else { task.url = wf_url + WF_SVCS_CONN.METRICS_SERVICE_BASE_PATH + '/data'; } } if (task.type.indexOf('aar:') === 0) { task.url = wf_url + aarPath + me; } if (task.type.indexOf('adr:') === 0) { task.url = wf_url + adrPath + me; } if (task.type.indexOf('dc:') === 0) { if (process.env.UA_LWDC_LISTENER_URL) { task.url = process.env.UA_LWDC_LISTENER_URL + '/providers'; } else { task.url = wf_url + WF_SVCS_CONN.RESOURCEMGMT_SERVICE_BASE_PATH + '/providers'; } } logger.debug('BAMPlugin.sendOne', 'the task send to IBAM: ' + task.url); queue.send(task); } addQueue(task); return; } function addQueue(task) { for (let key in bamconns) { if (bamconns.hasOwnProperty(key)) { let element = bamconns[key]; if (task.type.indexOf('resources:') === 0) { task.url = element.rms_resource_url; } if (task.type.indexOf('updateResources:') === 0) { task.url = element.server_url + task.location; task.PUT = true; } if (task.type && task.type.indexOf('metadata:') === 0) { task.url = element.rms_metadata_url; } if (task.type && task.type.indexOf('amui:') === 0) { task.url = element.ui_url + '?version=' + global.DC_VERSION; if (!(task.payload instanceof Buffer)) { task.payload = Buffer.from(task.payload); } } if (task.type.indexOf('metrics:') === 0) { if (process.env.UA_LWDC_LISTENER_URL) { task.url = process.env.UA_LWDC_LISTENER_URL + '/metric'; } else { task.url = element.metric_url; } } if (task.type.indexOf('aar:') === 0) { task.url = element.tt_url; } if (task.type.indexOf('adr:') === 0) { task.url = element.deepdive_url; task.gzipped = gzipped; } if (task.type.indexOf('dc:') === 0) { if (process.env.UA_LWDC_LISTENER_URL) { task.url = process.env.UA_LWDC_LISTENER_URL + '/providers'; } else { task.url = element.rms_provider_url; } } if (task.type.indexOf('dcconfig:') === 0) { if (process.env.UA_LWDC_LISTENER_URL) { task.url = process.env.UA_LWDC_LISTENER_URL + '/providers/configuration'; } else { task.url = element.agentmgmt_base_url + '/providers/configuration'; } } if (task.type.indexOf('rteNotify:') === 0) { task.url = element.agentmgmt_base_url + '/notification?providerUniqueId=' + task.keyIndexName; } if (task.type.indexOf('situation:') === 0) { task.url = element.agentmgmt_base_url + '/providers/situation_configuration'; } if (task.type.indexOf('queryDc:') === 0) { task.url = element.rms_provider_url + '?_filter=keyIndexName=' + task.keyIndexName; task.GET = true; task.additionalHeader['Accept'] = 'application/json'; } if (task.type.indexOf('queryK8MC:') === 0) { task.url = element.server_url + '/api/v1/namespaces/' + task.namespace + '/configmaps/' + task.k8mc; task.GET = true; task.additionalHeader['Accept'] = 'application/json'; } if (task.type.indexOf('queryResource:') === 0) { task.url = element.rms_resource_url + '?_filter=uid=' + task.uid; task.GET = true; } if (task.type.indexOf('queryRelationship:') === 0) { task.url = element.rms_resource_url + '/' + task.id + '/relationships'; task.GET = true; task.additionalHeader['Accept'] = 'application/json'; } if (task.type.indexOf('queryConfiguration:') === 0) { // TODO if (process.env.UA_LWDC_LISTENER_URL) { task.url = process.env.UA_LWDC_LISTENER_URL + '/providers/configuration?providerUniqueId=' + task.keyIndexName; } else { task.url = element.agentmgmt_base_url + '/providers/configuration?providerUniqueId=' + task.keyIndexName; } task.GET = true; task.additionalHeader['Accept'] = 'application/json'; } if (element.pfx) { task.addtionalOptions.pfx = element.pfx; task.addtionalOptions.ca = element.pfx; task.addtionalOptions.requestCert = true; } if (element.keyfile_password) { task.addtionalOptions.passphrase = element.keyfile_password; } if (element.header) { for (key in element.header) { if (!task.additionalHeader[key]) { task.additionalHeader[key] = element.header[key]; } } } logger.debug('the task send to ' + task.url); queue.send(task); } } } var count = 1; var intervalObj; var intervalObjSec; module.exports.stop = function() { logger.debug('Stop BAMPlugin.'); if (intervalObj) { clearInterval(intervalObj); } if (intervalObjSec) { clearInterval(intervalObjSec); } }; if (k8sutil.isICP()) { var controller = require('../tools/icpcontroller'); var event = controller.getEvent(); event.once('conn_ready_on_icp', initOnICP); } else { logger.debug('BAMPlugin.js', 'init', 'pluginConfig.globalEnv 0: ', pluginConfig.globalEnv); init(); logger.debug('Initialized from non-ICP environment.'); intervalObj = setInterval(emitEvent, 10000); intervalObj.unref(); } function emitEvent() { if (initialized) { logger.debug('Emit bam_initialized event. count = ', count, initialized); ready_event.emit('bam_initialized'); if (count > 10) { clearInterval(intervalObj); } count++; } } function initOnICP(returnCode) { init(); logger.debug('Initialized from ICP environment.', returnCode); intervalObj = setInterval(emitEvent, 10000); intervalObj.unref(); } function init() { logger.debug('process.env.VCAP_APPLICATION', process.env.VCAP_APPLICATION); logger.debug('BAMPlugin.js', 'init', 'pluginConfig.globalEnv 1: ', pluginConfig.globalEnv); rcutil.init(); logger.debug('BAMPlugin.js', 'init', 'pluginConfig.globalEnv 2: ', pluginConfig.globalEnv); setAppTenantID(); logger.debug('BAMPlugin.js', 'init', 'pluginConfig.globalEnv 3: ', pluginConfig.globalEnv); parseIngressURL(); logger.debug('BAMPlugin.js', 'init', 'pluginConfig.globalEnv 4: ', pluginConfig.globalEnv); setServerConn(); logger.debug('BAMPlugin.js', 'init', 'pluginConfig.globalEnv 5: ', pluginConfig.globalEnv); logger.debug('BAMPlugin.js', 'init', 'pluginConfig.globalEnv 6: ', pluginConfig.globalEnv); setServerConnGE(); } function setServerConnGE() { logger.debug('BAMPlugin.js', 'setServerConnGE', 'Retrive server configuration from global.environment.', process.env.IBM_APM_SERVER_INGRESS_URL); if (process.env.IBM_APM_SERVER_INGRESS_URL) { return; } logger.debug('BAMPlugin.js', 'setServerConnGE', 'Retrive server configuration from global.environment.', pluginConfig.globalEnv); let bamurl = process.env.UA_LWDC_LISTENER_URL ? process.env.UA_LWDC_LISTENER_URL : pluginConfig.globalEnv.IBM_APM_SERVER_INGRESS_URL; var me = '&origin=' + global.KNJ_BAM_ORIGINID; if (bamurl && isURL(bamurl)) { bamurl = bamurl.trim(); bamconns[bamurl] = { server_url: bamurl, rms_resource_url: bamurl + WF_SVCS_CONN.RESOURCEMGMT_SERVICE_BASE_PATH + '/resources', rms_provider_url: bamurl + WF_SVCS_CONN.RESOURCEMGMT_SERVICE_BASE_PATH + '/providers', agentmgmt_base_url: bamurl + WF_SVCS_CONN.AGENTMGMT_SERVICE_BASE_PATH, rms_metadata_url: bamurl + WF_SVCS_CONN.RESOURCEMGMT_SERVICE_BASE_PATH + '/metadata', metric_url: bamurl + WF_SVCS_CONN.METRICS_SERVICE_BASE_PATH + '/data', ui_url: bamurl + WF_SVCS_CONN.AGENTMGMT_SERVICE_BASE_PATH + '/providers/uiconfiguration/bulk', tt_url: bamurl + aarPath + me, deepdive_url: bamurl + adrPath + me, dc_url: bamurl + providerPath + me }; if (pluginConfig.globalEnv.ICAM_KEYFILE) { if (!pluginConfig.globalEnv.ICAM_KEYFILE.toLowerCase().endsWith('.p12')) { pluginConfig.globalEnv.ICAM_KEYFILE = pluginConfig.globalEnv.ICAM_KEYFILE + '.p12'; } bamconns[bamurl].keyfile = pluginConfig.globalEnv.ICAM_KEYFILE; try { let buff; if (fs.existsSync(pluginConfig.globalEnv.ICAM_KEYFILE)) { buff = fs.readFileSync(pluginConfig.globalEnv.ICAM_KEYFILE); } else { buff = fs.readFileSync(__dirname + '/../../' + pluginConfig.globalEnv.ICAM_KEYFILE); } bamconns[bamurl].pfx = buff; bamconns[bamurl].ca = buff; bamconns[bamurl].requestCert = true; } catch (error) { logger.error('failed to read keyfile from local: ' + error); } } if (pluginConfig.globalEnv.ICAM_KEYFILE_PSWD) { bamconns[bamurl].keyfile_password = pluginConfig.globalEnv.ICAM_KEYFILE_PSWD; } bamconns[bamurl].header = { 'X-TenantId': pluginConfig.globalEnv.APM_TENANT_ID ? pluginConfig.globalEnv.APM_TENANT_ID.trim() : tId, 'BM-ApplicationId': app_guid, 'Content-Type': 'application/json', Accept: 'application/json', 'User-Agent': 'NodeDC' }; if (pluginConfig.globalEnv.IBM_APM_ACCESS_TOKEN) { bamconns[bamurl].header['Authorization'] = 'Bearer ' + pluginConfig.globalEnv.IBM_APM_ACCESS_TOKEN; } initialized = true; logger.debug('BAMPlugin.js', 'setServerConnGE', bamconns[bamurl]); } } function setServerConn() { logger.debug('BAMPlugin.js', 'setServerConn', 'Retrive server configuration from plugin configure file.'); var https = require('https'); var http = require('http'); if (pluginConfig.plugins['BAM'] && pluginConfig.plugins['BAM'].connections) { var connections = pluginConfig.plugins['BAM'].connections; for (var index = 0; index < connections.length; index++) { var element = connections[index]; if (!pluginConfig.isValidConn(element)) continue; var me = '&origin=' + global.KNJ_BAM_ORIGINID; bamconns[element.server_url] = { server_url: element.server_url, rms_resource_url: element.server_url + WF_SVCS_CONN.RESOURCEMGMT_SERVICE_BASE_PATH + '/resources', rms_provider_url: element.server_url + WF_SVCS_CONN.RESOURCEMGMT_SERVICE_BASE_PATH + '/providers', rms_metadata_url: element.server_url + WF_SVCS_CONN.RESOURCEMGMT_SERVICE_BASE_PATH + '/metadata', metric_url: element.server_url + WF_SVCS_CONN.METRICS_SERVICE_BASE_PATH + '/data', ui_url: element.server_url + WF_SVCS_CONN.AGENTMGMT_SERVICE_BASE_PATH + '/providers/uiconfiguration/bulk', tt_url: element.server_url + aarPath + me, deepdive_url: element.server_url + adrPath + me, dc_url: element.server_url + providerPath + me, keyfile: element.keyfile, keyfile_password: element.keyfile_password, proxy: element.proxy }; initialized = true; // ready to send payload if (element.keyfile) { try { let buff = fs.readFileSync(__dirname + '/../../' + element.keyfile); bamconns[element.server_url].pfx = buff; bamconns[element.server_url].ca = buff; bamconns[element.server_url].requestCert = true; } catch (error) { logger.error('failed to read keyfile from local: ' + error); } } if (element.keyfile_url) { var keyfile_options = url.parse(element.keyfile_url); rcutil.tlsFix8(keyfile_options); var sendmethod = (keyfile_options.protocol === 'http:' ? http : https); var bamconn = bamconns[element.server_url]; let req = sendmethod.request(keyfile_options, function(res) { res.on('data', function(d) { if (!bamconn.pfx) { bamconn.pfx = d; } else { bamconn.pfx = Buffer.concat([bamconn.pfx, d], bamconn.pfx.length + d.length); } bamconn.ca = bamconn.pfx; bamconn.requestCert = true; bamconn.done = true; }); res.on('error', function(error) { logger.error('JsonSender response error: ', error); }); }); req.on('error', function(error) { logger.error('JsonSender request error: ', error); }); req.end(); } if (element.keyfile_password) { bamconns[element.server_url].passphrase = element.keyfile_password; } if (element.token) { bamconns[element.server_url].header = { 'X-TenantId': tId, Authorization: 'Bearer ' + element.token, 'BM-ApplicationId': app_guid, 'Content-Type': 'application/json', Accept: 'application/json', 'User-Agent': 'NodeDC' }; } } } } function parseIngressURL() { logger.debug('Set the ingress url.', process.env.IBM_APM_SERVER_INGRESS_URL, process.env.IBM_APM_ACCESS_TOKEN); if (process.env.IBM_APM_SERVER_INGRESS_URL) { process.env.IBAM_INGRESS_URL = rcutil.decBase64Ex(process.env.IBM_APM_SERVER_INGRESS_URL); } if (k8sutil.isICP() && !process.env.IBAM_INGRESS_URL && k8sutil.getIngressUrl()) { process.env.IBAM_INGRESS_URL = k8sutil.getIngressUrl(); } if (process.env.IBM_APM_ACCESS_TOKEN) { process.env.IBAM_TOKEN = rcutil.decBase64Ex(process.env.IBM_APM_ACCESS_TOKEN); } if (k8sutil.isICP() && !process.env.IBAM_INGRESS_URL && !process.env.UA_LWDC_LISTENER_URL) { intervalObjSec = setInterval(pollMountSecret, 60000); intervalObjSec.unref(); } if (!process.env.IBAM_INGRESS_URL && process.env.UA_LWDC_LISTENER_URL) { process.env.IBAM_INGRESS_URL = process.env.UA_LWDC_LISTENER_URL; } if (process.env.IBAM_INGRESS_URL) { // check env IBAM_INGRESS_URL & IBAM_TOKEN, if these env are setted, // then send the data to it var header = { 'X-TenantId': tId, 'BM-ApplicationId': app_guid, 'Content-Type': 'application/json', Accept: 'application/json', 'User-Agent': 'NodeDC' }; if (process.env.IBAM_TOKEN) { header.Authorization = 'Bearer ' + process.env.IBAM_TOKEN; } IBAM_options = { addtionalOptions: {}, headers: header }; if (process.env.ICAM_KEYFILE) { let keyfile = rcutil.decBase64Ex(process.env.ICAM_KEYFILE); if (!keyfile.toLowerCase().endsWith('.p12')) { keyfile = keyfile + '.p12'; } try { let buff; if (fs.existsSync(keyfile)) { buff = fs.readFileSync(keyfile); } else { buff = fs.readFileSync(__dirname + '/../../' + keyfile); } IBAM_options.addtionalOptions.pfx = buff; IBAM_options.addtionalOptions.ca = buff; IBAM_options.addtionalOptions.requestCert = true; } catch (error) { logger.error('failed to read keyfile from local: ' + error); } } if (process.env.ICAM_KEYFILE_PSWD) { let keyfile_pwd = rcutil.decBase64Ex(process.env.ICAM_KEYFILE_PSWD); IBAM_options.addtionalOptions.passphrase = keyfile_pwd; } initialized = true; // ready to send payload } } function setAppTenantID() { app_guid = rcutil.getAppGuid(); if (process.env.VCAP_APPLICATION) { var vcapApplication = JSON.parse(process.env.VCAP_APPLICATION); app_guid = vcapApplication['application_id']; if (!app_guid) { logger.error('Failed to get application_id from VCAP_APPLICATION. '); return; } // tId = vcapApplication['space_id']; // if (!tId) { // logger.error('Failed to get space_id from VCAP_APPLICATION. '); // return; // } logger.info('The application_id from VCAP_APPLICATION is ', app_guid); logger.info('The tenantID/space_id from VCAP_APPLICATION is ', tId); } else { logger.debug(' VCAP_APPLICATION env variable is not found.'); } } function dumpResourceIDs4Test(type, payload) { if (process.env.DUMP_PROPERTIES_AVT) { let item = null; if (type === 'dc:' || type.substr(0, 'resources'.length) === 'resources') { if (payload.hasOwnProperty('uid') && payload.hasOwnProperty('entityTypes')) { let entityTypes = payload.entityTypes; if (entityTypes.length > 0) { item = payload.uid + ':' + payload.entityTypes[0] + '\n'; let dumpBuffer = Buffer.from(item); fs.writeFile('bam-avt-resource-list.properties', dumpBuffer, {flag: 'a'}, function(err) { if (err) { logger.debug('Failed to dump resource id'); } logger.debug('The resource id has been saved!'); }); } } } } } function isURL(turl) { if (turl) { return turl.toLowerCase().startsWith('http'); } return false; } function pollMountSecret() { logger.debug('in BAMPlugin pollMountSecret', mountPathGlobalEnv); // if (process.env.IBAM_INGRESS_URL) { // clearInterval(intervalObjSec); // return; // } let globalEnv; if (fs.existsSync(mountPathGlobalEnv)) { let globalCont = fs.readFileSync(mountPathGlobalEnv); globalEnv = properties.parse(globalCont.toString(), { separators: '=', comments: [';', '@', '#'] }); for (const key in globalEnv) { if (globalEnv.hasOwnProperty(key)) { const element = globalEnv[key]; if (element.indexOf('@{') === 0) { globalEnv[key] = undefined; continue; } if (rcutil.isBase64(element)) { globalEnv[key] = rcutil.decBase64(element); } } } } else { return; } logger.debug('Poll the server configure from mount folder:', mountPathGlobalEnv, globalEnv); if (globalEnv.AGENTMGMT_SERVICE_BASE_PATH) { WF_SVCS_CONN.AGENTMGMT_SERVICE_BASE_PATH = globalEnv.AGENTMGMT_SERVICE_BASE_PATH; } if (globalEnv.METRICS_SERVICE_BASE_PATH) { WF_SVCS_CONN.METRICS_SERVICE_BASE_PATH = globalEnv.METRICS_SERVICE_BASE_PATH; } if (globalEnv.RESOURCEMGMT_SERVICE_BASE_PATH) { WF_SVCS_CONN.RESOURCEMGMT_SERVICE_BASE_PATH = globalEnv.RESOURCEMGMT_SERVICE_BASE_PATH; } if (globalEnv.IBM_APM_SERVER_INGRESS_URL) { if (process.env.IBAM_INGRESS_URL && process.env.IBAM_INGRESS_URL === globalEnv.IBM_APM_SERVER_INGRESS_URL) { return; } process.env.IBAM_INGRESS_URL = globalEnv.IBM_APM_SERVER_INGRESS_URL; var header = { 'X-TenantId': tId, 'BM-ApplicationId': app_guid, 'Content-Type': 'application/json', Accept: 'application/json', 'User-Agent': 'NodeDC' }; if (globalEnv.APM_TENANT_ID) { header['X-TenantId'] = globalEnv.APM_TENANT_ID; tId = globalEnv.APM_TENANT_ID; process.env.APM_TENANT_ID = tId; } if (globalEnv.IBM_APM_ACCESS_TOKEN) { header['Authorization'] = 'Bearer ' + globalEnv.IBM_APM_ACCESS_TOKEN; } IBAM_options = { addtionalOptions: {}, headers: header }; if (globalEnv.ICAM_KEYFILE) { if (!globalEnv.ICAM_KEYFILE.toLowerCase().endsWith('.p12')) { globalEnv.ICAM_KEYFILE = globalEnv.ICAM_KEYFILE + '.p12'; } try { let buff; if (fs.existsSync(globalEnv.ICAM_KEYFILE)) { buff = fs.readFileSync(globalEnv.ICAM_KEYFILE); } else if (fs.existsSync(path.join(MOUNT_PATH, globalEnv.ICAM_KEYFILE))) { buff = fs.readFileSync(path.join(MOUNT_PATH, globalEnv.ICAM_KEYFILE)); } else { buff = fs.readFileSync(__dirname + '/../../' + globalEnv.ICAM_KEYFILE); } IBAM_options.addtionalOptions.pfx = buff; IBAM_options.addtionalOptions.ca = buff; IBAM_options.addtionalOptions.requestCert = true; } catch (error) { logger.error('failed to read keyfile from local: ' + error); } } if (globalEnv.ICAM_KEYFILE_PSWD) { IBAM_options.addtionalOptions.passphrase = globalEnv.ICAM_KEYFILE_PSWD; } if (globalEnv.JAEGER_ENDPOINT_ZIPKIN) { if (process.env.JAEGER_ENDPOINT_ZIPKIN && process.env.JAEGER_ENDPOINT_ZIPKIN === globalEnv.JAEGER_ENDPOINT_ZIPKIN) { return; } process.env.JAEGER_ENDPOINT_ZIPKIN = globalEnv.JAEGER_ENDPOINT_ZIPKIN; if (process.env.JAEGER_ENDPOINT_ZIPKIN.startsWith('https')) { global.JAEGER_PFX = IBAM_options.addtionalOptions.pfx; global.JAEGER_PASSPHASE = IBAM_options.addtionalOptions.passphrase; } } if (globalEnv.JAEGER_ENDPOINT_ZIPKIN_V2) { if (process.env.JAEGER_ENDPOINT_ZIPKIN_V2 && process.env.JAEGER_ENDPOINT_ZIPKIN_V2 === globalEnv.JAEGER_ENDPOINT_ZIPKIN_V2) { return; } process.env.JAEGER_ENDPOINT_ZIPKIN_V2 = globalEnv.JAEGER_ENDPOINT_ZIPKIN_V2; if (process.env.JAEGER_ENDPOINT_ZIPKIN_V2.startsWith('https')) { global.JAEGER_PFX = IBAM_options.addtionalOptions.pfx; global.JAEGER_PASSPHASE = IBAM_options.addtionalOptions.passphrase; } } initialized = true; // ready to send payload // clearInterval(intervalObjSec); } } function sendMetadata() { logger.debug('BAMPlugin.js', 'sendMetadata'); if (!queue) { queue = sender.getQueue('bam'); } let taskb = { type: 'metadata:', additionalHeader: { 'X-TenantId': tId } }; try { let mdruntime = require('../../etc/ResourceTypes/nodeApplicationRuntime_1.5_ResourceType.json'); taskb['payload'] = JSON.stringify(mdruntime); taskb.callback = function(err, res) { if (err) { return; } if (res && (res.statusCode < 400 || res.statusCode === 409)) { global.META_ISSEND = true; } }; queue.addTask(taskb); } catch (e) { logger.error(e); } } function postAMUI() { logger.debug('BAMPlugin.js', 'postAMUI'); if (!queue) { queue = sender.getQueue('bam'); } let task = { type: 'amui:', additionalHeader: {} }; task.additionalHeader['Content-Type'] = 'application/zip'; task.additionalHeader['X-TenantId'] = tId; let amui = path.join(__dirname, '/../../etc/AMUI/AMUI_kdn.zip'); task['payload'] = amui; task.callback = function(err, res) { if (err) { return; } if (res && (res.statusCode < 400 || res.statusCode === 409)) { global.UI_ISSEND = true; } }; queue.addTask(task); // queue.send(task); }