Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 9 additions & 9 deletions src/cli/base-cli-handler.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,13 @@
*
*/

const commandLineArgs = require('command-line-args')
const commandLineUsage = require('command-line-usage')
const commandLineArgs = require('command-line-args');
const commandLineUsage = require('command-line-usage');

class CLIHandler {
constructor() {
this.commandDefinitions = []
this.commands = {}
this.commandDefinitions = [];
this.commands = {};
this.name = ''
}

Expand All @@ -36,14 +36,14 @@ class CLIHandler {
header: key,
optionList: this.commandDefinitions,
group: [key],
}))
}));
const commandsList = {
header: 'Command List',
content: Object.keys(this.commands).map((key) => ({
name: key,
summary: this.commands[key],
})),
}
};

const sections = [
{
Expand All @@ -52,16 +52,16 @@ class CLIHandler {
},
].concat(hasCommands ? commandsList : [])
.concat(showOptions ? options : [])
.concat(additionalSection)
.concat(additionalSection);

const usage = [
{
header: 'ioFogController',
content: 'Fog Controller project for Eclipse IoFog @ iofog.org \\nCopyright (c) 2018 Edgeworx, Inc.',
}
].concat(sections)
].concat(sections);
console.log(commandLineUsage(usage))
}
}

module.exports = CLIHandler
module.exports = CLIHandler;
157 changes: 113 additions & 44 deletions src/cli/catalog.js
Original file line number Diff line number Diff line change
Expand Up @@ -52,28 +52,93 @@ class Catalog extends BaseCLIHandler {

this.name = constants.CMD_CATALOG;
this.commandDefinitions = [
{ name: 'command', defaultOption: true, group: [constants.CMD] },
{ name: 'file', alias: 'f', type: String, description: 'Catalog item settings JSON file', group: [constants.CMD_ADD, constants.CMD_UPDATE] },
{ name: 'item-id', alias: 'i', type: String, description: 'Catalog item ID', group: [constants.CMD_UPDATE, constants.CMD_REMOVE, constants.CMD_INFO] },
{ name: 'name', alias: 'n', type: String, description: 'Catalog item name', group: [constants.CMD_UPDATE, constants.CMD_ADD] },
{ name: 'description', alias: 'd', type: String, description: 'Catalog item description', group: [constants.CMD_UPDATE, constants.CMD_ADD] },
{ name: 'category', alias: 'c', type: String, description: 'Catalog item category', group: [constants.CMD_UPDATE, constants.CMD_ADD] },
{ name: 'x86-image', alias: 'x', type: String, description: 'x86 docker image name', group: [constants.CMD_UPDATE, constants.CMD_ADD] },
{ name: 'arm-image', alias: 'a', type: String, description: 'ARM docker image name', group: [constants.CMD_UPDATE, constants.CMD_ADD] },
{ name: 'publisher', alias: 'p', type: String, description: 'Catalog item publisher name', group: [constants.CMD_UPDATE, constants.CMD_ADD] },
{ name: 'disk-required', alias: 's', type: Number, description: 'Amount of disk required to run the microservice (MB)', group: [constants.CMD_UPDATE, constants.CMD_ADD] },
{ name: 'ram-required', alias: 'r', type: Number, description: 'Amount of RAM required to run the microservice (MB)', group: [constants.CMD_UPDATE, constants.CMD_ADD] },
{ name: 'picture', alias: 't', type: String, description: 'Catalog item picture', group: [constants.CMD_UPDATE, constants.CMD_ADD] },
{ name: 'public', alias: 'P', type: Boolean, description: 'Public catalog item', group: [constants.CMD_UPDATE, constants.CMD_ADD] },
{ name: 'private', alias: 'V', type: Boolean, description: 'Private catalog item', group: [constants.CMD_UPDATE, constants.CMD_ADD] },
{ name: 'registry-id', alias: 'g', type: Number, description: 'Catalog item docker registry ID', group: [constants.CMD_UPDATE, constants.CMD_ADD] },
{ name: 'input-type', alias: 'I', type: String, description: 'Catalog item input type', group: [constants.CMD_UPDATE, constants.CMD_ADD] },
{ name: 'input-format', alias: 'F', type: String, description: 'Catalog item input format', group: [constants.CMD_UPDATE, constants.CMD_ADD] },
{ name: 'output-type', alias: 'O', type: String, description: 'Catalog item output type', group: [constants.CMD_UPDATE, constants.CMD_ADD] },
{ name: 'output-format', alias: 'T', type: String, description: 'Catalog item output format', group: [constants.CMD_UPDATE, constants.CMD_ADD] },
{ name: 'config-example', alias: 'X', type: String, description: 'Catalog item config example', group: [constants.CMD_UPDATE, constants.CMD_ADD] },
{ name: 'user-id', alias: 'u', type: Number, description: 'User\'s id', group: [constants.CMD_ADD] },
]
{
name: 'command', defaultOption: true,
group: [constants.CMD]
},
{
name: 'file', alias: 'f', type: String, description: 'Catalog item settings JSON file',
group: [constants.CMD_ADD, constants.CMD_UPDATE]
},
{
name: 'item-id', alias: 'i', type: String, description: 'Catalog item ID',
group: [constants.CMD_UPDATE, constants.CMD_REMOVE, constants.CMD_INFO]
},
{
name: 'name', alias: 'n', type: String, description: 'Catalog item name',
group: [constants.CMD_UPDATE, constants.CMD_ADD]
},
{
name: 'description', alias: 'd', type: String, description: 'Catalog item description',
group: [constants.CMD_UPDATE, constants.CMD_ADD]
},
{
name: 'category', alias: 'c', type: String, description: 'Catalog item category',
group: [constants.CMD_UPDATE, constants.CMD_ADD]
},
{
name: 'x86-image', alias: 'x', type: String, description: 'x86 docker image name',
group: [constants.CMD_UPDATE, constants.CMD_ADD]
},
{
name: 'arm-image', alias: 'a', type: String, description: 'ARM docker image name',
group: [constants.CMD_UPDATE, constants.CMD_ADD]
},
{
name: 'publisher', alias: 'p', type: String, description: 'Catalog item publisher name',
group: [constants.CMD_UPDATE, constants.CMD_ADD]
},
{
name: 'disk-required', alias: 's', type: Number,
description: 'Amount of disk required to run the microservice (MB)',
group: [constants.CMD_UPDATE, constants.CMD_ADD]
},
{
name: 'ram-required', alias: 'r', type: Number,
description: 'Amount of RAM required to run the microservice (MB)',
group: [constants.CMD_UPDATE, constants.CMD_ADD]
},
{
name: 'picture', alias: 't', type: String, description: 'Catalog item picture',
group: [constants.CMD_UPDATE, constants.CMD_ADD]
},
{
name: 'public', alias: 'P', type: Boolean, description: 'Public catalog item',
group: [constants.CMD_UPDATE, constants.CMD_ADD]
},
{
name: 'private', alias: 'V', type: Boolean, description: 'Private catalog item',
group: [constants.CMD_UPDATE, constants.CMD_ADD]
},
{
name: 'registry-id', alias: 'g', type: Number, description: 'Catalog item docker registry ID',
group: [constants.CMD_UPDATE, constants.CMD_ADD]
},
{
name: 'input-type', alias: 'I', type: String, description: 'Catalog item input type',
group: [constants.CMD_UPDATE, constants.CMD_ADD]
},
{
name: 'input-format', alias: 'F', type: String, description: 'Catalog item input format',
group: [constants.CMD_UPDATE, constants.CMD_ADD]
},
{
name: 'output-type', alias: 'O', type: String, description: 'Catalog item output type',
group: [constants.CMD_UPDATE, constants.CMD_ADD]
},
{
name: 'output-format', alias: 'T', type: String, description: 'Catalog item output format',
group: [constants.CMD_UPDATE, constants.CMD_ADD]
},
{
name: 'config-example', alias: 'X', type: String, description: 'Catalog item config example',
group: [constants.CMD_UPDATE, constants.CMD_ADD]
},
{
name: 'user-id', alias: 'u', type: Number, description: 'User\'s id',
group: [constants.CMD_ADD]
},
];
this.commands = {
[constants.CMD_ADD]: 'Add a new catalog item.',
[constants.CMD_UPDATE]: 'Update existing catalog item.',
Expand All @@ -84,27 +149,31 @@ class Catalog extends BaseCLIHandler {
}

async run(args) {
const catalogCommand = this.parseCommandLineArgs(this.commandDefinitions, {argv: args.argv});

switch (catalogCommand.command.command) {
case constants.CMD_ADD:
await _executeCase(catalogCommand, constants.CMD_ADD, _createCatalogItem, true);
break;
case constants.CMD_UPDATE:
await _executeCase(catalogCommand, constants.CMD_UPDATE, _updateCatalogItem, false);
break;
case constants.CMD_REMOVE:
await _executeCase(catalogCommand, constants.CMD_REMOVE, _deleteCatalogItem, false);
break;
case constants.CMD_LIST:
await _executeCase(catalogCommand, constants.CMD_LIST, _listCatalogItems, false);
break;
case constants.CMD_INFO:
await _executeCase(catalogCommand, constants.CMD_INFO, _listCatalogItem, false);
break;
case constants.CMD_HELP:
default:
return this.help()
try {
const catalogCommand = this.parseCommandLineArgs(this.commandDefinitions, {argv: args.argv, partial: false});

switch (catalogCommand.command.command) {
case constants.CMD_ADD:
await _executeCase(catalogCommand, constants.CMD_ADD, _createCatalogItem, true);
break;
case constants.CMD_UPDATE:
await _executeCase(catalogCommand, constants.CMD_UPDATE, _updateCatalogItem, false);
break;
case constants.CMD_REMOVE:
await _executeCase(catalogCommand, constants.CMD_REMOVE, _deleteCatalogItem, false);
break;
case constants.CMD_LIST:
await _executeCase(catalogCommand, constants.CMD_LIST, _listCatalogItems, false);
break;
case constants.CMD_INFO:
await _executeCase(catalogCommand, constants.CMD_INFO, _listCatalogItem, false);
break;
case constants.CMD_HELP:
default:
return this.help()
}
} catch (error) {
AppHelper.handleCLIError(error);
}
}

Expand All @@ -121,7 +190,7 @@ class Catalog extends BaseCLIHandler {
}
}

const _executeCase = async function (catalogCommand, commandName, f, isUserRequired) {
const _executeCase = async function (catalogCommand, commandName, f, isUserRequired) {
try {
const item = catalogCommand[commandName];

Expand Down
117 changes: 83 additions & 34 deletions src/cli/config.js
Original file line number Diff line number Diff line change
Expand Up @@ -25,19 +25,64 @@ class Config extends BaseCLIHandler {

this.name = constants.CMD_CONFIG;
this.commandDefinitions = [
{ name: 'command', defaultOption: true, group: constants.CMD },
{ name: 'port', alias: 'p', type: Number, description: 'Port', group: constants.CMD_ADD },
{ name: 'ssl-cert', alias: 'c', type: String, description: 'Path to SSL certificate file', group: constants.CMD_ADD },
{ name: 'ssl-key', alias: 'k', type: String, description: 'Path to SSL key file', group: constants.CMD_ADD },
{ name: 'intermediate-cert', alias: 'i', type: String, description: 'Path to SSL intermediate certificate file', group: constants.CMD_ADD },
{ name: 'home-url', alias: 'h', type: String, description: 'Home page url for email activation links', group: constants.CMD_ADD },
{ name: 'email-address', alias: 'a', type: String, description: 'Email address to send activations from', group: constants.CMD_ADD },
{ name: 'email-password', alias: 'w', type: String, description: 'Email password to send activations from', group: constants.CMD_ADD },
{ name: 'email-service', alias: 's', type: String, description: 'Email service to send activations', group: constants.CMD_ADD },
{ name: 'log-dir', alias: 'd', type: String, description: 'Log files directory', group: constants.CMD_ADD },
{ name: 'log-size', alias: 'z', type: Number, description: 'Log files size (MB)', group: constants.CMD_ADD },
{ name: 'on', alias: 'o', type: Boolean, description: 'Enable', group: [constants.CMD_DEV_MODE, constants.CMD_EMAIL_ACTIVATION] },
{ name: 'off', alias: 'f', type: Boolean, description: 'Disable', group: [constants.CMD_DEV_MODE, constants.CMD_EMAIL_ACTIVATION] },
{
name: 'command', defaultOption: true,
group: constants.CMD
},
{
name: 'port', alias: 'p', type: Number, description: 'Port',
group: constants.CMD_ADD
},
{
name: 'ssl-cert', alias: 'c', type: String,
description: 'Path to SSL certificate file',
group: constants.CMD_ADD
},
{
name: 'ssl-key', alias: 'k', type: String, description: 'Path to SSL key file',
group: constants.CMD_ADD
},
{
name: 'intermediate-cert', alias: 'i', type: String,
description: 'Path to SSL intermediate certificate file',
group: constants.CMD_ADD
},
{
name: 'home-url', alias: 'h', type: String,
description: 'Home page url for email activation links',
group: constants.CMD_ADD
},
{
name: 'email-address', alias: 'a', type: String,
description: 'Email address to send activations from',
group: constants.CMD_ADD
},
{
name: 'email-password', alias: 'w', type: String,
description: 'Email password to send activations from',
group: constants.CMD_ADD
},
{
name: 'email-service', alias: 's', type: String,
description: 'Email service to send activations',
group: constants.CMD_ADD
},
{
name: 'log-dir', alias: 'd', type: String, description: 'Log files directory',
group: constants.CMD_ADD
},
{
name: 'log-size', alias: 'z', type: Number,
description: 'Log files size (MB)', group: constants.CMD_ADD
},
{
name: 'on', alias: 'o', type: Boolean, description: 'Enable',
group: [constants.CMD_DEV_MODE, constants.CMD_EMAIL_ACTIVATION]
},
{
name: 'off', alias: 'f', type: Boolean, description: 'Disable',
group: [constants.CMD_DEV_MODE, constants.CMD_EMAIL_ACTIVATION]
},
];
this.commands = {
[constants.CMD_ADD]: 'Add a new config value.',
Expand All @@ -48,29 +93,33 @@ class Config extends BaseCLIHandler {
}

async run(args) {
const configCommand = this.parseCommandLineArgs(this.commandDefinitions, {argv: args.argv});

switch (configCommand.command.command) {
case constants.CMD_ADD:
await _executeCase(configCommand, constants.CMD_ADD, _addConfigOption);
break;
case constants.CMD_LIST:
await _executeCase(configCommand, constants.CMD_LIST, _listConfigOptions);
break;
case constants.CMD_DEV_MODE:
await _executeCase(configCommand, constants.CMD_DEV_MODE, _changeDevModeState);
break;
case constants.CMD_EMAIL_ACTIVATION:
await _executeCase(configCommand, constants.CMD_EMAIL_ACTIVATION, _changeEmailActivationState);
break;
case constants.CMD_HELP:
default:
return this.help([], true, false)
try {
const configCommand = this.parseCommandLineArgs(this.commandDefinitions, {argv: args.argv, partial: false});

switch (configCommand.command.command) {
case constants.CMD_ADD:
await _executeCase(configCommand, constants.CMD_ADD, _addConfigOption);
break;
case constants.CMD_LIST:
await _executeCase(configCommand, constants.CMD_LIST, _listConfigOptions);
break;
case constants.CMD_DEV_MODE:
await _executeCase(configCommand, constants.CMD_DEV_MODE, _changeDevModeState);
break;
case constants.CMD_EMAIL_ACTIVATION:
await _executeCase(configCommand, constants.CMD_EMAIL_ACTIVATION, _changeEmailActivationState);
break;
case constants.CMD_HELP:
default:
return this.help([], true, false)
}
} catch (error) {
AppHelper.handleCLIError(error);
}
}
}

const _executeCase = async function (catalogCommand, commandName, f) {
const _executeCase = async function (catalogCommand, commandName, f) {
try {
const item = catalogCommand[commandName];
await f(item);
Expand Down Expand Up @@ -162,7 +211,7 @@ const updateConfig = async function (newConfigValue, cliConfigName, configName,
if (newConfigValue) {
const oldConfigValue = config.get(configName);
if (newConfigValue !== oldConfigValue) {
await fn(function() {
await fn(function () {
const currentConfigValue = config.get(configName);
logger.info(`Config option ${cliConfigName} has been set to ${currentConfigValue}`);
});
Expand Down Expand Up @@ -197,7 +246,7 @@ const _listConfigOptions = function () {

const _changeDevModeState = function (options) {
const enableDevMode = AppHelper.validateBooleanCliOptions(options.on, options.off);
config.set('Server:DevMode', enableDevMode)
config.set('Server:DevMode', enableDevMode);
logger.info('Dev mode state updated successfully.')
};

Expand Down
Loading