Name

global.DCCalendarRestEndPoint

Description

No description available

Script

var DCCalendarRestEndPoint = Class.create();
DCCalendarRestEndPoint.BLACKOUT = 'BLACKOUT';
DCCalendarRestEndPoint.ALREADY_SCHEDULED_OPERATIONS = 'ALREADY_SCHEDULED_OPERATIONS';
DCCalendarRestEndPoint.prototype = {
  // DataCenter Variables 
  _datacenterUrl: null,
  _inputCiListString: null,
  _maintenanceStartDateTimeStringInUTC: null,
  _maintenanceEndDateTimeStringInUTC: null,
  _responseObj: {
      stcdResult: {
          status: '',
          errorMessage: '',
          responseStatus: ''
      }
  },

  initialize: function() {
      this.className = 'DCCalendarRestEndPoint';
      this._datacenterUrl = gs.getProperty('glide.db.clone.instance_clone_server');
  },

  /**
   * 
   * @get Internal method to Invoke DC Rest API to get Conflicts.
   * @returns {<conflicts from Datacenter>} 
   */
  _requestToGetConflictsRest: function() {

      try {
          var getConflictResult = {
              stcdResult: {}
          };
          var objectForPayload = {};
          objectForPayload.inputCiListString = this._inputCiListString;
          objectForPayload.maintenanceStartDateTimeStringInUTC = this._maintenanceStartDateTimeStringInUTC;
          objectForPayload.maintenanceEndDateTimeStringInUTC = this._maintenanceEndDateTimeStringInUTC;

          var restMessage = new sn_ws.RESTMessageV2();
          var serverUrl = this._datacenterUrl.substring(0, this._datacenterUrl.lastIndexOf('/') + 1);
          var user = gs.getProperty('instance_id');
          var password = '';
          if (!gs.nil(gs.getProperty('glide.customurl.datacenter.instance.password', null)))
              password = GlideStringUtil.base64Encode(gs.getProperty('glide.customurl.datacenter.instance.password', null));
          else 
  			throw new Error('ConflictCalendarApi cannot be invoked since no credentials were found.');

  		restMessage.setEndpoint(serverUrl + '/api/snc/conflictcalendarapi/getCloneConflicts');
          restMessage.setHttpMethod("post");
          restMessage.setRequestHeader("Accept", "application/json");
          restMessage.setRequestHeader("Content-Type", "application/json");
          restMessage.setRequestHeader('user', user);
          restMessage.setRequestHeader('password', password);
          restMessage.setRequestBody(JSON.stringify(objectForPayload));
          var stopWatch = new GlideStopWatch();
          var response = restMessage.execute();
          var duration = stopWatch.getTime();
          getConflictResult.stcdResult.responseStatus = response.getStatusCode();
          var responseBody = response.getBody();
          var responseObj = JSON.parse(responseBody);
          var reslen = responseObj.result.output.length;

          var errorMessage = "";
          var blackoutConflictsArray = [];
          var maintenanceConflictsArray = [];

          if (getConflictResult.stcdResult.responseStatus == 200 && responseObj.result.status == 'success') {
              for (var i = 0; i < reslen; i++) {
                  var responseResult = responseObj.result.output[i];

                  if (responseResult.conflictReason == DCCalendarRestEndPoint.BLACKOUT) {
                      var blackoutSchedule = {};
                      blackoutSchedule.start_date = responseResult.scheduledOperationStartDateTime;
                      blackoutSchedule.end_date = responseResult.scheduledOperationEndDateTime;
                      blackoutSchedule.changeNumber = responseResult.scheduledChangeRequest;
  					blackoutSchedule.operationId = gs.generateGUID();
                      blackoutConflictsArray.push(blackoutSchedule);
                  } else if (responseResult.conflictReason == DCCalendarRestEndPoint.ALREADY_SCHEDULED_OPERATIONS) {
                      var conflicts = {};
                      conflicts.start_date = responseResult.scheduledOperationStartDateTime;
                      conflicts.end_date = responseResult.scheduledOperationEndDateTime;
                      conflicts.changeNumber = responseResult.scheduledChangeRequest;
  					conflicts.operationId = gs.generateGUID();
                      maintenanceConflictsArray.push(conflicts);
                  }
              }
          } else
  			getConflictResult.stcdResult.errorMessage = responseObj.result.message;

          getConflictResult.stcdResult.status = responseObj.result.status;
          getConflictResult.stcdResult.duration = duration;
          getConflictResult.stcdResult.maintenanceConflicts = maintenanceConflictsArray;
          getConflictResult.stcdResult.blackoutConflicts = blackoutConflictsArray;
          return getConflictResult;

      } catch (ex) {
          gs.logError("_requestToGetConflictsRest: " + ex, this.className);
          return {
              stcdResult: {
                  responseStatus: '400',
                  status: 'error',
                  errorMessage: 'Exception occured : ' + ex
              }
          };
      }
  },

  /**
   * @generate inputcistring for STCD DC API call
   * @param {<string>} <type> - <instance or node>
   * @param {<string>} <id> - <CI Id>
   * @returns {<string>} <inputCiString> - <inputcistring for STCD DC API call>
   */
  getInputCiString: function(type, id) {
      if (type == "instance")
          ciString = "InstanceIDs:" + id;
      else if (type == "node")
          ciString = "NodeIDs:" + id;

      return ciString;
  },

  /**
   * 
   * @Global Wrapper method to get Datacenter conflicts
   * @param {<string>} <startDateTimeInUTC> - <Start Time in UTC to check for the conflicts>
   * @param {<string>} <endDateTimeInUTC> - <End Time in UTC to check for the conflicts>
   * @param {<string>} <dcInstanceID> - <Instance ID >
   * @returns {<Object>} <an object with Details about the Conflicts>
   * @example 
   * @see 
   */
  requestToGetConflictsRest: function(startDateTimeInUTC, endDateTimeInUTC, dcInstanceID) {
      var funcName = "requestToGetConflictsRest";
      if (dcInstanceID)
          this.dcInstanceID = dcInstanceID;
      else {
          gs.debug(funcName + 'instanceID is missing for the CI');
          this._responseObj.stcdResult.status = 'error';
          this._responseObj.stcdResult.errorMessage = 'instanceID is missing for the CI';
          return this._responseObj;
      }

      var inputCiString = this.getInputCiString("instance", dcInstanceID);
      this._inputCiListString = inputCiString + '';
      this._maintenanceStartDateTimeStringInUTC = startDateTimeInUTC + '';
      this._maintenanceEndDateTimeStringInUTC = endDateTimeInUTC + '';

      // Retry for 3 times if status is not 200      

      for (var i = 0; i < 3; ++i) {
          this._responseObj = this._requestToGetConflictsRest();

          if (this._responseObj.stcdResult.responseStatus == 0) // Socket Timeout
              break;
          if ((this._responseObj.stcdResult.responseStatus < 200) || (this._responseObj.stcdResult.responseStatus > 299)) {
              gs.debug("requestToGetConflictsRest failed : " + this._responseObj.stcdResult.errorMessage);
              continue;
          } else
              break;
      }
      gs.debug("requestToGetConflictsRest return obj is : " + JSON.stringify(this._responseObj, 4, ''));
      return this._responseObj;
  },

  type: 'DCCalendarRestEndPoint'
};

Sys ID

38997204898691d0c377442b9a194a05

Offical Documentation

Official Docs: