Skip to content

Pool Resources Model Object Reference

 

This PoolResourcesModel request object describes resources, demand, events, costs, rules, and constraints that govern future pool resource states, quantities, and license positions over time.

json
  {
    "Settings": {},
    "SimulationRules": {},
    "EvolutionRules": {},
    "ValuationRules": {},
    "NewServerConfiguration": {},
    "PowerConsumptionTerms": {},
    "FacilityConsumptionTerms": {},
    "SoftwareResource":{
        "SoftwareStackRegistry":[],
        "SoftwareInventoryTerms":[]
    },
    "ServerInventory":[],
    "JumpEvents":[],
    "Constraints":[]
  }

Attributes

Settings - object - required
This object sets properties for scenario handling.
SimulationRules - object - required
This object sets the objective function of the simulation.
EvolutionRules - object - required
This object sets rules for how pool resources evolve over time.
ValuationRules - object - required
This object defines financial parameters for how resources are valued.
PowerConsumptionTerms - object - required
This object defines the cost terms for electricity consumption.
FacilityConsumptionTerms - object - required
This object defines the cost terms for facility space consumption.
NewServerConfiguration - object - required
This object defines the configuration of a new server inventory that will be added to the pool.
SoftwareResource - object - required
Is the parent object for SoftwareStackRegistry and SoftwareInventoryTerms objects.
SoftwareStackRegistry - array of integers - required
This array contains license ids that define the initial software stack of the pool. The license ids correspond to license terms defined in SoftwareInventoryTerms object.
SoftwareInventoryTerms - array of objects - required
This array contains objects that describe relevant license terms.
ServerInventory - array of objects - required
This array contains objects that describe initial server inventory of the pool.
JumpEvents - array of objects - optional
This array contains objects that describe discrete events to influence the evolution and mix of pool resources.
Constraints - array of objects - optional
This array contains objects that describe parameters that limit acceptable results.

 

Settings

This object is for configuring scenario properties.

json
  {
    "ScenarioName": "My Scenario Name",
    "ModelEffectiveDate": "1/7/2022",
    "DataValidationCascadeMode": "Continue",
    "CultureInfoISOCode": "EN",
    "EmailResults": true,
    "Pool": {
      "Id": "ATL1_42_PROD",
      "Name": "Name of service pool",
      "Description": "A long description of pool"
    },
  }

Attributes

ScenarioName - string - 42 max length - optional
Name of this scenario request.

INFO

Zypr auto-generates a unique Scenario Id. The Scenario Id and the actual date the scenario is created are added to Settings object.

ModelEffectiveDate - date - optional
This date is represents both the effective date of the pool's resource data and the start date of the time-series outputs. If left blank, the start date is auto-assigned the same date the scenario was created.

TIP

Setting the ModelEffectiveDate property anchors the start date of generated time-series, which are contained in the ResourcesForecast object of the Scenario response object, to this date.

Generating a simulation without setting this date may result in different results when executing the same model on different dates or times.

DataValidationCascadeMode - string - optional
Determines whether the validation process stops or continues when a validation error occurs. 'Stop' is the default setting. 'Continue' permits the validation process to continue, however, is not guaranteed to finish all required validations. The 'Continue' setting may provide a quicker way to find data errors in a model. However, invalid data may trigger downstream validation methods to fail, due to their reliance on valid data, which will terminate the validation process.
CultureInfoISOCode - string - required
ISO 639-1 two-letter code for setting numeric formats with respect to a preferred language.
SaveResults - boolean - optional
Results will be saved when true. Default is false.
FormatResults - boolean - optional
CultureInfoISOCode property formats output results when true. Default is false.
Pool - object - optional
This object describes attributes of a pool
Id - string - 24 max length - optional
Unique identifier of the pool.
Name - string - 42 max length - optional
Long string for describing pool.
Description - string - 64 max length - optional
Long string for describing scenario.

 

Simulation Rules

This SimulationRules object defines the objective function of a scenario with respect to cost scope and time.

json
  {
    "SimulationType": "OptimalYield",
    "SimulationCostScope": "All",
    "SolutionTargetTime": "5",
    "FindSolutionMetricType": "TotalCumulativeCostPerYear",
    "ServerReplacementTime": ""
  }

Attributes

SimulationType - string - required
Sets type of simulation.
Simulation Type Codes
CodeDescription

| OptimalYield | Objective is to minimize total pool cost by finding ideal server turnover rates. | | FixedTime | Objective is server turnover on predetermined, fixed-time schedule. | | Minimum | Objective is server turnover rates that maintain current balances. | | MaximumYield | Objective is to maximize HEP capture, not minimize total pool cost. |

SimulationCostScope - string - required
Sets which resource costs are included in simulation.
Simulation Cost Scope Codes
CodeDescription
AllIncludes resource costs for hardware, software, power and facility space.
ServerAndPowerIncludes only costs for hardware and power.
ServerAndSoftwareIncludes only costs for hardware and software.
ExcludeFacilityExcludes facility space costs.
SolutionTargetTime - numeric - required
Sets a desired duration for time-series results. Unit is years.
FindSolutionMetricType - string - required
Sets metric used to find solution for SimulationType 'OptimalYield'
Solution Metric Codes
CodeDescription
TotalCumulativeCostUses cumulative cost of time-series.
TotalCumulativeCostPerYearUses cumulative cost per year of time-series.
ServerReplacementTime - numeric - conditionally required
Required when SimulationType property 'FixedTime' is selected. Sets preferred time of server refresh.

 

Evolution Rules

This EvolutionRules object defines the boundary conditions and rules for how pool server inventory is permitted to evolve.

json
  {
    "PoolUtilizationPercentCurrent": "63.5",
    "PoolUtilizationBoundaryPercentLower": "63.0",
    "PoolUtilizationBoundaryPercentUpper": "65.0",
    "ServiceDemandGrowthPercent": "20.5",
    "InventoryQueueBias":  "Auto",
    "LotConfiguration": {
        "LotType": "Rack",
        "ServerQty": "42",
        "ServerSize": "1",
        "RackSize":  "42"
    } 
  }

Attributes

ServerUtilizationPercentCurrent - numeric - required
Actual aggregate pool utilization percent at ModelRunDate (start time of scenario).
ServerUtilizationPercentBase - numeric - required
Targeted aggregate minimum utilization percent for pool.

INFO

This value constrains how much hardware capacity is added at an interval, within the time-series, when required capacity is re-evaluated and reset based upon service demand growth percent.

ServerUtilizationPercentPeak - numeric - required
Targeted aggregate maximum utilization percent for pool.

INFO

This value constrains aggregate peak utilization percent of pool. When reached, a new interval is triggered within the time-series.

ServiceDemandGrowthPercent - numeric - required
Expected service demand growth percent for pool.
InventoryQueueBias - string - optional
Queue order for how server inventory is sequenced for removal when SimulationType property is not set to 'FixedTime'. Queue order is based on unit performance rating. Default is 'Auto'.
Queue Bias Codes
CodeDescription
AutoZypr determines queue bias.
ServerServer unit queued least-to-best.
ProcessorProcessor unit queued least-to-best.
CoreCore unit queued least-to-best.
LotConfiguration - object - optional
Sets the inventory lot unit used in add/remove transactions. If not provided, default lot configuration is 1 server that is 1U size.

WARNING

Configuration is validated for consistency only.

For example, a valid configuration might be: RackSize property is 42, ServerSize property is 2, and ServerQty property is 21 or less. An invalid configuration would be RackSize property is 40, ServerSize property is 2, and ServerQty property is 22.

If LotType property is 'Server', only ServerSize property is relevant.

LotType - string - required
Sets unit basis for how server inventory is add and removed from pool.
Lot Type Codes
CodeDescription
RackRack is the add/remove unit
ServerServer is the add/remove unit
ServerQty - integer - optional
Quantity of servers when LotType property is set to 'Rack'. Default value is 1 when LotType property set to 'Server'.
ServerSize - integer - optional
The amount of space a server unit consumes in a rack in U unit. Valid values are 1, 2, 4. Default value is 1.
RackSize - integer - optional
Quantity of 1U servers in rack. Default value is 1.

 

Valuation Rules

This ValuationRule object defines parameters for defining the financial value of pool resources.

json
  {
    "DiscountPercent": 10,
    "IncludeServerResidualValue": true,
    "ResidualValueBidAskSpreadPercent": 40,
    "InitialInventoryIsNew": false
  }

Attributes

DiscountRate - numeric - required
Percentage used to convert future financial data into present value.
IncludeServerResidualValue - boolean - optional
Determines if server residual value is included in a server's net cost. The default value is 'true'.

INFO

When a server is removed from a pool, a residual value can be calculated and included to arrive at a server's net cost.

Residual value calculation is based upon the server's cost and performance rating indicated in the NewServerConfiguration object, which is treated as the current 'market rate' converted into a 'cost per performance unit'. The removed server's gross residual value is derived from this market rate and then adjusted downward to arrive at an approximate wholesale market rate using the ResidualValueBidAskSpreadPercent property.

InitialInventoryIsNew - boolean - optional
Determines if initial inventory in ServerInventory object is new and therefore the current server UnitCost property is applied. Default value is 'false'.

 

New Server Configuration

This NewServerConfiguration object sets the configuration of a new server that is added to a pool.

json
  {
    "ServerUnitCapacity": "130",
    "UnitCost": "10000",
    "ProcessorSetSize": "2",
    "CoreSetSize": "12",
    "ServerWatts": "435",
    "ServerSize": 1
  }

Attributes

ServerUnitCapacity - numeric - required
Scalar value representing server's relative performance rating.
UnitCost - numeric - required
Unit cost of server added to inventory.
ProcessorSetSize - integer - required
Quantity of physical processors contained in a server's cpu socket.
CoreSetSize - integer - required
Quantity of cores contained in physical processor.
ServerWatts - integer - required
Electrical power consumption rating in watts.
ServerSize - integer - required
Expressed as 'U' unit rating. Valid values are 1, 2, 4 (i.e., 1U, 2U, 4U).

 

Power Consumption Terms

This *PowerConsumptionTerms object defines power consumption and its cost.

json
  {
    "PoolPowerDrawPercent": "80",
    "DatacenterPowerkWhCostRate": ".105",
    "DatacenterPUE": "1.6",
    "PowerCostInflationPercent": "0"
  }

Attributes

PoolPowerDrawPercent - numeric - required
Adjustment factor to tune actual consumption with respect to server watts rating.
DatacenterPowerkWhCostRate - numeric - required
Unit cost rate per kilowatt hour.
DatacenterPUE - numeric - required
Power Usage Effectiveness rating.
PowerCostInflationPercent - numeric - required
Annual inflation factor for DatacenterPowerkWhCostRate property.

 

Facility Consumption Terms

This FacilityConsumptionTerms object defines data center space consumption and its cost.

json
  {
    "PowerConsumptionMarkupPercent": "0",
    "ServerSize": 1,
    "ServerSizeUnitCost": "65",
    "RackSpaceInflationPercent": "2.75"
  }

Attributes

PowerConsumptionMarkupPercent - numeric - optional
Permits cost-basis for facility space to be based upon percentage markup of power consumption cost.
ServerSize - integer - required
Space unit utilized with respect to ServerSizeUnitCost property.
ServerSizeUnitCost - numeric - required
Unit cost per indicated unit space.
RackSpaceInflationPercent - numeric - required
Annual inflation factor for DatacenterPowerkWhCostRate property.

 

Software Resources

This SoftwareResources object defines the software stack registry and software inventory terms.

json
  {
    "SoftwareStackRegistry": [1,2,3],
    "SoftwareInventoryTerms": []
  }

Attributes

SoftwareStackRegistry - array of integers - required
Integer value corresponding to LicenseId property in SoftwareInventoryTerms object. Denotes the initial software stack for servers included in ServerInventory object.

INFO

The composition of the software stack can be modified at a future points-in-time by using Jump Events to add and remove a license id from the software stack registry object. All license ids contained in the registry must be included in the software inventory terms object.

Software Inventory Terms - array of objects - required
List of SoftwareItemTerms objects. Each object represents a unique software product whose use rights are based upon countable attributes of hardware (i.e., server, processor, core quantity).
Software Inventory Terms - array of objects - required
List of SoftwareItemTerms objects. Each object represents a unique software product whose use rights are based upon countable attributes of hardware (i.e., server, processor, core quantity).

 

Software Item Terms

This SoftwareItemTerms object defines software license terms and initial entitlement quantity.

json
  {
    "LicenseId": 1,
    "LicenseMetric": "Processor",
    "LicenseClass": "Perpetual",
    "ContractType": "Coterminous",
    "EntitlementExtremaResetBasis": "Never",
    "TermLength": 3,
    "AbsTermEndDate": "10 / 1 / 2023",
    "Fee": 6000,
    "PerpetualSupportPercent": 25,
    "PerpetualSupportCostLagTerm": 1,
    "InitialEntitlementQty": 128,
    "ExtremaResetBufferPercent": 2.5,
    "LicenseRuleType": "MonoMetric",
    "LicenseRule" : null
  }

Attributes

LicenseId - integer - required
Unique number for identifying the specific license terms.
LicenseMetric - string - required
Hardware item used by a vendor for counting license consumption.
License Metric Codes
CodeDescription
ServerA physical computer
ProcessorUnit that corresponds to a cpu socket
CoreProcessor unit within a processor
AcceleratorA device pluggable into a server
LicenseClass - string - required
License type.
License Class Codes
CodeDescription
PerpetualPermits indefinite usage
SubscriptionUsage time is finite

INFO

When set to 'Perpetual', Zypr auto-generates a corresponding support requirement. Quantities of support licenses are maintained and auto renewed as indicated by ContractType property.

ContractType - string - required
Sets how license is auto renewed as simulation evolves over time.
Contract Type Codes
CodeDescription
CoterminousUse term lengths are collectively linked to common term end date, which may be an annual settlement date or contract end date.
InstanceUse term is unique to when created.

INFO

Coterminous use term length varies based on when a license is added and the remaining time to annual settlement date or contract end date. For example, server inventory increases requiring additional license on 10/1/2021 and again on 12/1/2021. If the annual settlement date is 12/31/2021, the use term lengths are, 3 months and 1 month, respectively.

The initial term, and subsequent renewal term, of an 'Instance' contract type is assumed to be one year.

LicenseExtremaResetBasis - string - optional
Used to indicate if a maximum license quantity count may be reset to a lower level. If permitted, value indicates when the reset may occur. Default is Never.
License Extrema Reset Basis Codes
CodeDescription
NeverMaximum quantity reset will not be evaluated by Zypr
InterContractMaximum quantity reset is evaluated at contract end date
IntraContractMaximum quantity reset is evaluated annually corresponding to contract end date
TermLength - numeric - optional
Number of years a contract or license is in effect.
AbsTermEndDate - date - optional
Contract or license end date.
Fee - numeric - required
Amount paid per license. Fee may represent a one-time perpetual license fee, or annual price for a subscription.
PerpetualSupportPercent - numeric - optional
Percentage of one-time perpetual license fee that is paid annually.
PerpetualSupportCostLagTerm - numeric - optional
Period of delay from when a new, one-time perpetual licensee fee is paid to when the first support fee is due. Time period value is years.
InitialLicenseQty - integer - optional
Indicates the quantity of existing licenses. Default is null.

INFO

If value is null, InitialLicenseQty property will be set equal to the corresponding quantity of physical inventory. For example, if LicenseMetric property is 'Core', initial license quantity will be set to the total number of cores contained in the *ServerInventory object. No transaction is created.

If value is set to a number that is less than the corresponding quantity of physical inventory, a transaction will be created to automatically increase the number of licenses to match the corresponding physical inventory count.

LicenseResetBufferPercent - numeric - optional
If LicenseExtremaResetBasis is permitted, buffer percent constrains the reset value to maintain a percent of excess license inventory (aka safety stock). Default is 0.
LicenseRuleType - string - optional
Indicates whether a license is based on counting a single metric or counting a more than one metric. Default is MonoMetric.
License Rule Type Codes
CodeDescription
MonoMetricLicense metric is the same unit used to count consumption
PolyMetricLicense metric is not the same unit to count consumption

INFO

An example of a Polymetric license is when a "processor-based" license is determined by counting the number of cores per processor.

ConsumptionRules - object - optional
List of rules for 'PolyMetric' License Rule Type, which describe vendor required counting rules. See below for more detail.

 

Software License Rule-Engine

This ConsumptionRules object is for setting software license terms for 'PolyMetric' license types using the license rule-engine.

TIP

The code block below shows "1 processor license" is required when the core count is less than or equal to 32. Or, "2 processor licenses" are required when the core count is greater than 32.

 

json
  {
    "Operator": "Or",
    "Rules": [
      {
        "Id": "1",
        "RequiredLicenseQty": 1,
        "MemberName": "CoreSetSize",
        "Operator": "LessThanOrEqual",
        "TargetValue": 32
      },
      {
        "Id": "2",
        "RequiredLicenseQty": 2,
        "MemberName": "CoreSetSize",
        "Operator": "GreaterThan",
        "TargetValue": 32
      }
    ]
  }

Attributes

Operator - string - optional
Logical operator for comparing multiple Rules. Valid values are: Or, And.
Id - integer - required
Unique id for identifying different rules.
RequiredLicenseQty - integer - required
Required quantity of licenses if conditions logically resolve to true.
MemberName - string - required
Physical inventory target. Valid values are: ProcessorSetSize, CoreSetSize.
Operator - string - required
Comparison operator. Valid values are:
  • Equal
  • GreaterThan
  • GreaterThanOrEqual
  • LessThan
  • LessThanOrEqual
TargetValue - integer - required
Target value corresponding to MemberName property used to evaluate rule.

 

Server Inventory

This ServerInventory object defines a collection of initial server inventory of a pool.

json
  {
    "ServerInventory": []
  }

Attributes

ServerInventory - array of objects - required
List of ServerItem objects.

 

Server Item

This ServerItem object defines a quantity of servers with the same characteristics.

json
  {
    "ServerQty": 5,
    "ServerUnitCapacity": 72,
    "ServerWatts": 425,
    "ProcessorSetSize": 2,
    "CoreSetSize": 8,
    "InitialAge": 3.75,
    "ServerSize": 1
  }

Attributes

ServerQty - integer - required
Quantity of servers.
ServerUnitCapacity - numeric - required
Scalar value indicating server's relative efficiency rating.
ServerWatts - integer - required
Electrical power consumption rating in watts.
ProcessorSetSize - integer - required
Quantity of physical processors contained in a server's cpu socket.
CoreSetSize - integer - required
Quantity of cores contained in physical processor.
InitialAge - numeric - optional
Chronological age of servers. Only required when SimulationType property is set to 'FixedTime'

TIP

If SimulationType property is set to 'OptimalYield', Zypr will use initial age in age-related calculations. If initial age is not available, Zypr will use only those transactions in which Zypr can identify a date added and a date removed when calculating age-related metrics.

ServerSize - integer - required
Expressed as 'U' unit rating. Valid values are 1, 2, 4 (i.e., 1U, 2U, 4U).

 

Jump Events

This JumpEvents object defines a collection of jump events.

INFO

A jump event defines a discrete state change, at a desired time, to the solution generation process.

Every jump event item included in the JumpEvents array must contain a valid EventType property, a unique EventId property, and a TriggerTime property indicating when the jump event occurs. Each jump event type includes additional properties necessary to define their respective state change.

 

json
  {
    "JumpEvents": []
  }

Attributes

JumpEvents - array of objects - required
List of jump events that describe discrete changes to the evolution state of pool resources. Valid jump events are listed in the Jump Event Types object reference.

 

Constraints

This Constraints object defines a collection of Constraint objects that limit the feasible solution space.

json
  {
    "Constraints": [
      {
        ConstraintTypeName : {}
      }
    ]
  }

Attributes

Constraints - array of objects - required
List of constraint items to limit feasible solutions.
ConstraintTypeName - string - required
Name of constraint object type. Valid values are: HardwareBalance, PowerUsage.

 

Constraint

Purpose

This Constraint object defines a constraint type.

INFO

A constraint limits the feasible solution space, and is expressed by stating what is not permitted:

For example, the code block below reads as follows: "Server cumulative inventory balance is not permitted Greater than 128 servers Before 2.5 years."

As a result, all solutions that have a cumulative server balance from time 0 to 2.5 years (exclusive) will not be considered a feasible result.

 

json
  {
    "HardwareBalance": {
      "Id": 1,
      "MetricName": "Server",
      "IsTimeRestricted": true,
      "TargetTime": 2.5,
      "TimeConstraintOperator": "Before",
      "MetricTargetValue": 128,
      "MetricConstraintOperator": "Greater"
    }
  }

Attributes

Id - integer - required
Unique number to identify constraint.
MetricName - string - required
Targeted metric unit for constraint type. Valid values are: Server, Processor, Core.
IsTimeRestricted - boolean - required
If 'true', object requires a target time.
TargetTime - integer - optional
Time within time-series when the constraint is invoked.
TimeConstraintOperator - string - required
Comparison operator to set constraint scope with respect to time.
Valid values are:
  • Before
  • BeforeOrAt
  • AtOrAfter
  • After
  • At
  • NotAt
  • Any
MetricTargetValue - integer optional
Value that sets desired limit.
MetricConstraintOperator - string - required
Comparison operator to set constraint scope with respect to selected metric unit.
Valid values are:
  • Less
  • LessOrEqual
  • Greater
  • GreaterOrEqual
  • NotEqual
  • Equal

Ravello Analytics, LLC