UNPKG

@adinsure-ops/ops-cli

Version:

Operations CLI for working with AdInsure

86 lines (85 loc) 3.36 kB
import { __awaiter } from "tslib"; import { Flags, ux } from '@oclif/core'; import axios from 'axios'; import chalk from 'chalk'; import fs from 'fs-extra'; import os from 'os'; import path from 'path'; import CommandBase from '../../command.base.js'; import OpsConfig from '../../lib/config.js'; class DownloadJmeter extends CommandBase { constructor() { super(...arguments); this.url = 'https://ops.adinsure.com/api/storage/jmeter/'; } // eslint-disable-next-line @typescript-eslint/no-explicit-any downloadFile() { return __awaiter(this, void 0, void 0, function* () { return axios.get(`${this.url}/jmeter-artifacts.zip`, { headers: { Authorization: 'Bearer ' + (yield this.security.getToken()), 'Content-Type': 'application/octet-stream', }, responseType: 'arraybuffer', }); }); } run() { const _super = Object.create(null, { run: { get: () => super.run } }); return __awaiter(this, void 0, void 0, function* () { _super.run.call(this); const { flags } = yield this.parse(DownloadJmeter); let outputDir = flags.output; if (!outputDir) { // If the user didn't provide the output flag, try to get the default from config. const config = new OpsConfig(this.security.getConfigPath()); const defaultFolder = config.get('download_folder'); outputDir = defaultFolder || './'; // no flag -> DEFAULT output is "./" } // Expand tilde if present const basePath = outputDir.charAt(0) === '~' ? os.homedir() + outputDir.split('~')[1] : outputDir; const filename = `jmeter-artifacts.zip`; const filePath = path.resolve(basePath, filename); ux.action.start(`Downloading jmeter examples to ${filePath}`, undefined, { stdout: true }); try { const file = yield this.downloadFile(); const writeStream = fs.createWriteStream(filePath); writeStream.write(file.data, 'binary'); writeStream.on('finish', () => { ux.action.stop(`${chalk.green('OK')}`); }); writeStream.end(); // eslint-disable-next-line @typescript-eslint/no-explicit-any } catch (error) { switch (error.statusCode) { case 404: { this.error('Does not exist.', { exit: 1 }); } case 400: { this.error('Try refreshing your login credentials with "ops login".', { exit: 1 }); } default: { this.error(error.message); } } } }); } } DownloadJmeter.description = 'download jmeter examples from Azure storage'; DownloadJmeter.usage = 'download:jmeter <flags>'; DownloadJmeter.examples = [ `$ ops download:jmeter -o ~/Downloads`, ]; DownloadJmeter.flags = { output: Flags.string({ char: 'o', description: 'output directory', }), }; export default DownloadJmeter;