Name

sn_sow.SOWRemedialActionSNC

Description

No description available

Script

var SOWRemedialActionSNC = Class.create();
SOWRemedialActionSNC.prototype = {
  initialize: function() {
      this.investigateConfig = new SOWInvestigateConfig();
      this.remedialAction = new sn_reacf.RemedialActionEngine();
      this.setActionDisplayConfig();
  },

  setActionDisplayConfig: function() {
      var remedialActions = this.investigateConfig.ACTION_MAP;
      var actionDisplayConfig = {};
      actionDisplayConfig[remedialActions['END_PROCESS_SERVER']] = {
          'displayName': gs.getMessage('End process'),
          'displayField': 'name',
      };
      actionDisplayConfig[remedialActions['END_PROCESS_DEVICE']] = {
          'displayName': gs.getMessage('End process'),
          'displayField': 'name',
      };
      actionDisplayConfig[remedialActions['RESTART_SERVICE_SERVER']] = {
          'displayName': gs.getMessage('Restart service'),
          'displayField': 'service_name',
      };
      actionDisplayConfig[remedialActions['RESTART_SERVICE_DEVICE']] = {
          'displayName': gs.getMessage('Restart service'),
          'displayField': 'service_name',
      };
      this.actionDisplayConfig = actionDisplayConfig;
  },

  createExecutionRecords: function(ci, parentTable, parentRecordSysId, remedialAction, actionParameters, selectedData) {

      var remediationResult = [];
      if (gs.nil(ci) || gs.nil(parentTable) || gs.nil(parentRecordSysId) || gs.nil(remedialAction) || gs.nil(actionParameters) || gs.nil(selectedData)) {
          gs.error("one or more mandatory fields are not passed");
          return;
      }

      for (var i = 0; i < selectedData.length; i++) {
          var actionParams = {};

          for (var j = 0; j < actionParameters.length; j++) {
              var actionLabel = actionParameters[j]['label'];
              var value = selectedData[i][actionParameters[j]['field']].value;
              actionParams[actionLabel] = value;
          }

          var response = this.remedialAction.beginRemediation(remedialAction, parentTable, parentRecordSysId, actionParams, ci, this.investigateConfig.SERVICE_OPERATIONS_WORKSPACE_ORIGIN_RECORD);
          var result = {
              'statusCode': response['statusCode'],
              'displayValue': this.getActionExecutionDisplayValue(remedialAction, selectedData[i])
          };
          if (response['statusCode'] == this.remedialAction.STATUS_CODES.DUPLICATE) {
              result['parentTable'] = response.parentTable;
              var parentGr = new GlideRecord(response.parentTable);
              if (parentGr.isValid() && parentGr.get(response.parentRecord)) {
                  result['parentDisplayValue'] = parentGr.getDisplayValue();
              }
              result['isParentCurrent'] = response.parentRecord == parentRecordSysId;
          }
          result['remedialActionUniqueId'] = remedialAction;
          remediationResult.push(result);
      }

      var formattedRemediationResult = this.formatRemediationResult(remediationResult, remedialAction);
      return formattedRemediationResult;
  },

  getActionDisplayConfig: function(remedialAction) {
      return this.actionDisplayConfig[remedialAction];
  },

  getActionExecutionDisplayValue: function(remedialAction, selectedDataRow) {
      var config = this.getActionDisplayConfig(remedialAction);
      var displayField = config && config['displayField'];
      if (displayField && selectedDataRow[displayField]) {
          var displayValueObj = selectedDataRow[displayField];
          return displayValueObj['displayValue'];
      }
  },

  formatRemediationResult: function(remediationResult, remedialAction) {
      if (!remediationResult || remediationResult.length == 0) {
          return;
      }
      var groupedRemediationResult = this.groupRemediationResult(remediationResult);
      var config = this.getActionDisplayConfig(remedialAction);
      if (!config) {
          return;
      }
      var formattedRemediationResult = {};
      if (groupedRemediationResult.hasOwnProperty(this.remedialAction.STATUS_CODES.ERROR)) {
          formattedRemediationResult[this.remedialAction.STATUS_CODES.ERROR] = this.getInfoMessage(groupedRemediationResult[this.remedialAction.STATUS_CODES.ERROR]);
      }
      if (groupedRemediationResult.hasOwnProperty(this.remedialAction.STATUS_CODES.DUPLICATE)) {
          formattedRemediationResult[this.remedialAction.STATUS_CODES.DUPLICATE] = this.getInfoMessage(groupedRemediationResult[this.remedialAction.STATUS_CODES.DUPLICATE]);
      }
      if (groupedRemediationResult.hasOwnProperty(this.remedialAction.STATUS_CODES.SUCCESSFUL)) {
          formattedRemediationResult[this.remedialAction.STATUS_CODES.SUCCESSFUL] = this.getInfoMessage(groupedRemediationResult[this.remedialAction.STATUS_CODES.SUCCESSFUL]);
      }
      return formattedRemediationResult;
  },

  groupRemediationResult: function(remediationResult) {
      var groupedRemediationResult = {};
      for (var i = 0; i < remediationResult.length; i++) {
          var statusCode = remediationResult[i].statusCode;
          if (!groupedRemediationResult.hasOwnProperty(statusCode)) {
              groupedRemediationResult[statusCode] = [];
          }
          groupedRemediationResult[statusCode].push(remediationResult[i]);
      }
      return groupedRemediationResult;
  },

  getInfoMessage: function(results) {
      if (!results || results.length == 0) {
          return;
      }
      var resultsLength = results.length + "";
      var noOfActions = resultsLength.split(".")[0];
      var displayConfig = this.getActionDisplayConfig(results[0]['remedialActionUniqueId']);
      var actionDisplayName = displayConfig && displayConfig['displayName'];
      if (results[0].statusCode == this.remedialAction.STATUS_CODES.SUCCESSFUL) {
          if (noOfActions == 1) {
              var message = gs.getMessage("{0} for {1} has started. You’ll find a new playbook in the side panel.", [actionDisplayName, results[0].displayValue]);
          } else {
              message = "<span>";
              message = message + gs.getMessage("{0} {1} actions have started. You’ll find new playbooks in the side panel.", [noOfActions, actionDisplayName]);
              message = message + "<br>";

              for (i = 0; i < noOfActions; i++) {
                  message = message + "<br>";
                  message = message + gs.getMessage("{0} for {1} has started.", [actionDisplayName, results[i].displayValue]);
              }
              message = message + "</span>";
          }
      } else if (results[0].statusCode == this.remedialAction.STATUS_CODES.DUPLICATE) {
          if (noOfActions == 1) {
              if (results[0].isParentCurrent) {
                  message = gs.getMessage("{0} for {1} was not started. That action is already in progress for the same CI in this {2}", [actionDisplayName, results[0].displayValue, results[0].parentTable]);
              } else {
                  message = gs.getMessage("{0} for {1} was not started. That action is already in progress for the same CI in {2}", [actionDisplayName, results[0].displayValue, results[0].parentDisplayValue]);
              }
          } else {
              message = "<span>";
              message = message + gs.getMessage("{0} {1} actions were not started. Those actions are already in progress for the same CI.", [noOfActions, actionDisplayName]);
              message = message + "<br>";
              for (i = 0; i < noOfActions; i++) {
                  message = message + "<br>";
                  if (results[i].isParentCurrent) {
                      message = message + gs.getMessage("{0} for {1} is already in progress in this {2}", [actionDisplayName, results[i].displayValue, results[i].parentTable]);
                  } else {
                      message = message + gs.getMessage("{0} for {1} is already in progress in {2}", [actionDisplayName, results[i].displayValue, results[i].parentDisplayValue]);
                  }
              }
              message = message + "</span>";
          }
      } else {
          if (noOfActions == 1) {
              message = gs.getMessage("{0} for {1} failed. Please contact your System Administrator.", [actionDisplayName, results[0].displayValue]);
          } else {
              message = "<span>";
              message = message + gs.getMessage("{0} {1} actions have failed. Please contact your System Administrator.", [noOfActions, actionDisplayName]);
              message = message + "<br>";

              for (i = 0; i < noOfActions; i++) {
                  message = message + "<br>";
                  message = message + gs.getMessage("{0} for {1} has failed.", [actionDisplayName, results[i].displayValue]);
              }
              message = message + "</span>";
          }
      }
      return message;
  },
  type: 'SOWRemedialActionSNC'
};

Sys ID

42b94a2bc31121104f1a722e3f40ddc3

Offical Documentation

Official Docs: