Appearance
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",
"ScenarioDuration": "5",
"FindSolutionMetricType": "TotalCumulativeCostPerYear",
"ServerReplacementTime": ""
}
Attributes
SimulationType - string - required
Sets type of simulation.
Simulation Type Codes
Code | Description |
---|
| 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
Code | Description |
---|---|
All | Includes resource costs for hardware, software, power and facility space. |
ServerAndPower | Includes only costs for hardware and power. |
ServerAndSoftware | Includes only costs for hardware and software. |
ExcludeFacility | Excludes facility space costs. |
ScenarioDuration - 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
Code | Description |
---|---|
TotalCumulativeCost | Uses cumulative cost of time-series. |
TotalCumulativeCostPerYear | Uses 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
Code | Description |
---|---|
Auto | Zypr determines queue bias. |
Server | Server unit queued least-to-best. |
Processor | Processor unit queued least-to-best. |
Core | Core 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
Code | Description |
---|---|
Rack | Rack is the add/remove unit |
Server | Server 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",
"ResetBasis": "Never",
"TermLength": 3,
"NextContractAnniversary": "10 / 1 / 2023",
"Fee": 6000,
"PerpetualSupportPercent": 25,
"PerpetualSupportCostLagTerm": 1,
"InitialEntitledQty": 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
Code | Description |
---|---|
Server | A physical computer |
Processor | Unit that corresponds to a cpu socket |
Core | Processor unit within a processor |
Accelerator | A device pluggable into a server |
LicenseClass - string - required
License type.
License Class Codes
Code | Description |
---|---|
Perpetual | Permits indefinite usage |
Subscription | Usage 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
Code | Description |
---|---|
Coterminous | Use term lengths are collectively linked to common term end date, which may be an annual settlement date or contract end date. |
Instance | Use 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
Code | Description |
---|---|
Never | Maximum quantity reset will not be evaluated by Zypr |
InterContract | Maximum quantity reset is evaluated at contract end date |
IntraContract | Maximum quantity reset is evaluated annually corresponding to contract end date |
TermLength - numeric - optional
Number of years a contract or license is in effect.
NextContractAnniversary - 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
Code | Description |
---|---|
MonoMetric | License metric is the same unit used to count consumption |
PolyMetric | License 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