csa-cli-plugin
Version:
### In Beta
78 lines (70 loc) • 2.45 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _cliEngineHeroku = require('cli-engine-heroku');
function capitalize(str) {
return str.replace(/\w\S*/g, function (txt) {
return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();
});
}
class HpmGenerator extends _cliEngineHeroku.Command {
async run() {
let name = this.argv[0] || this.flags.app;
let app = {
addons: await this.heroku.get(`/apps/${name}/addons`),
dynos: await this.heroku.get(`/apps/${name}/dynos`),
info: await this.heroku.get(`/apps/${name}`),
buildpacks: await this.heroku.get(`/apps/${name}/buildpack-installations`)
};
try {
let webDynos = [];
let workerDynos = [];
if (app.dynos.length > 0) {
webDynos = app.dynos.filter(function (dyno) {
return dyno.type.indexOf('web') !== -1;
});
workerDynos = app.dynos.filter(function (dyno) {
return dyno.type.indexOf('web') === -1;
});
}
let runtime = ` - Runtime: ${capitalize(app.info.stack.name)}\n`;
let addons = app.addons.map(a => a.plan.name).sort();
let buildpack = ``;
let addonList = ``;
let web = ``;
let worker = ``;
if (webDynos.length === 0) {
web = `No Web Dynos\n`;
} else {
web = `- ${webDynos.length} ${webDynos[0].size} Web Dynos\n`;
}
if (workerDynos.length === 0) {
worker = `No Worker Dynos\n`;
} else {
worker = `- ${workerDynos.length} ${workerDynos[0].size} Worker Dynos\n`;
}
for (let i in app.buildpacks) {
let obj = app.buildpacks[i];
buildpack += ' - Buildpack: ' + capitalize(obj.buildpack.name) + '\n';
}
for (let i in addons) {
let str = addons[i].replace(/-/g, ' ').replace(/:/g, ' ');
str = capitalize(str);
addonList += '- ' + str + '\n';
}
let output = `CONFIGURATION\n${web}${runtime}${buildpack}${worker}${addonList}`;
this.out.log(output);
} catch (err) {
this.out.log(err, 'error obtaining app configuration');
}
}
}
exports.default = HpmGenerator;
HpmGenerator.topic = 'hpm';
HpmGenerator.command = 'assessment';
HpmGenerator.description = 'generates resources for app assessment';
HpmGenerator.args = [{ name: 'app', optional: true }];
HpmGenerator.flags = {
app: _cliEngineHeroku.flags.app({ required: false })
};