Name

global.AvailabilitySummarizerV2

Description

No description available

Script

var AvailabilitySummarizerV2 = Class.create();
AvailabilitySummarizerV2.prototype = {
  initialize: function() {
      this.CONSTANTS = (new global.AvailabilityConstants());
      this.ac = (new global.AvailabilityCalculatorV2());
      this.cmdb_ci;
      this.commitments;
  },
  /**
   * An optional setter to specify which CI should have availaility calculated
   * @param {GlideRecord/String} cmdb_ci - GlideRecord or sys_id of CI have availability calculated
   */ 
  setCi: function(cmdb_ci) {
      if (typeof cmdb_ci === "string") {
          var grCi = new GlideRecord('cmdb_ci');
          grCi.get(cmdb_ci);
          this.cmdb_ci = grCi;
      }
      else
          this.cmdb_ci = cmdb_ci;
  },
  /**
   * An optional setter to specify which service commitments of the CI to have availability calculated for
   * @param {Array} commitments - Array of service_commit sys_ids
   */ 
  setCommitments: function (commitments) {
      this.commitments = commitments;
  },
  /**
   * Get all offerings associated to any availability service_commitment
   */
  _getOfferings: function() {
      if (this.cmdb_ci != null)
          return false;

      var offeringCommits = new GlideAggregate(this.CONSTANTS.SERVICE_OFFERING_COMMITMENT);
      offeringCommits.addQuery('service_commitment.type', 'availability');

      // ensure that there is either a configuration item populated, or a service offering that is in published state
      offeringCommits.addEncodedQuery('service_offeringISNOTEMPTY^service_offering.state=published^ORservice_offering.state=');
      offeringCommits.groupBy(this.CONSTANTS.SERVICE_OFFERING);
      offeringCommits.query();
      return offeringCommits;
  },
  /**
   * Get all configuration items other than service_offerings assocaited to any availbility service_commitment
   */
  _getConfigurationItems: function() {
      if (this.cmdb_ci != null)
          return false;

      var cmdbiCommits = new GlideAggregate(this.CONSTANTS.SERVICE_OFFERING_COMMITMENT);
      cmdbiCommits.addQuery('service_commitment.type', 'availability');
      cmdbiCommits.addEncodedQuery('cmdb_ciISNOTEMPTY');
      cmdbiCommits.groupBy(this.CONSTANTS.CMDB_CI);
      cmdbiCommits.query()
      return cmdbiCommits;
  },
   /**
    * Get service_offering_commitments needed for Availability calculator to generate availability records
    * @param {GlideRecord} cmdb_ci - GlideRecord CI have availability calculated
    * @param {Array} commitments - Array of service_commit sys_ids
    */
  _getCommitments: function(cmdb_ci, commitments) {
      var commits = new GlideRecord(this.CONSTANTS.SERVICE_OFFERING_COMMITMENT);
      commits.addQuery('service_commitment.type', 'availability');

      // ensure that there is either a configuration item populated, or a service offering that is in published state
      commits.addEncodedQuery('cmdb_ciISNOTEMPTY^ORservice_offering.state=published^ORservice_offering.state=');

      if (cmdb_ci != null)
          commits.addQuery(this.CONSTANTS.SERVICE_OFFERING, cmdb_ci).addOrCondition(this.CONSTANTS.CMDB_CI, cmdb_ci);
      if (this.commitments != null)
          commits.addQuery(this.CONSTANTS.SERVICE_COMMITMENT, commitments);
      commits.query();
      return commits;
  },
  /**
   * Generates availability records for all CI items and commitments
   * @param {GlideDateTime} begin - the beginning of the interval to calculate availability 
   * @param {GlideDateTime} end - the end of the interval to calculate availability
   */ 
  _summarizeAll: function(begin, end) {
      var offeringsCommitmentGr = this._getOfferings();
      var commitmentsGr;
      
      while (offeringsCommitmentGr.next()) {
          commitmentsGr = this._getCommitments(offeringsCommitmentGr.service_offering);
          this.ac.setCi(offeringsCommitmentGr.service_offering);
          this.ac.setOfferingCommitments(commitmentsGr);
          this.ac.calculate(begin, end);
      }
      
      var cmdbCiCommitmentGr = this._getConfigurationItems();
      
      while (cmdbCiCommitmentGr.next()) {
          commitmentsGr = this._getCommitments(cmdbCiCommitmentGr.cmdb_ci)
          this.ac.setCi(cmdbCiCommitmentGr.cmdb_ci);
          this.ac.setOfferingCommitments(commitmentsGr);
          this.ac.calculate(begin, end);
      }
  },
  /**
   * Generates availability records for all CI items and commitments unless set via setter methods
   * @param {GlideDateTime} begin - the beginning of the interval to calculate availability 
   * @param {GlideDateTime} end - the end of the interval to calculate availability
   */ 
  summarize: function(begin, end) {
      if (this.cmdb_ci) {
          this.ac.setCi(this.cmdb_ci)
          this.ac.setOfferingCommitments(this._getCommitments(this.cmdb_ci.sys_id, this.commitments));
          this.ac.calculate(begin, end);
      }
      else
          this._summarizeAll(begin, end);
  },

  type: 'AvailabilitySummarizerV2'
};

Sys ID

f776dabc43256110a6dfaff3fab8f228

Offical Documentation

Official Docs: