@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
JavaScript
;
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW5pdENvbW1hbmRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1hbmRzL0luaXRDb21tYW5kcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztBQUFBLDRDQUFtQjtBQUVuQiwwREFRK0I7QUFDL0IseUNBQW1DO0FBQ25DLCtDQUFtRDtBQUVuRCxNQUFxQixZQUFZO0lBQ2hDO1FBQ0MsbUJBQU87YUFDTCxPQUFPLENBQUMsTUFBTSxDQUFDO2FBQ2YsV0FBVyxDQUFDLCtCQUErQixDQUFDO2FBQzVDLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO0lBQ3RDLENBQUM7SUFFRCxNQUFNLENBQUMsSUFBSTtRQUNWLE9BQU8sSUFBSSxZQUFZLEVBQUUsQ0FBQTtJQUMxQixDQUFDO0lBRUssV0FBVzs7WUFDaEIsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUE7WUFDM0MsNEJBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUE7WUFFakQsSUFBSSxDQUFBLE1BQU0sSUFBSSxDQUFDLHdCQUF3QixFQUFFLE1BQUssS0FBSyxFQUFFLENBQUM7Z0JBQ3JELE9BQU07WUFDUCxDQUFDO1lBQ0QsSUFBSSxNQUFNLENBQUMsc0JBQXNCLEVBQUUsS0FBSyxtQ0FBbUIsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDbEUsNEJBQVksQ0FBQyxHQUFHLENBQUMsc0pBQXNKLENBQUMsQ0FBQTtZQUN6SyxDQUFDO1lBQ0QsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUE7UUFDcEMsQ0FBQztLQUFBO0lBRUssZUFBZTs7WUFDcEIsTUFBTSxNQUFNLEdBQUcsOEJBQWMsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFBO1lBRWhE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