UNPKG

@flxbl-io/sfp

Version:

sfp is a CLI tool to help you manage your Salesforce projects in an artifact centric model

128 lines 12.9 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const SfpCommand_1 = __importDefault(require("../../../SfpCommand")); const SFPStatsSender_1 = __importDefault(require("../../../core/stats/SFPStatsSender")); const PoolListImpl_1 = __importDefault(require("../../../core/scratchorg/pool/PoolListImpl")); const LimitsFetcher_1 = __importDefault(require("../../../core/limits/LimitsFetcher")); const Table = require('cli-table'); const sfp_logger_1 = __importStar(require("@flxbl-io/sfp-logger")); const core_1 = require("@salesforce/core"); const sfdxflags_1 = require("../../../flags/sfdxflags"); // Initialize Messages with the current plugin directory core_1.Messages.importMessagesDirectory(__dirname); // Load the specific messages for this file. Messages from @salesforce/command, @salesforce/core, // or any library that is using the messages framework can also be loaded this way. const messages = core_1.Messages.loadMessages('@flxbl-io/sfp', 'scratchorg_pool_metrics_publish'); class Publish extends SfpCommand_1.default { async execute() { this.validateEnvVars(); let nPooledScratchOrgs = 0; let pools; try { const listOfScratchOrgs = (await new PoolListImpl_1.default(this.hubOrg, null, true).execute()); nPooledScratchOrgs = listOfScratchOrgs.length ? listOfScratchOrgs.length : 0; pools = this.getMetricsForEachPool(listOfScratchOrgs); } catch (err) { sfp_logger_1.default.log(`Failed to get metrics for scratch org pools. Ensure prerequisites are installed for pooling.`, sfp_logger_1.LoggerLevel.TRACE); } const table = new Table({ head: ['Metric', 'Value', 'Tag'], }); const limits = await new LimitsFetcher_1.default(this.hubOrg.getConnection()).getApiLimits(); const remainingActiveScratchOrgs = limits.find((limit) => limit.name === 'ActiveScratchOrgs').remaining; const remainingDailyScratchOrgs = limits.find((limit) => limit.name === 'DailyScratchOrgs').remaining; const devhubUserName = this.hubOrg.getUsername(); SFPStatsSender_1.default.logGauge(`scratchorgs.active.remaining`, remainingActiveScratchOrgs, { target_org: devhubUserName }); SFPStatsSender_1.default.logGauge(`scratchorgs.daily.remaining`, remainingDailyScratchOrgs, { target_org: devhubUserName }); table.push(['sfpowerscripts.scratchorgs.active.remaining', remainingActiveScratchOrgs, devhubUserName]); table.push(['sfpowerscripts.scratchorgs.daily.remaining', remainingDailyScratchOrgs, devhubUserName]); SFPStatsSender_1.default.logGauge(`pool.footprint`, nPooledScratchOrgs); table.push(['sfpowerscripts.pool.footprint', nPooledScratchOrgs, '']); if (pools) { for (let pool of Object.entries(pools)) { SFPStatsSender_1.default.logGauge('pool.total', pool[1].nTotal, { poolName: pool[0] }); SFPStatsSender_1.default.logGauge('pool.available', pool[1].nAvailable, { poolName: pool[0] }); SFPStatsSender_1.default.logGauge('pool.inuse', pool[1].nInUse, { poolName: pool[0] }); SFPStatsSender_1.default.logGauge('pool.provisioning', pool[1].nProvisioningInProgress, { poolName: pool[0] }); table.push(['sfpowerscripts.pool.total', pool[1].nTotal, pool[0]]); table.push(['sfpowerscripts.pool.available', pool[1].nAvailable, pool[0]]); table.push(['sfpowerscripts.pool.inuse', pool[1].nInUse, pool[0]]); table.push(['sfpowerscripts.pool.provisioning', pool[1].nProvisioningInProgress, pool[0]]); } } sfp_logger_1.default.log((0, sfp_logger_1.COLOR_KEY_MESSAGE)('Metrics published:'), sfp_logger_1.LoggerLevel.INFO); sfp_logger_1.default.log(table.toString(), sfp_logger_1.LoggerLevel.INFO); } getMetricsForEachPool(listOfScratchOrgs) { const pools = {}; listOfScratchOrgs.forEach((scratchOrg) => { if (!pools[scratchOrg.tag]) { pools[scratchOrg.tag] = { nTotal: 0, nAvailable: 0, nInUse: 0, nProvisioningInProgress: 0, }; } if (scratchOrg.status === 'Available') { pools[scratchOrg.tag].nAvailable++; } else if (scratchOrg.status === 'In use') { pools[scratchOrg.tag].nInUse++; } else if (scratchOrg.status === 'Provisioning in progress') { pools[scratchOrg.tag].nProvisioningInProgress++; } pools[scratchOrg.tag].nTotal = pools[scratchOrg.tag].nAvailable + pools[scratchOrg.tag].nInUse + pools[scratchOrg.tag].nProvisioningInProgress; }); return pools; } validateEnvVars() { if (!(process.env.SFPOWERSCRIPTS_STATSD || process.env.SFPOWERSCRIPTS_DATADOG || process.env.SFPOWERSCRIPTS_NEWRELIC || process.env.SFPOWERSCRIPTS_SPLUNK)) { throw new Error('Environment variable not set for metrics. No metrics will be published.'); } } } Publish.description = messages.getMessage('commandDescription'); Publish.requiresDevhubUsername = true; Publish.requiresProject = false; Publish.examples = ['$ sfp pool:metrics:publish -v <myDevHub>']; Publish.flags = { targetdevhubusername: sfdxflags_1.targetdevhubusername, loglevel: sfdxflags_1.loglevel }; exports.default = Publish; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGlzaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21tYW5kcy9wb29sL21ldHJpY3MvcHVibGlzaC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEscUVBQTZDO0FBQzdDLHdGQUFnRTtBQUNoRSw4RkFBc0U7QUFFdEUsdUZBQStEO0FBQy9ELE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUNuQyxtRUFBaUY7QUFDakYsMkNBQTRDO0FBQzVDLHdEQUEwRTtBQUUxRSx3REFBd0Q7QUFDeEQsZUFBUSxDQUFDLHVCQUF1QixDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBRTVDLGlHQUFpRztBQUNqRyxtRkFBbUY7QUFDbkYsTUFBTSxRQUFRLEdBQUcsZUFBUSxDQUFDLFlBQVksQ0FBQyxlQUFlLEVBQUUsaUNBQWlDLENBQUMsQ0FBQztBQUUzRixNQUFxQixPQUFRLFNBQVEsb0JBQVU7SUFhcEMsS0FBSyxDQUFDLE9BQU87UUFDaEIsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBRXZCLElBQUksa0JBQWtCLEdBQVcsQ0FBQyxDQUFDO1FBQ25DLElBQUksS0FBbUMsQ0FBQztRQUV4QyxJQUFJLENBQUM7WUFDRCxNQUFNLGlCQUFpQixHQUFHLENBQUMsTUFBTSxJQUFJLHNCQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQWlCLENBQUM7WUFFdEcsa0JBQWtCLEdBQUcsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM3RSxLQUFLLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDMUQsQ0FBQztRQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7WUFD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