UNPKG

@oaklean/cli

Version:

A command-line interface that provides utilities for parsing, inspecting, and converting the .oak file format, as well as interfaces used in the @oaklean suite.

134 lines 10.1 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const os_1 = __importDefault(require("os")); const profiler_core_1 = require("@oaklean/profiler-core"); const commander_1 = require("commander"); const prompts_1 = require("@inquirer/prompts"); class InitCommands { constructor() { commander_1.program .command('init') .description('Create a .oaklean config file') .action(this.initCommand.bind(this)); } static init() { return new InitCommands(); } initCommand() { return __awaiter(this, void 0, void 0, function* () { const config = yield this.configureConfig(); profiler_core_1.LoggerHelper.log(JSON.stringify(config, null, 2)); if ((yield this.confirmConfigFileContent()) === false) { return; } if (config.getSensorInterfaceType() === profiler_core_1.SensorInterfaceType.perf) { profiler_core_1.LoggerHelper.log('perf sensor interface selected, for more information how to setup perf see https://github.com/hitabisgmbh/oaklean/blob/main/docs/SensorInterfaces.md'); } config.storeToFile(config.filePath); }); } configureConfig() { return __awaiter(this, void 0, void 0, function* () { const config = profiler_core_1.ProfilerConfig.getDefaultConfig(); // select sensor interface const selectedSensorInterface = yield this.selectSensorInterface(); switch (selectedSensorInterface) { case undefined: config.runtimeOptions.sensorInterface = undefined; break; case profiler_core_1.SensorInterfaceType.perf: config.runtimeOptions.sensorInterface = { type: profiler_core_1.SensorInterfaceType.perf, options: { outputFilePath: 'energy-measurements.txt', sampleInterval: 100, } }; break; case profiler_core_1.SensorInterfaceType.powermetrics: config.runtimeOptions.sensorInterface = { type: profiler_core_1.SensorInterfaceType.powermetrics, options: { outputFilePath: 'energy-measurements.plist', sampleInterval: 100, } }; break; case profiler_core_1.SensorInterfaceType.windows: config.runtimeOptions.sensorInterface = { type: profiler_core_1.SensorInterfaceType.windows, options: { outputFilePath: 'energy-measurements.csv', sampleInterval: 100, } }; break; default: break; } config.projectOptions.identifier = profiler_core_1.Crypto.uniqueID(); config.registryOptions = undefined; return config; }); } confirmConfigFileContent() { return __awaiter(this, void 0, void 0, function* () { return yield (0, prompts_1.confirm)({ message: 'Is this OK? (yes)', default: true }); }); } selectSensorInterface() { return __awaiter(this, void 0, void 0, function* () { const sensorInterfacePerPlatform = { 'linux': profiler_core_1.SensorInterfaceType.perf, 'darwin': profiler_core_1.SensorInterfaceType.powermetrics, 'win32': profiler_core_1.SensorInterfaceType.windows }; const recommendedSensorInterface = sensorInterfacePerPlatform[os_1.default.platform()]; const recommendedSensorInterfaceMessage = recommendedSensorInterface !== undefined ? `recommended for your platform: ${recommendedSensorInterface}` : 'No recommended sensor interface for this platform.'; return yield (0, prompts_1.select)({ message: `Select a sensor interface (${recommendedSensorInterfaceMessage})`, choices: [ { name: 'None (pure cpu time measurements)', value: undefined, description: 'pure cpu time measurements without energy measurements', }, { name: 'powermetrics (macOS only)', value: profiler_core_1.SensorInterfaceType.powermetrics, description: 'energy measurements on macOS', }, { name: 'perf (Linux only)', value: profiler_core_1.SensorInterfaceType.perf, description: 'energy measurements on Linux (Intel & AMD CPUs only)', }, { name: 'windows (Windows only)', value: profiler_core_1.SensorInterfaceType.windows, description: 'energy measurements on Windows (Intel & AMD CPUs only)', } ], }); }); } } exports.default = InitCommands; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW5pdENvbW1hbmRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1hbmRzL0luaXRDb21tYW5kcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztBQUFBLDRDQUFtQjtBQUVuQiwwREFRK0I7QUFDL0IseUNBQW1DO0FBQ25DLCtDQUFtRDtBQUVuRCxNQUFxQixZQUFZO0lBQ2hDO1FBQ0MsbUJBQU87YUFDTCxPQUFPLENBQUMsTUFBTSxDQUFDO2FBQ2YsV0FBVyxDQUFDLCtCQUErQixDQUFDO2FBQzVDLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO0lBQ3RDLENBQUM7SUFFRCxNQUFNLENBQUMsSUFBSTtRQUNWLE9BQU8sSUFBSSxZQUFZLEVBQUUsQ0FBQTtJQUMxQixDQUFDO0lBRUssV0FBVzs7WUFDaEIsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUE7WUFDM0MsNEJBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUE7WUFFakQsSUFBSSxDQUFBLE1BQU0sSUFBSSxDQUFDLHdCQUF3QixFQUFFLE1BQUssS0FBSyxFQUFFLENBQUM7Z0JBQ3JELE9BQU07WUFDUCxDQUFDO1lBQ0QsSUFBSSxNQUFNLENBQUMsc0JBQXNCLEVBQUUsS0FBSyxtQ0FBbUIsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDbEUsNEJBQVksQ0FBQyxHQUFHLENBQUMsc0pBQXNKLENBQUMsQ0FBQTtZQUN6SyxDQUFDO1lBQ0QsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUE7UUFDcEMsQ0FBQztLQUFBO0lBRUssZUFBZTs7WUFDcEIsTUFBTSxNQUFNLEdBQUcsOEJBQWMsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFBO1lBRWhELDBCQUEwQjtZQUMxQixNQUFNLHVCQUF1QixHQUFHLE1BQU0sSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUE7WUFDbEUsUUFBUSx1QkFBdUIsRUFBRSxDQUFDO2dCQUNqQyxLQUFLLFNBQVM7b0JBQ2IsTUFBTSxDQUFDLGNBQWMsQ0FBQyxlQUFlLEdBQUcsU0FBUyxDQUFBO29CQUNqRCxNQUFLO2dCQUNOLEtBQUssbUNBQW1CLENBQUMsSUFBSTtvQkFDNUIsTUFBTSxDQUFDLGNBQWMsQ0FBQyxlQUFlLEdBQUc7d0JBQ3ZDLElBQUksRUFBRSxtQ0FBbUIsQ0FBQyxJQUFJO3dCQUM5QixPQUFPLEVBQUU7NEJBQ1IsY0FBYyxFQUFFLHlCQUF5Qjs0QkFDekMsY0FBYyxFQUFFLEdBQTBCO3lCQUMxQztxQkFDRCxDQUFBO29CQUNELE1BQUs7Z0JBQ04sS0FBSyxtQ0FBbUIsQ0FBQyxZQUFZO29CQUNwQyxNQUFNLENBQUMsY0FBYyxDQUFDLGVBQWUsR0FBRzt3QkFDdkMsSUFBSSxFQUFFLG1DQUFtQixDQUFDLFlBQVk7d0JBQ3RDLE9BQU8sRUFBRTs0QkFDUixjQUFjLEVBQUUsMkJBQTJCOzRCQUMzQyxjQUFjLEVBQUUsR0FBMEI7eUJBQzFDO3FCQUNELENBQUE7b0JBQ0QsTUFBSztnQkFDTixLQUFLLG1DQUFtQixDQUFDLE9BQU87b0JBQy9CLE1BQU0sQ0FBQyxjQUFjLENBQUMsZUFBZSxHQUFHO3dCQUN2QyxJQUFJLEVBQUUsbUNBQW1CLENBQUMsT0FBTzt3QkFDakMsT0FBTyxFQUFFOzRCQUNSLGNBQWMsRUFBRSx5QkFBeUI7NEJBQ3pDLGNBQWMsRUFBRSxHQUEwQjt5QkFDMUM7cUJBQ0QsQ0FBQTtvQkFDRCxNQUFLO2dCQUNOO29CQUNDLE1BQUs7WUFDUCxDQUFDO1lBRUQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxVQUFVLEdBQUcsc0JBQU0sQ0FBQyxRQUFRLEVBQThCLENBQUE7WUFDaEYsTUFBTSxDQUFDLGVBQWUsR0FBRyxTQUF1QyxDQUFBO1lBQ2hFLE9BQU8sTUFBTSxDQUFBO1FBQ2QsQ0FBQztLQUFBO0lBRUssd0JBQXdCOztZQUM3QixPQUFPLE1BQU0sSUFBQSxpQkFBTyxFQUFDO2dCQUNwQixPQUFPLEVBQUUsbUJBQW1CO2dCQUM1QixPQUFPLEVBQUUsSUFBSTthQUNiLENBQUMsQ0FBQTtRQUNILENBQUM7S0FBQTtJQUVLLHFCQUFxQjs7WUFDMUIsTUFBTSwwQkFBMEIsR0FBMEQ7Z0JBQ3pGLE9BQU8sRUFBRSxtQ0FBbUIsQ0FBQyxJQUFJO2dCQUNqQyxRQUFRLEVBQUUsbUNBQW1CLENBQUMsWUFBWTtnQkFDMUMsT0FBTyxFQUFFLG1DQUFtQixDQUFDLE9BQU87YUFDcEMsQ0FBQTtZQUVELE1BQU0sMEJBQTBCLEdBQUcsMEJBQTBCLENBQUMsWUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUE7WUFDNUUsTUFBTSxpQ0FBaUMsR0FBRywwQkFBMEIsS0FBSyxTQUFTLENBQUMsQ0FBQztnQkFDbkYsa0NBQWtDLDBCQUEwQixFQUFFLENBQUMsQ0FBQztnQkFDaEUsb0RBQW9ELENBQUE7WUFDckQsT0FBTyxNQUFNLElBQUEsZ0JBQU0sRUFBa0M7Z0JBQ3BELE9BQU8sRUFBRSw4QkFBOEIsaUNBQWlDLEdBQUc7Z0JBQzNFLE9BQU8sRUFBRTtvQkFDUjt3QkFDQyxJQUFJLEVBQUUsbUNBQW1DO3dCQUN6QyxLQUFLLEVBQUUsU0FBUzt3QkFDaEIsV0FBVyxFQUFFLHdEQUF3RDtxQkFDckU7b0JBQ0Q7d0JBQ0MsSUFBSSxFQUFFLDJCQUEyQjt3QkFDakMsS0FBSyxFQUFFLG1DQUFtQixDQUFDLFlBQVk7d0JBQ3ZDLFdBQVcsRUFBRSw4QkFBOEI7cUJBQzNDO29CQUNEO3dCQUNDLElBQUksRUFBRSxtQkFBbUI7d0JBQ3pCLEtBQUssRUFBRSxtQ0FBbUIsQ0FBQyxJQUFJO3dCQUMvQixXQUFXLEVBQUUsc0RBQXNEO3FCQUNuRTtvQkFDRDt3QkFDQyxJQUFJLEVBQUUsd0JBQXdCO3dCQUM5QixLQUFLLEVBQUUsbUNBQW1CLENBQUMsT0FBTzt3QkFDbEMsV0FBVyxFQUFFLHdEQUF3RDtxQkFDckU7aUJBQ0Q7YUFDRCxDQUFDLENBQUE7UUFDSCxDQUFDO0tBQUE7Q0FDRDtBQWxIRCwrQkFrSEMifQ==