Class GrowthPlanner
java.lang.Object
com.eqixiac.equinix.design.cost.GrowthPlanner
Growth and commitment-term decisions for one design: projects traffic month by month from
commercial.annualGrowthRate over commercial.horizonMonths, finds the Fabric bandwidth tier
each connection needs each month, prices the design month by month, recommends a commitment term per
item, and produces a scenario band.
Model (every assumption is stated in the result)
- Traffic: month
n(1-based) carries today's traffic ×(1 + g)^((n - 1) / 12): compound annual growth applied smoothly per month. Month 1 is today. - Capacity: each cloud leg (from the same
WorkloadPlacerlegs the optimiser'sRateCardCostModelprices) needs the smallest Fabric tier (RateCardCostModel.TIERS_MBPS) at or above its projected Mbps; the provider's hosted-connection fee follows the same bandwidth. - Items: per leg a Fabric
IP_VCconnection and the provider's hosted-connection fee; per metro with a leg one STANDARD Fabric Cloud Router; per cloud withmonthlyEgressGbits egress over the private path (internet when the design does not connect to it), growing with traffic. - Terms: an item is committed for
Tmonths at that term's price, renewing at the same term until the horizon; an upgrade within a term is billed at the committed term's price for the new tier from the upgrade month (an assumption: contracts may differ); months committed beyond the horizon are counted (the "commitment tail") at the last month's price; the one-time charge is paid once. - Term prices come from the rate card's
connectionLookup/cloudRouterLookupat each term. A term option is priced only from a live or caller-supplied price for that term: aPriceSource.REFERENCEfigure ignores the term and a live row of another term is a substitution, so both leave the option unpriced with the reason. Provider fees and egress have no term axis (the providers publish none) and are on demand. - Currency: amounts are compared in
commercial.currency; another currency is converted throughCurrencyConverters(pinned rates, a supplied converter, live ECB rates, the bundled table); only a currency no source covers leaves the item unpriced.
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic final recordSeeded Monte Carlo settings. -
Field Summary
Fields -
Method Summary
Modifier and TypeMethodDescriptionstatic GrowthPlannerforSpec(DesignSpec spec, MetroPortfolio portfolio, DesignContext context, RateCard rateCard, ReferenceRateCard providerFees) Plans a design.static GrowthPlannerforSpec(DesignSpec spec, MetroPortfolio portfolio, DesignContext context, RateCard rateCard, ReferenceRateCard providerFees, CurrencyConverter converter) Plans a design with a converter for prices in other currencies (ranked below rates pinned in the spec and above the default sources; seeCurrencyConverters).static doublemultiplier(double annualGrowth, int month) Traffic multiplier for a month:(1 + growth)^((month - 1) / 12).static BigDecimalpercentile(List<BigDecimal> sorted, double p) Nearest-rank percentile.plan()The month-by-month projection with a term recommendation per item.scenarios(double lowGrowth, double highGrowth, GrowthPlanner.MonteCarlo monteCarlo) Deterministic low/base/high cases and, optionally, a seeded Monte Carlo, all priced on demand.static int[]tiers(int baseMbps, double annualGrowth, int horizon) The Fabric tier a leg needs each month.static doubletriangular(double u, double min, double mode, double max) Inverse CDF of the triangular distribution.
-
Field Details
-
TERMS
-
-
Method Details
-
forSpec
public static GrowthPlanner forSpec(DesignSpec spec, MetroPortfolio portfolio, DesignContext context, RateCard rateCard, ReferenceRateCard providerFees) Plans a design.- Parameters:
spec- the spec (growth, horizon, currency, exchange rates, clouds)portfolio- the chosen metroscontext- the run's facts (for workload placement)rateCard- the card Equinix items and egress are priced from (term prices come from here)providerFees- the provider hosted-connection fee table;nullleaves those fees unpriced- Returns:
- the planner
-
forSpec
public static GrowthPlanner forSpec(DesignSpec spec, MetroPortfolio portfolio, DesignContext context, RateCard rateCard, ReferenceRateCard providerFees, CurrencyConverter converter) Plans a design with a converter for prices in other currencies (ranked below rates pinned in the spec and above the default sources; seeCurrencyConverters).- Parameters:
spec- the specportfolio- the chosen metroscontext- the run's factsrateCard- the card Equinix items and egress are priced fromproviderFees- the provider hosted-connection fee table, ornullconverter- the converter, ornullfor the defaults- Returns:
- the planner
-
multiplier
public static double multiplier(double annualGrowth, int month) Traffic multiplier for a month:(1 + growth)^((month - 1) / 12).- Parameters:
annualGrowth- yearly growth as a fractionmonth- 1-based month- Returns:
- the multiplier
-
tiers
public static int[] tiers(int baseMbps, double annualGrowth, int horizon) The Fabric tier a leg needs each month.- Parameters:
baseMbps- today's sized bandwidthannualGrowth- yearly growth as a fractionhorizon- months- Returns:
- one tier per month (month 1 first);
-1for a month above the largest tier
-
plan
The month-by-month projection with a term recommendation per item.- Returns:
- the plan
-
scenarios
public ScenarioBand scenarios(double lowGrowth, double highGrowth, GrowthPlanner.MonteCarlo monteCarlo) Deterministic low/base/high cases and, optionally, a seeded Monte Carlo, all priced on demand.- Parameters:
lowGrowth- the low annual growth rate (fraction)highGrowth- the high annual growth rate (fraction);low <= base <= highwhere base is the spec'smonteCarlo- the simulation settings, ornullfor none- Returns:
- the band
-
triangular
public static double triangular(double u, double min, double mode, double max) Inverse CDF of the triangular distribution.- Parameters:
u- a uniform draw in [0, 1)min- the minimummode- the modemax- the maximum- Returns:
- the sample
-
percentile
Nearest-rank percentile.- Parameters:
sorted- ascending valuesp- the fraction, 0 to 1- Returns:
- the value, or
nullfor an empty list
-