GSI - Employe Self Service Mobile
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

171 lines
5.2 KiB

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.monthlyMinInstanceCost = exports.canCalculateMinInstanceCost = exports.V2_FREE_TIER = exports.V1_FREE_TIER = exports.V2_RATES = exports.V1_RATES = void 0;
const backend = require("./backend");
const V1_REGION_TO_TIER = {
"us-central1": 1,
"us-east1": 1,
"us-east4": 1,
"europe-west1": 1,
"europe-west2": 1,
"asia-east2": 1,
"asia-northeast1": 1,
"asia-northeast2": 1,
"us-west2": 2,
"us-west3": 2,
"us-west4": 2,
"northamerica-northeast1": 2,
"southamerica-east1": 2,
"europe-west3": 2,
"europe-west6": 2,
"europe-central2": 2,
"australia-southeast1": 2,
"asia-south1": 2,
"asia-southeast2": 2,
"asia-northeast3": 2,
};
const V2_REGION_TO_TIER = {
"asia-east1": 1,
"asia-northeast1": 1,
"asia-northeast2": 1,
"europe-north1": 1,
"europe-west1": 1,
"europe-west4": 1,
"us-central1": 1,
"us-east1": 1,
"us-east4": 1,
"us-west1": 1,
"asia-east2": 2,
"asia-northeast3": 2,
"asia-southeast1": 2,
"asia-southeast2": 2,
"asia-south1": 2,
"australia-southeast1": 2,
"europe-central2": 2,
"europe-west2": 2,
"europe-west3": 2,
"europe-west6": 2,
"northamerica-northeast1": 2,
"southamerica-east1": 2,
"us-west2": 2,
"us-west3": 2,
"us-west4": 2,
};
exports.V1_RATES = {
invocations: 4e-7,
memoryGb: {
1: 0.0000025,
2: 0.0000035,
},
cpuGhz: {
1: 0.00001,
2: 0.000014,
},
idleCpuGhz: {
1: 0.000001,
2: 0.00000145,
},
egress: 0.12,
};
exports.V2_RATES = {
invocations: 4e-7,
memoryGb: {
1: 0.0000025,
2: 0.0000035,
},
vCpu: {
1: 0.000024,
2: 0.0000336,
},
idleVCpu: {
1: 0.0000025,
2: 0.0000035,
},
};
exports.V1_FREE_TIER = {
invocations: 2000000,
memoryGb: 400000,
cpuGhz: 200000,
egress: 5,
};
exports.V2_FREE_TIER = {
invocations: 2000000,
memoryGb: 360000,
vCpu: 180000,
egress: 1,
};
const VCPU_TO_GHZ = 2.4;
const MB_TO_GHZ = {
128: 0.2,
256: 0.4,
512: 0.8,
1024: 1.4,
2048: 1 * VCPU_TO_GHZ,
4096: 2 * VCPU_TO_GHZ,
8192: 2 * VCPU_TO_GHZ,
16384: 4 * VCPU_TO_GHZ,
32768: 8 * VCPU_TO_GHZ,
};
function canCalculateMinInstanceCost(endpoint) {
if (!endpoint.minInstances) {
return true;
}
if (endpoint.platform === "gcfv1") {
if (!MB_TO_GHZ[endpoint.availableMemoryMb || backend.DEFAULT_MEMORY]) {
return false;
}
if (!V1_REGION_TO_TIER[endpoint.region]) {
return false;
}
return true;
}
if (!V2_REGION_TO_TIER[endpoint.region]) {
return false;
}
return true;
}
exports.canCalculateMinInstanceCost = canCalculateMinInstanceCost;
const SECONDS_PER_MONTH = 30 * 24 * 60 * 60;
function monthlyMinInstanceCost(endpoints) {
const usage = {
gcfv1: { 1: { ram: 0, cpu: 0 }, 2: { ram: 0, cpu: 0 } },
gcfv2: { 1: { ram: 0, cpu: 0 }, 2: { ram: 0, cpu: 0 } },
};
for (const endpoint of endpoints) {
if (!endpoint.minInstances) {
continue;
}
const ramMb = endpoint.availableMemoryMb || backend.DEFAULT_MEMORY;
const ramGb = ramMb / 1024;
if (endpoint.platform === "gcfv1") {
const cpu = MB_TO_GHZ[ramMb];
const tier = V1_REGION_TO_TIER[endpoint.region];
usage["gcfv1"][tier].ram =
usage["gcfv1"][tier].ram + ramGb * SECONDS_PER_MONTH * endpoint.minInstances;
usage["gcfv1"][tier].cpu =
usage["gcfv1"][tier].cpu + cpu * SECONDS_PER_MONTH * endpoint.minInstances;
}
else {
const tier = V2_REGION_TO_TIER[endpoint.region];
usage["gcfv2"][tier].ram =
usage["gcfv2"][tier].ram + ramGb * SECONDS_PER_MONTH * endpoint.minInstances;
usage["gcfv2"][tier].cpu =
usage["gcfv2"][tier].cpu +
endpoint.cpu * SECONDS_PER_MONTH * endpoint.minInstances;
}
}
let v1MemoryBill = usage["gcfv1"][1].ram * exports.V1_RATES.memoryGb[1] + usage["gcfv1"][2].ram * exports.V1_RATES.memoryGb[2];
v1MemoryBill -= exports.V1_FREE_TIER.memoryGb * exports.V1_RATES.memoryGb[1];
v1MemoryBill = Math.max(v1MemoryBill, 0);
let v1CpuBill = usage["gcfv1"][1].cpu * exports.V1_RATES.idleCpuGhz[1] + usage["gcfv1"][2].cpu * exports.V1_RATES.idleCpuGhz[2];
v1CpuBill -= exports.V1_FREE_TIER.cpuGhz * exports.V1_RATES.cpuGhz[1];
v1CpuBill = Math.max(v1CpuBill, 0);
let v2MemoryBill = usage["gcfv2"][1].ram * exports.V2_RATES.memoryGb[1] + usage["gcfv2"][2].ram * exports.V2_RATES.memoryGb[2];
v2MemoryBill -= exports.V2_FREE_TIER.memoryGb * exports.V2_RATES.memoryGb[1];
v2MemoryBill = Math.max(v2MemoryBill, 0);
let v2CpuBill = usage["gcfv2"][1].cpu * exports.V2_RATES.idleVCpu[1] + usage["gcfv2"][2].cpu * exports.V2_RATES.idleVCpu[2];
v2CpuBill -= exports.V2_FREE_TIER.vCpu * exports.V2_RATES.vCpu[1];
v2CpuBill = Math.max(v2CpuBill, 0);
return v1MemoryBill + v1CpuBill + v2MemoryBill + v2CpuBill;
}
exports.monthlyMinInstanceCost = monthlyMinInstanceCost;