Name
sn_sow_inc.SOWRemedialActionPlaybookUtil
Description
No description available
Script
var SOWRemedialActionPlaybookUtil = Class.create();
SOWRemedialActionPlaybookUtil.prototype = {
initialize: function(parentRecordTable, parentRecordId) {
this.parentRecordTable = parentRecordTable;
this.parentRecordId = parentRecordId;
this.origin = new sn_sow.SOWInvestigateConfig().SERVICE_OPERATIONS_WORKSPACE_ORIGIN_RECORD;
this.currentQuery = 'stateINnew,in_progress';
this.historyQuery = 'stateINcompleted,failed,canceled';
this.HIGHLIGHTED_STATE_CONFIG = {
'new': {
'color': 'purple',
'icon': 'presence-fill',
'variant': 'tertiary'
},
'in_progress': {
'color': 'blue',
'icon': 'circle-semi-check-fill',
'variant': 'tertiary'
},
'completed': {
'color': 'positive',
'icon': 'check-fill',
'variant': 'tertiary'
},
'failed': {
'color': 'gray',
'icon': 'ban-outline',
'variant': 'secondary'
},
'canceled': {
'color': 'low',
'icon': 'close-fill',
'variant': 'tertiary'
}
};
},
TABLES: {
REMEDIAL_ACTION: "sn_reacf_remedial_action",
PLAYBOOK_CONTEXT: "sys_pd_context",
PLAYBOOK_ACTIVITY_CONTEXT: "sys_pd_activity_context",
ACTION_EXECUTION: "sn_reacf_remedial_action_execution",
CONFIGURATION_ITEM: "cmdb_ci",
SN_REACF_REMEDIAL_ACTION_PARAMETER: "sn_reacf_remedial_action_parameter"
},
TAB_LABELS: {
'Current': gs.getMessage('Current'),
'History': gs.getMessage('History')
},
getRecord: function(table, sysId) {
var gr = new GlideRecord(table);
if (gr.get(sysId))
return gr;
},
getActionExcecutionRecordsAggregate: function(type) {
var ga = new GlideAggregate(this.TABLES.ACTION_EXECUTION);
ga.addQuery('parent_record_table', this.parentRecordTable);
ga.addQuery('parent_record_id', this.parentRecordId);
ga.addQuery('origin', this.origin);
if (type == 'Current')
ga.addEncodedQuery(this.currentQuery);
else
ga.addEncodedQuery(this.historyQuery);
ga.addAggregate('COUNT', 'target_record_id');
ga.query();
return ga;
},
getActionExcecutionRecords: function(type, query) {
var gr = new GlideRecord(this.TABLES.ACTION_EXECUTION);
gr.addQuery('parent_record_table', this.parentRecordTable);
gr.addQuery('parent_record_id', this.parentRecordId);
gr.addQuery('origin', this.origin);
if (!gs.nil(query))
gr.addEncodedQuery(query);
if (type == 'Current')
gr.addEncodedQuery(this.currentQuery);
else
gr.addEncodedQuery(this.historyQuery);
gr.orderByDesc('sys_created_on');
gr.query();
return gr;
},
getPlaybookGrFromInputRecord: function(inputRecord) {
var gr = new GlideRecord(this.TABLES.PLAYBOOK_CONTEXT);
gr.addQuery('input_record', inputRecord);
gr.setLimit(1);
gr.query();
return gr;
},
getActivityGrFromPlaybookContext: function(playbookGr, query) {
var gr = new GlideRecord(this.TABLES.PLAYBOOK_ACTIVITY_CONTEXT);
gr.addQuery('context', playbookGr);
if (!gs.nil(query))
gr.addEncodedQuery(query);
gr.query();
return gr;
},
getEmptyState: function(type) {
var obj = {};
if (type == 'Current') {
obj['emptyStateHeading'] = {
"label": gs.getMessage('Select a remedial action to start'),
"level": 1
};
obj['emptyStateContent'] = gs.getMessage('From the Investigate tab, select a remedial action to start its playbook.');
obj['emptyStateIllustration'] = 'first-time-user';
} else {
obj['emptyStateHeading'] = {
"label": gs.getMessage('No completed remedial actions yet'),
"level": 1
};
obj['emptyStateIllustration'] = 'no-activities';
}
return obj;
},
getDataForPlaybook: function(type) {
var array = {};
array['label'] = this.TAB_LABELS[type] ? this.TAB_LABELS[type] : type;
var ga = this.getActionExcecutionRecordsAggregate(type);
var count = ga.getRowCount();
if (count == 0) {
array['hideEmpty'] = false;
array['hideTabs'] = true;
array['emptyState'] = this.getEmptyState(type);
} else {
var cardCount = 0;
array['hideTabs'] = false;
array['hideEmpty'] = true;
array['hidePlaybook'] = true;
var content = [];
content = this.getActionExecutionsDataForPlaybook(ga, type);
for (var i = 0; i < content.length; i++)
cardCount += content[i]['actionCount'];
array['content'] = content;
array['count'] = cardCount;
}
return array;
},
getActionExecutionsDataForPlaybook: function(ga, type) {
var content = [];
while (ga.next()) {
var obj = {};
var ciId = ga.getValue('target_record_id');
var ciGr = this.getRecord(this.TABLES.CONFIGURATION_ITEM, ciId);
var ciName = ciGr.getDisplayValue('name');
obj['ci_sys_id'] = ciId;
obj['ci_name'] = ciName;
obj['accordion'] = this.getAccordionObj([ciGr.getDisplayValue('sys_class_name'), ': ', ciName].join(''));
obj['action'] = this.getActionsByCI(type, ciId);
obj['actionCount'] = obj['action'].length;
if (Object.keys(obj).length > 0)
content.push(obj);
}
return content;
},
getAccordionObj: function(label) {
var accordion = {
"variant": "primary",
"weight": "normal",
"size": "md",
'label': label
};
return accordion;
},
getTime: function(type, playbookGr) {
var labelValue = {};
if (type == 'Start') {
labelValue['label'] = gs.getMessage('Start time');
labelValue['value'] = {
"type": "string",
"value": playbookGr.getDisplayValue('sys_created_on')
};
} else {
var playbookActivityGr = this.getActivityGrFromPlaybookContext(playbookGr.getUniqueValue(), 'state!=PENDING^nameLIKEremediate$end');
if (playbookActivityGr.next()) {
labelValue['label'] = gs.getMessage('End time');
labelValue['value'] = {
"type": "string",
"value": playbookActivityGr.getDisplayValue('sys_updated_on')
};
}
}
return labelValue;
},
getRemedialActionParams: function(execGr) {
var params = (execGr.remedial_action_parameters);
var labelParams = [];
var labelMap = {};
var remedialActionParamGr = new GlideRecord(this.TABLES.SN_REACF_REMEDIAL_ACTION_PARAMETER);
remedialActionParamGr.addQuery("model", execGr.getValue("remedial_action"));
remedialActionParamGr.query();
while (remedialActionParamGr.next()) {
labelMap[remedialActionParamGr.getValue("element")] = remedialActionParamGr.getDisplayValue("label");
}
for (var param in params) {
if (param != 'sys_meta' && param != 'sys_id' && !gs.nil(params[param])) {
var labelValue = {};
labelValue['label'] = labelMap[param];
labelValue['value'] = {
"type": "string",
"value": params[param].getDisplayValue()
};
labelParams.push(labelValue);
}
}
return labelParams;
},
getActionsByCI: function(type, ci) {
var action = [];
var gr = this.getActionExcecutionRecords(type, 'target_record_id=' + ci);
while (gr.next()) {
var obj = {};
obj['action_name'] = gr.getDisplayValue('remedial_action');
obj['sys_id'] = gr.getUniqueValue();
var playbookGr = this.getPlaybookGrFromInputRecord(gr.getUniqueValue());
if (playbookGr.next()) {
var state = gr.getValue('state');
obj['state'] = gr.getDisplayValue('state');
if (!gs.nil(this.HIGHLIGHTED_STATE_CONFIG[state])) {
obj['color'] = this.HIGHLIGHTED_STATE_CONFIG[state]['color'];
obj['icon'] = this.HIGHLIGHTED_STATE_CONFIG[state]['icon'];
obj['variant'] = this.HIGHLIGHTED_STATE_CONFIG[state]['variant'];
}
obj['label_value_pair'] = this.getRemedialActionParams(gr);
obj['label_value_pair'].push(this.getTime('Start', playbookGr));
action.push(obj);
if (state == 'COMPLETE' || state == 'ERROR' || state == 'CANCELLED') {
obj['label_value_pair'].push(this.getTime('End', playbookGr));
}
}
}
return action;
},
type: 'SOWRemedialActionPlaybookUtil'
};
Sys ID
cae0a5ad77152110583f78dabd5a9903