Name
sn_itom_integ_app.IntegrationLaunchpadApi
Description
Integration launchpad APIs to return JSON based response to be consumed by UI.
Script
var IntegrationLaunchpadApi = Class.create();
IntegrationLaunchpadApi.prototype = {
TABLE_HOB_DEFINITION_DETAILS: "sn_em_ai_hob_definition_details",
UNKNOWN: "Unknown",
SUCCESS: "success",
ERROR: "error",
TILE_TYPE_INDIVIDUAL: "individual",
TILE_TYPE_PARENT: "parent",
TILE_TYPE_CHILD: "child",
initialize: function() {
this.mappingDict = {
"reference_table_instance": {
"em_connector_definition": "em_connector_instance",
"sn_em_connector_listener": "sn_em_connector_push_instance"
},
"reference_id_field": {
"em_connector_instance": "connector_definition",
"sn_em_connector_push_instance": "push_connector_definition"
}
};
},
getLandingPagePayload: function() {
var result;
try {
result = this._generateResponse(this.SUCCESS, this._buildLandingPageData(), null);
} catch (e) {
var msg = gs.getMessage("Server error while generating landing page response due to {0}", [e.toString()]);
gs.error("Error: " + msg);
result = this._generateResponse(this.ERROR, null, msg);
}
return result;
},
getInstructionByHobDefinition: function(hobDefinitionId) {
var result;
try {
result = this._generateResponse(this.SUCCESS, this._fetchInstructions(hobDefinitionId), null);
} catch (e) {
var msg = gs.getMessage("Server error while fetching instructions by id '{0}' due to {1} ", [hobDefinitionId, e.toString()]);
gs.error("Error: " + msg);
result = this._generateResponse(this.ERROR, " ", msg);
}
return result;
},
getMidServerWithAtleastOneEventListener: function() {
var responseObject = [];
var gr = new GlideRecord('ecc_agent');
gr.addQuery('status', 'Up');
gr.addQuery('validated', true);
var gr1 = gr.addJoinQuery('ecc_agent_ext_context_event', 'sys_id', 'executing_on');
gr1.addCondition('status','Started');
gr.query();
while(gr.next()) {
var data = {};
data.id = gr.getValue('sys_id');
data.name = gr.getValue('name');
responseObject.push(data);
}
return responseObject;
},
_fetchInstructions: function(hobDefinitionId) {
var hobDefinitionGr = new GlideRecord(this.TABLE_HOB_DEFINITION_DETAILS);
if (hobDefinitionGr.get(hobDefinitionId))
return hobDefinitionGr.getValue('instructions');
throw new Error("Invalid health onboarding defination id - " + hobDefinitionId);
},
_buildLandingPageData: function() {
var data = {};
var tiles = this._buildTiles();
data['count'] = tiles.length;
data['tiles'] = tiles;
data['mappings'] = this.mappingDict;
return data;
},
_buildTiles: function() {
var groupDetailsMap = this._getGroupDetails();
var groupConnectorMap = groupDetailsMap['groupConnectorMap'];
var groupImageMap = groupDetailsMap['groupImageMap'];
var tiles = [];
// Connectors with empty groupId will be represented in separate tile.
this._handleNonGroupedConenctors(tiles, groupConnectorMap[this.UNKNOWN], this.TILE_TYPE_INDIVIDUAL);
delete groupConnectorMap[this.UNKNOWN];
for (var groupId in groupConnectorMap) {
var connectorList = groupConnectorMap[groupId];
if (connectorList && connectorList.length) {
var image = groupImageMap[groupId];
image = image ? image : connectorList[0]['image'];
tiles.push(this._buildGroupDictionary(groupId, image, connectorList, this._isAnyOfTheConnectorPopular(connectorList), this.TILE_TYPE_PARENT));
}
// Add child as separate tile
this._handleNonGroupedConenctors(tiles, connectorList, this.TILE_TYPE_CHILD);
}
return tiles;
},
_getGroupDetails: function() {
var groupConnectorMap = {};
var groupImageMap = {};
// default group
groupConnectorMap[this.UNKNOWN] = [];
var hobGr = this._getHOBDefinationGr();
while (hobGr.next()) {
var groupId = this.UNKNOWN;
var groupImage = null;
if (hobGr.group) {
groupId = hobGr.group.name;
groupImage = hobGr.group.image ? "" + hobGr.group.image.name : null;
// initialize connector list for group
if (!groupConnectorMap[groupId])
groupConnectorMap[groupId] = [];
// set image when present and not null
if (!groupImageMap[groupId] && groupImage)
groupImageMap[groupId] = groupImage;
}
var connectorDetails = {};
connectorDetails['name'] = hobGr.getValue('title');
connectorDetails['sys_id'] = hobGr.getValue('sys_id');
connectorDetails['active'] = this._getBooleanValue(hobGr.getDisplayValue('active'));
connectorDetails['category_display_value'] = hobGr.getDisplayValue('category');
connectorDetails['category'] = hobGr.getValue('category');
connectorDetails['type_display_value'] = hobGr.getDisplayValue('type');
connectorDetails['type'] = hobGr.getValue('type');
connectorDetails['reference_table'] = hobGr.getValue('reference_table');
connectorDetails['reference_id'] = hobGr.getValue('reference_id');
connectorDetails['image'] = hobGr.getDisplayValue('image');
connectorDetails['source'] = hobGr.getValue('source');
connectorDetails['is_popular'] = this._getBooleanValue(hobGr.getDisplayValue('is_popular'));
// if source is null, set it to empty string
connectorDetails['source'] = connectorDetails['source'] ? connectorDetails['source'] : "";
groupConnectorMap[groupId].push(connectorDetails);
}
return {
"groupConnectorMap": groupConnectorMap,
"groupImageMap": groupImageMap
};
},
_handleNonGroupedConenctors: function(tiles, connectorList, tileType) {
if (connectorList && connectorList.length) {
for (var i in connectorList) {
var groupId = connectorList[i]['name'];
var image = connectorList[i]['image'];
var isPopular = connectorList[i]['is_popular'];
tiles.push(this._buildGroupDictionary(groupId, image, [connectorList[i]], isPopular, tileType));
}
}
},
_buildGroupDictionary: function(groupId, image, connectorList, isPopular, tileType) {
var groupDict = {};
groupDict['group_id'] = groupId;
groupDict['image'] = image;
groupDict['is_popular'] = isPopular;
groupDict['tile_type'] = tileType;
groupDict['connector_count'] = connectorList.length;
groupDict['connectors'] = connectorList;
return groupDict;
},
_isAnyOfTheConnectorPopular: function(connectorList) {
if (connectorList && connectorList.length) {
for (var i in connectorList) {
if (connectorList[i]['is_popular'])
return true;
}
}
return false;
},
_getHOBDefinationGr: function() {
var hobDefinationGr = new GlideRecord(this.TABLE_HOB_DEFINITION_DETAILS);
hobDefinationGr.addActiveQuery();
// include only integrations that are set to visible on launchpad
hobDefinationGr.addQuery("visible_in_launchpad", true);
// For now, we will not be supporting "Bi Directional Connector" types so, exclude these connector types from the result
// TODO: Remove this filter condition when these connector types are to be supported.
// note: we don't support "Mid Push Connector" before Vancouver so we should return this type only for Vancouver onwards.
var gr_sys_properties = new GlideRecord('sys_properties');
var midPushConnectorSupport = gr_sys_properties.get('name', 'evt_mgmt.mid_pushconnector_instance_availability') && gr_sys_properties.getValue('value');
midPushConnectorSupport == true || midPushConnectorSupport == 'true'
? hobDefinationGr.addEncodedQuery("typeNOT IN3^ORtype=")
: hobDefinationGr.addEncodedQuery("typeNOT IN3,5^ORtype=");
hobDefinationGr.orderBy('category');
hobDefinationGr.query();
return hobDefinationGr;
},
_generateResponse: function(status, data, message) {
var result = {};
result['status'] = status;
result['data'] = data ? data : {};
if (message)
result['error_message'] = message;
return result;
},
_getBooleanValue: function(strValue) {
return strValue == "true";
},
type: 'IntegrationLaunchpadApi'
};
Sys ID
e0a8720943082110a86b78114bb8f295