7.5.4 Sample plugin
Following is a sample plug-in when managing the management tool A by the Intelligent Integrated Management Base.
/* * Copyright (C) 2018, Hitachi, Ltd. * Copyright (C) 2018, Hitachi Solutions, Ltd. * Licensed Material of Hitachi, Ltd. * Licensed Material of Hitachi Solutions, Ltd. */ // Component name of the management tool A const TOOLA_COMPONENT_NAME = "/HITACHI/TOOLA"; // JavaScript name of the management tool A const JS_NAME = "toola"; // The type of SID for representing the SID related to host const TYPE_SID_HOST = "HOST"; // The type of SID for representing the SID related to the server of the management tool A const TYPE_SID_TOOLA_M = "ToolA-M"; // The type of SID for representing the SID related to the agent of the management tool A const TYPE_SID_TOOLA_A = "ToolA-A"; // The type of SID for representing the SID related to the management tool A - Manager const TYPE_SID_TOOLA_MGR = "TOOLAMGR"; // The type of SID for representing the SID related to the management tool A - Agent const TYPE_SID_TOOLA_AGT = "TOOLAAGT"; // The type of SID for representing the SID related to the platform const TYPE_SID_PLATFORM = "PLATFORM"; // The type of SID for representing the SID related to the user program const TYPE_SID_UP = "UP"; module.exports = { /** * Convert ToolA configuration information to JSON format. * * @param {Object} args * args = { * hostname: string, // Acquired host name * component: string, // Target component("/HITACHI/TOOLA") * data: string, // Result of execution of adapter command(UTF-8) (except header) * jp1UserName: string, // JP1 user name * jp1Token: string, // JP1 token * protocolName:string, // Protocol name with adapter command * protocolVersion:string, // Protocol version with adapter command * codeset:string, // Codeset with adapter command * productName:string // Product name with adapter command * setResult:function // Function for normal case * setError:function // Function for error case * } */ __configurationGet: function(args) { logTrace("__configurationGet start"); if (!isValidProductName(args.component)) { var msg = "Componentname (" + String(args.component) + ") is invalid."; logTrace(msg); return; } // Configuration information object in JSON format. var configObj = { "meta": { "timestamp": "" }, "simtData": [] }; try { // adapter command data. var adapterCmdDataObj = parseAdapterCmdData(args.data); // ToolA - Manager host name var mgrHostName = encodeURI(adapterCmdDataObj.hostName); // push SimtData for ToolA - Manager pushSimtDataForManagerHost(configObj.simtData, mgrHostName); // ToolA - Agent host object list var agtHostObjList = getAgentHostObjList(adapterCmdDataObj.baseURL, adapterCmdDataObj.uid, adapterCmdDataObj.pwd); agtHostObjList.forEach(function(agtHostObj) { // push SimtData for ToolA - Agent pushSimtDataForAgentHost(configObj.simtData, mgrHostName, agtHostObj); }); } catch(e) { var msg = "Exception occurs. message=" + e.message; logTrace(msg); args.setError(msg); } configObj.meta.timestamp = (new Date()).toISOString(); args.setResult(JSON.stringify(configObj)); logTrace("__configurationGet end"); }, /** * Generate sid from JP1 event. * * @param {Object} args * args = { * productName: string, // Name of the program that issued the JP1 event. * idBase: number, // Event ID * event: {value: Object} // JP1 event attribute information * } */ __eventGet: function(args) { logTrace("__eventGet start"); if (!isValidProductName(args.productName)) { return; } try { var sid = null; switch (args.idBase) { // generate sid of ToolA - Agent event. case 0x7FFF8000: sid = createToolAAgtSidFromEvent(args.event.value); break; // generate sid of os event. case 0x7FFF8001: sid = createPlatformSidFromEvent(args.event.value); break; // generate sid of user program event. case 0x7FFF8002: sid = createUPSidFromEvent(args.event.value); break; default: logTrace("Unsupported args.idBase=" + args.idBase.toString(16)); break; } if (sid !== null) { logTrace("args.setTargetSid=" + sid); args.setTargetSid(sid); } } catch(e) { var msg = "Exception occurs. message=" + e.message; logTrace(msg); args.setError(msg); } logTrace("__eventGet end"); }, __createLink: function(args) { logTrace("__createLink start"); logTrace("__createLink end"); }, _xxxt: function(args) { logTrace("_xxxt start"); logTrace("_xxxt end"); } }; // if debug is true, output debug message. var isDebug = true; /** * Output log message. * @param {string} msg message */ function logTrace(msg) { jp1Logger.trace(JS_NAME, msg); } /** * Output log message. * @param {string} msg message */ function logDebug(msg) { if (!isDebug) { return; } jp1Logger.trace(JS_NAME, msg); } /** * Return whether product name is valid * @param {string} productName product name * @return {boolean} true if product name is valid */ function isValidProductName(productName) { return (String(productName) === TOOLA_COMPONENT_NAME); } /** * Parse data of adapter command * @param {string} adapterCmdData adapter command data * @return {Object} adapterCmdDataObj * adapterCmdDataObj = { * hostname: string, // Server name * baseURL: string, // base URL for REST API * uid: string, // user id for REST API * pwd: string, // user password for REST API * } */ function parseAdapterCmdData(adapterCmdData) { return JSON.parse(adapterCmdData); } /** * push simtData of ToolA - Manager * @param {Object[]} simtData simt data * @param {string} mgrHostName ToolA-Manager host name */ function pushSimtDataForManagerHost(simtData, mgrHostName) { // create Manager Host SID var mgrHostSid = jp1SimtService.join( jp1SimtService.packHost(TYPE_SID_TOOLA_M, mgrHostName), jp1SimtService.packHost(TYPE_SID_HOST, mgrHostName)); var mgrHostSidValue = { component: TOOLA_COMPONENT_NAME, label: mgrHostName }; simtData.push({ sid: mgrHostSid, value: mgrHostSidValue }); // create Manager SID var mgrSid = jp1SimtService.join( jp1SimtService.packHost(TYPE_SID_TOOLA_M, mgrHostName), jp1SimtService.packHost(TYPE_SID_HOST, mgrHostName), jp1SimtService.pack(TYPE_SID_TOOLA_MGR, "")); var mgrSidValue = { component: TOOLA_COMPONENT_NAME, category: "managementApplications", label: "ToolA - Manager" }; simtData.push({ sid: mgrSid, value: mgrSidValue }); } /** * push simtData of ToolA - Agent * @param {Object[]} simtData simt data * @param {string} mgrHostName ToolA-Manager host name * @param {Object} agtHostObj */ function pushSimtDataForAgentHost(simtData, mgrHostName, agtHostObj) { // ToolA - Agent host name var agtHostName = encodeURI(agtHostObj.hostName); // create Agent Host SID var agtHostSid = jp1SimtService.join( jp1SimtService.packHost(TYPE_SID_TOOLA_M, mgrHostName), jp1SimtService.packHost(TYPE_SID_TOOLA_A, agtHostName), jp1SimtService.packHost(TYPE_SID_HOST, agtHostName)); var agtHostSidValue = { component: TOOLA_COMPONENT_NAME, label: agtHostName }; simtData.push({ sid: agtHostSid, value: agtHostSidValue }); // create Agent SID var agtSid = jp1SimtService.join( jp1SimtService.packHost(TYPE_SID_TOOLA_M, mgrHostName), jp1SimtService.packHost(TYPE_SID_TOOLA_A, agtHostName), jp1SimtService.packHost(TYPE_SID_HOST, agtHostName), jp1SimtService.pack(TYPE_SID_TOOLA_AGT, "")); var agtSidValue = { component: TOOLA_COMPONENT_NAME, category: "managementApplications", label: "ToolA - Agent" }; simtData.push({ sid: agtSid, value: agtSidValue }); // create Platform SID var agtSid = jp1SimtService.join( jp1SimtService.packHost(TYPE_SID_TOOLA_M, mgrHostName), jp1SimtService.packHost(TYPE_SID_TOOLA_A, agtHostName), jp1SimtService.packHost(TYPE_SID_HOST, agtHostName), jp1SimtService.pack(TYPE_SID_PLATFORM, "")); var agtSidValue = { component: TOOLA_COMPONENT_NAME, category: "platform", label: agtHostObj.osName }; simtData.push({ sid: agtSid, value: agtSidValue }); // create UserProgram SID agtHostObj.upList.forEach(function(upName){ var agtSid = jp1SimtService.join( jp1SimtService.packHost(TYPE_SID_TOOLA_M, mgrHostName), jp1SimtService.packHost(TYPE_SID_TOOLA_A, agtHostName), jp1SimtService.packHost(TYPE_SID_HOST, agtHostName), jp1SimtService.pack(TYPE_SID_UP, upName)); var agtSidValue = { component: TOOLA_COMPONENT_NAME, category: "up", // custom categoryId label: upName }; simtData.push({ sid: agtSid, value: agtSidValue }); }); } /** * Get ToolA Agent data from ToolA - Manager * @param {string} baseURL ToolA-Manager host name * @param {string} uid userid for RESTAPI * @param {string} pwd password for RESTAPI * @return {Object[]} agtHostObjList list of agtHostObj * agtHostObj = { * hostName: string, // Server name * osName: string, // OS name * upList: [string] // user program list * } */ function getAgentHostObjList(baseURL, uid, pwd) { var agtHostObjList = []; // make url for authentication var fullUrl = baseURL + "/v1/authentication"; var requestHeaderObj = {"ContentType" : "application/json"}; var requestBody = JSON.stringify({"Username" : uid, "Password" : pwd}); // call authentication REST API logTrace(fullUrl); logDebug(JSON.stringify(requestHeaderObj)); logDebug(requestBody); // var resultObj = jp1Imdd.callRest( // "POST" // , fullUrl // , requestHeaderObj // , requestBody // ); // if (resultObj.response === undefined) { // logTrace(JSON.stringify(resultObj)); // return agtHostObjList; // } var resultObj = { "response": { "body": JSON.stringify({"token": "auth_token"}) } }; // authentication result var bodyObj = JSON.parse(resultObj.response.body); logDebug(JSON.stringify(bodyObj)); // make url for agent configuration fullUrl = baseURL + "/v1/devices/list"; requestHeaderObj = {"ContentType" : "application/json", "X-Authorization" : bodyObj.token}; requestBody = JSON.stringify({"filter": ""}); // call agent configuration REST API logTrace(fullUrl); logDebug(JSON.stringify(requestHeaderObj)); logDebug(requestBody); // resultObj = jp1Imdd.callRest( // "POST" // , fullUrl // , requestHeaderObj // , requestBody // ); // if (resultObj.response === undefined) { // logTrace(JSON.stringify(resultObj)); // return agtHostObjList; // } resultObj = { "response": { "body": JSON.stringify({ "deviceList": [ {"hostName": "hostB", "osName": "Linux", "upList": ["UP-1"]}, {"hostName": "hostC", "osName": "Linux", "upList": ["UP-2"]}, {"hostName": "hostD", "osName": "Windows", "upList": ["UP-3"]}, {"hostName": "hostE", "osName": "Windows", "upList": ["UP-1", "UP-4"]}] }) } }; bodyObj = JSON.parse(resultObj.response.body); logDebug(JSON.stringify(bodyObj)); bodyObj.deviceList.forEach(function(deviceObj) { agtHostObjList.push({ "hostName": deviceObj.hostName, "osName": deviceObj.osName, "upList": deviceObj.upList }); }); return agtHostObjList; } /** * create SID related to the ToolA - Agent from JP1 event * @param {Object} eventValue event value * @return {string} sid */ function createToolAAgtSidFromEvent(eventValue) { var mgrHostName = encodeURI(eventValue["B.SOURCESERVER"]); var agtHostName = encodeURI(eventValue["E.TOOLA_AGTHOST"]); return jp1SimtService.join( jp1SimtService.packHost(TYPE_SID_TOOLA_M, mgrHostName), jp1SimtService.packHost(TYPE_SID_TOOLA_A, agtHostName), jp1SimtService.packHost(TYPE_SID_HOST, agtHostName), jp1SimtService.pack(TYPE_SID_TOOLA_AGT, "")); } /** * create SID related to the platform from JP1 event * @param {Object} eventValue event value * @return {string} sid */ function createPlatformSidFromEvent(eventValue) { var mgrHostName = encodeURI(eventValue["B.SOURCESERVER"]); var agtHostName = encodeURI(eventValue["E.TOOLA_AGTHOST"]); return jp1SimtService.join( jp1SimtService.packHost(TYPE_SID_TOOLA_M, mgrHostName), jp1SimtService.packHost(TYPE_SID_TOOLA_A, agtHostName), jp1SimtService.packHost(TYPE_SID_HOST, agtHostName), jp1SimtService.pack(TYPE_SID_PLATFORM, "")); } /** * create SID related to the user program from JP1 event * @param {Object} eventValue event value * @return {string} sid */ function createUPSidFromEvent(eventValue) { var mgrHostName = encodeURI(eventValue["B.SOURCESERVER"]); var agtHostName = encodeURI(eventValue["E.TOOLA_AGTHOST"]); var upName = encodeURI(eventValue["E.UP_NAME"]); return jp1SimtService.join( jp1SimtService.packHost(TYPE_SID_TOOLA_M, mgrHostName), jp1SimtService.packHost(TYPE_SID_TOOLA_A, agtHostName), jp1SimtService.packHost(TYPE_SID_HOST, agtHostName), jp1SimtService.pack(TYPE_SID_UP, upName)); }