diff --git a/src/SelfServe/SqlX/SqlX.rp.ts b/src/SelfServe/SqlX/SqlX.rp.ts index a7e788728..5d1b830d0 100644 --- a/src/SelfServe/SqlX/SqlX.rp.ts +++ b/src/SelfServe/SqlX/SqlX.rp.ts @@ -139,6 +139,14 @@ const getGeneralPath = (subscriptionId: string, resourceGroup: string, name: str }; export const getRegions = async (): Promise> => { + const telemetryData = { + feature: "Calculate approximate cost", + function: "getRegions", + description: "", + selfServeClassName: SqlX.name, + }; + const getRegionsTimestamp = selfServeTraceStart(telemetryData); + try { const regions = new Array(); @@ -156,8 +164,12 @@ export const getRegions = async (): Promise> => { regions.push(location.locationName.split(" ").join("").toLowerCase()); } } + + selfServeTraceSuccess(telemetryData, getRegionsTimestamp); return regions; } catch (err) { + const failureTelemetry = { err, selfServeClassName: SqlX.name }; + selfServeTraceFailure(failureTelemetry, getRegionsTimestamp); return new Array(); } }; @@ -167,6 +179,14 @@ const getFetchPricesPathForRegion = (subscriptionId: string): string => { }; export const getPriceMap = async (regions: Array): Promise>> => { + const telemetryData = { + feature: "Calculate approximate cost", + function: "getPriceMap", + description: "fetch prices API call", + selfServeClassName: SqlX.name, + }; + const getPriceMapTimestamp = selfServeTraceStart(telemetryData); + try { const priceMap = new Map>(); @@ -192,8 +212,12 @@ export const getPriceMap = async (regions: Array): Promise>; let regions: Array; const calculateCost = (skuName: string, instanceCount: number): Description => { + const telemetryData = { + feature: "Calculate approximate cost", + function: "calculateCost", + description: "performs final calculation", + selfServeClassName: SqlX.name, + }; + const calculateCostTimestamp = selfServeTraceStart(telemetryData); + try { let costPerHour = 0; for (const region of regions) { @@ -215,14 +228,22 @@ const calculateCost = (skuName: string, instanceCount: number): Description => { costPerHour += incrementalCost; } + if (costPerHour === 0) { + throw new Error("Cost per hour = 0"); + } + costPerHour *= instanceCount; costPerHour = Math.round(costPerHour * 100) / 100; + selfServeTraceSuccess(telemetryData, calculateCostTimestamp); return { textTKey: `${costPerHour} USD`, type: DescriptionType.Text, }; } catch (err) { + const failureTelemetry = { err, regions, priceMap, selfServeClassName: SqlX.name }; + selfServeTraceFailure(failureTelemetry, calculateCostTimestamp); + return costPerHourDefaultValue; } };