mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-01-24 17:23:05 -05:00
* Added label description for RWX storage class * Added link and description above backups * Made field have no default value by making it plain textfield * Made label width wider to accomodate long labels * Better spacing for RWX. Fixed info bubble overlap Co-authored-by: Candice Ye <canye@microsoft.com>
118 lines
4.6 KiB
TypeScript
118 lines
4.6 KiB
TypeScript
/*---------------------------------------------------------------------------------------------
|
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
|
*--------------------------------------------------------------------------------------------*/
|
|
|
|
import { InputValueType } from 'resource-deployment';
|
|
import * as loc from '../localizedConstants';
|
|
|
|
export const SqlManagedInstanceGeneralPurpose = {
|
|
tierName: loc.generalPurposeLabel,
|
|
basePricePerCore: 80,
|
|
licenseIncludedPricePerCore: 153,
|
|
maxMemorySize: 128,
|
|
maxVCores: 24,
|
|
replicaOptions: [
|
|
{
|
|
text: loc.replicaOne,
|
|
value: 1,
|
|
}
|
|
],
|
|
defaultReplicaValue: 1
|
|
};
|
|
|
|
const SqlManagedInstanceBusinessCritical = {
|
|
tierName: loc.businessCriticalLabel,
|
|
basePricePerCore: 160,
|
|
licenseIncludedPricePerCore: 434,
|
|
replicaOptions: [
|
|
{
|
|
text: loc.replicaTwo,
|
|
value: 2,
|
|
},
|
|
{
|
|
text: loc.replicaThree,
|
|
value: 3,
|
|
}
|
|
],
|
|
defaultReplicaValue: 3
|
|
};
|
|
|
|
export const SqlManagedInstancePricingLink: string = 'https://aka.ms/ArcSQLBilling';
|
|
|
|
export const serviceTierVarName = 'AZDATA_NB_VAR_SQL_SERVICE_TIER';
|
|
export const devUseVarName = 'AZDATA_NB_VAR_SQL_DEV_USE';
|
|
export const vcoresLimitVarName = 'AZDATA_NB_VAR_SQL_CORES_LIMIT';
|
|
export const licenseTypeVarName = 'AZDATA_NB_VAR_SQL_LICENSE_TYPE';
|
|
export const readableSecondaries = 'AZDATA_NB_VAR_SQL_READABLE_SECONDARIES';
|
|
|
|
// Gets number of replicas charged
|
|
export function numBillableReplicas(mapping: { [key: string]: InputValueType }): number {
|
|
return 1 + Math.max(0, <number>mapping[readableSecondaries] - 1);
|
|
}
|
|
|
|
// Estimated base price for one vCore.
|
|
export function estimatedBasePriceForOneVCore(mapping: { [key: string]: InputValueType }): number {
|
|
let price = 0;
|
|
if (mapping[devUseVarName] === 'true') {
|
|
price = 0;
|
|
} else if (mapping[devUseVarName] === 'false') {
|
|
if (mapping[serviceTierVarName] === SqlManagedInstanceGeneralPurpose.tierName) {
|
|
price = SqlManagedInstanceGeneralPurpose.basePricePerCore;
|
|
} else if (mapping[serviceTierVarName] === SqlManagedInstanceBusinessCritical.tierName) {
|
|
price = SqlManagedInstanceBusinessCritical.basePricePerCore;
|
|
}
|
|
}
|
|
return price;
|
|
}
|
|
|
|
// Estimated SQL server license price for one vCore.
|
|
export function estimatedSqlServerLicensePriceForOneVCore(mapping: { [key: string]: InputValueType }): number {
|
|
let price = 0;
|
|
if (mapping[devUseVarName] === 'true') {
|
|
price = 0;
|
|
} else if (mapping[devUseVarName] === 'false') {
|
|
if (mapping[serviceTierVarName] === SqlManagedInstanceGeneralPurpose.tierName) {
|
|
price = SqlManagedInstanceGeneralPurpose.licenseIncludedPricePerCore - SqlManagedInstanceGeneralPurpose.basePricePerCore;
|
|
} else if (mapping[serviceTierVarName] === SqlManagedInstanceBusinessCritical.tierName) {
|
|
price = SqlManagedInstanceBusinessCritical.licenseIncludedPricePerCore - SqlManagedInstanceBusinessCritical.basePricePerCore;
|
|
}
|
|
}
|
|
return price;
|
|
}
|
|
|
|
// Full price for one vCore. This is shown on the cost summary card.
|
|
export function fullPriceForOneVCore(mapping: { [key: string]: InputValueType }): number {
|
|
return estimatedBasePriceForOneVCore(mapping) + estimatedSqlServerLicensePriceForOneVCore(mapping);
|
|
}
|
|
|
|
// Gets number of vCores limit specified
|
|
export function numCores(mapping: { [key: string]: InputValueType }): number {
|
|
return mapping[vcoresLimitVarName] ? <number>mapping[vcoresLimitVarName] : 0;
|
|
}
|
|
|
|
// Full price for all selected vCores.
|
|
export function vCoreFullPriceForAllCores(mapping: { [key: string]: InputValueType }): number {
|
|
return fullPriceForOneVCore(mapping) * numCores(mapping) * numBillableReplicas(mapping);
|
|
}
|
|
|
|
// SQL Server License price for all vCores. This is shown on the cost summary card if customer has SQL server license.
|
|
export function vCoreSqlServerLicensePriceForAllCores(mapping: { [key: string]: InputValueType }): number {
|
|
return estimatedSqlServerLicensePriceForOneVCore(mapping) * numCores(mapping) * numBillableReplicas(mapping);
|
|
}
|
|
|
|
// If the customer doesn't already have SQL Server License, AHB discount is set to zero because the price will be included
|
|
// in the total cost. If they already have it (they checked the box), then a discount will be applied.
|
|
export function azureHybridBenefitDiscount(mapping: { [key: string]: InputValueType }): number {
|
|
if (mapping[licenseTypeVarName] === 'true') {
|
|
return vCoreSqlServerLicensePriceForAllCores(mapping);
|
|
} else {
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
// Total price that will be charged to a customer. Is shown on the cost summary card.
|
|
export function total(mapping: { [key: string]: InputValueType }): number {
|
|
return vCoreFullPriceForAllCores(mapping) - azureHybridBenefitDiscount(mapping);
|
|
}
|