diff options
author | Vijay Bellur <vijay@gluster.com> | 2010-08-17 03:37:46 +0000 |
---|---|---|
committer | Anand V. Avati <avati@dev.gluster.com> | 2010-08-17 02:23:59 -0700 |
commit | e5737546071bd1d38430503bb64b9998bd7870dd (patch) | |
tree | c5a9fe82f2474ff6c8792381c1b77384c9f82983 | |
parent | ead92558ee8ec71442b2fa2da1a0df197ee78467 (diff) |
cli: Implement help command
Signed-off-by: Vijay Bellur <vijay@gluster.com>
Signed-off-by: Anand V. Avati <avati@dev.gluster.com>
BUG: 1229 ()
URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=1229
-rw-r--r-- | cli/src/cli-cmd-log.c | 10 | ||||
-rw-r--r-- | cli/src/cli-cmd-misc.c | 40 | ||||
-rw-r--r-- | cli/src/cli-cmd-peer.c | 14 | ||||
-rw-r--r-- | cli/src/cli-cmd-volume.c | 47 | ||||
-rw-r--r-- | cli/src/cli-cmd.c | 3 | ||||
-rw-r--r-- | cli/src/cli-cmd.h | 1 | ||||
-rw-r--r-- | cli/src/cli.h | 3 | ||||
-rw-r--r-- | cli/src/registry.c | 8 |
8 files changed, 94 insertions, 32 deletions
diff --git a/cli/src/cli-cmd-log.c b/cli/src/cli-cmd-log.c index 9b905965dc6..0365f57cb53 100644 --- a/cli/src/cli-cmd-log.c +++ b/cli/src/cli-cmd-log.c @@ -46,10 +46,11 @@ cli_cmd_log_cbk (struct cli_state *state, struct cli_cmd_word *word, } struct cli_cmd cli_log_cmds[] = { - { "log [VOLNAME] ...", - cli_cmd_log_cbk }, + { "log <VOLNAME> ...", + cli_cmd_log_cbk, + "set log level for <VOLNAME>"}, - { NULL, NULL } + { NULL, NULL, NULL } }; @@ -60,7 +61,8 @@ cli_cmd_log_register (struct cli_state *state) struct cli_cmd *cmd = NULL; for (cmd = cli_log_cmds; cmd->pattern; cmd++) { - ret = cli_cmd_register (&state->tree, cmd->pattern, cmd->cbk); + ret = cli_cmd_register (&state->tree, cmd->pattern, cmd->cbk, + cmd->desc); if (ret) goto out; } diff --git a/cli/src/cli-cmd-misc.c b/cli/src/cli-cmd-misc.c index 9e78ca607e1..1c99bf93052 100644 --- a/cli/src/cli-cmd-misc.c +++ b/cli/src/cli-cmd-misc.c @@ -37,6 +37,11 @@ extern struct rpc_clnt *global_rpc; extern rpc_clnt_prog_t *cli_rpc_prog; +extern struct cli_cmd volume_cmds[]; +extern struct cli_cmd cli_probe_cmds[]; +extern struct cli_cmd cli_log_cmds[]; +struct cli_cmd cli_misc_cmds[]; + int cli_cmd_quit_cbk (struct cli_state *state, struct cli_cmd_word *word, const char **words, int wordcount) @@ -44,12 +49,40 @@ cli_cmd_quit_cbk (struct cli_state *state, struct cli_cmd_word *word, exit (0); } +int +cli_cmd_display_help (struct cli_state *state, struct cli_cmd_word *in_word, + const char **words, int wordcount) +{ + struct cli_cmd *cmd = NULL; + + for (cmd = volume_cmds; cmd->pattern; cmd++) + cli_out ("%s - %s", cmd->pattern, cmd->desc); + + for (cmd = cli_probe_cmds; cmd->pattern; cmd++) + cli_out ("%s - %s", cmd->pattern, cmd->desc); + + for (cmd = cli_log_cmds; cmd->pattern; cmd++) + cli_out ("%s - %s", cmd->pattern, cmd->desc); + + for (cmd = cli_misc_cmds; cmd->pattern; cmd++) + cli_out ("%s - %s", cmd->pattern, cmd->desc); + + if (!state->rl_enabled) + exit (0); + + return 0; +} + struct cli_cmd cli_misc_cmds[] = { { "quit", - cli_cmd_quit_cbk }, + cli_cmd_quit_cbk, + "quit"}, + { "help", + cli_cmd_display_help, + "display command options"}, - { NULL, NULL } + { NULL, NULL, NULL } }; @@ -60,7 +93,8 @@ cli_cmd_misc_register (struct cli_state *state) struct cli_cmd *cmd = NULL; for (cmd = cli_misc_cmds; cmd->pattern; cmd++) { - ret = cli_cmd_register (&state->tree, cmd->pattern, cmd->cbk); + ret = cli_cmd_register (&state->tree, cmd->pattern, cmd->cbk, + cmd->desc); if (ret) goto out; } diff --git a/cli/src/cli-cmd-peer.c b/cli/src/cli-cmd-peer.c index 2959444fe81..b9acd344a43 100644 --- a/cli/src/cli-cmd-peer.c +++ b/cli/src/cli-cmd-peer.c @@ -174,15 +174,18 @@ out: struct cli_cmd cli_probe_cmds[] = { { "peer probe <HOSTNAME> [PORT]", - cli_cmd_peer_probe_cbk }, + cli_cmd_peer_probe_cbk, + "probe peer specified by <HOSTNAME>"}, { "peer detach <HOSTNAME>", - cli_cmd_peer_deprobe_cbk }, + cli_cmd_peer_deprobe_cbk, + "detach peer specified by <HOSTNAME>"}, { "peer status", - cli_cmd_peer_status_cbk}, + cli_cmd_peer_status_cbk, + "list status of peers"}, - { NULL, NULL } + { NULL, NULL, NULL } }; @@ -193,7 +196,8 @@ cli_cmd_probe_register (struct cli_state *state) struct cli_cmd *cmd = NULL; for (cmd = cli_probe_cmds; cmd->pattern; cmd++) { - ret = cli_cmd_register (&state->tree, cmd->pattern, cmd->cbk); + ret = cli_cmd_register (&state->tree, cmd->pattern, cmd->cbk, + cmd->desc); if (ret) goto out; } diff --git a/cli/src/cli-cmd-volume.c b/cli/src/cli-cmd-volume.c index 63c15473072..5a0817e128d 100644 --- a/cli/src/cli-cmd-volume.c +++ b/cli/src/cli-cmd-volume.c @@ -437,48 +437,62 @@ cli_cmd_volume_set_transport_cbk (struct cli_state *state, struct cli_cmd volume_cmds[] = { { "volume info [all|<VOLNAME>]", - cli_cmd_volume_info_cbk }, + cli_cmd_volume_info_cbk, + "list information of all volumes"}, { "volume create <NEW-VOLNAME> [stripe <COUNT>] [replicate <COUNT>] <NEW-BRICK> ...", - cli_cmd_volume_create_cbk }, + cli_cmd_volume_create_cbk, + "create a new volume of specified type with mentioned bricks"}, { "volume delete <VOLNAME>", - cli_cmd_volume_delete_cbk }, + cli_cmd_volume_delete_cbk, + "delete volume specified by <VOLNAME>"}, { "volume start <VOLNAME>", - cli_cmd_volume_start_cbk }, + cli_cmd_volume_start_cbk, + "start volume specified by <VOLNAME>"}, { "volume stop <VOLNAME>", - cli_cmd_volume_stop_cbk }, + cli_cmd_volume_stop_cbk, + "stop volume specified by <VOLNAME>"}, { "volume rename <VOLNAME> <NEW-VOLNAME>", - cli_cmd_volume_rename_cbk }, + cli_cmd_volume_rename_cbk, + "rename volume <VOLNAME> to <NEW-VOLNAME>"}, { "volume add-brick <VOLNAME> [(replica <COUNT>)|(stripe <COUNT>)] <NEW-BRICK> ...", - cli_cmd_volume_add_brick_cbk }, + cli_cmd_volume_add_brick_cbk, + "add brick to volume <VOLNAME>"}, { "volume remove-brick <VOLNAME> [(replica <COUNT>)|(stripe <COUNT>)] <BRICK> ...", - cli_cmd_volume_remove_brick_cbk }, + cli_cmd_volume_remove_brick_cbk, + "remove brick from volume <VOLNAME>"}, { "volume rebalance <VOLNAME> start", - cli_cmd_volume_defrag_cbk }, + cli_cmd_volume_defrag_cbk, + "start rebalance of volume <VOLNAME>"}, { "volume rebalance <VOLNAME> stop", - cli_cmd_volume_defrag_cbk }, + cli_cmd_volume_defrag_cbk, + "stop rebalance of volume <VOLNAME>"}, { "volume rebalance <VOLNAME> status", - cli_cmd_volume_defrag_cbk }, + cli_cmd_volume_defrag_cbk, + "rebalance status of volume <VOLNAME>"}, { "volume replace-brick <VOLNAME> (<BRICK> <NEW-BRICK>)|pause|abort|start|status", - cli_cmd_volume_replace_brick_cbk }, + cli_cmd_volume_replace_brick_cbk, + "replace-brick operations"}, { "volume set-transport <VOLNAME> <TRANSPORT-TYPE> [<TRANSPORT-TYPE>] ...", - cli_cmd_volume_set_transport_cbk }, + cli_cmd_volume_set_transport_cbk, + "set transport type for volume <VOLNAME>"}, { "volume set <VOLNAME> <KEY> <VALUE>", - cli_cmd_volume_set_cbk }, + cli_cmd_volume_set_cbk, + "set options for volume <VOLNAME>"}, - { NULL, NULL } + { NULL, NULL, NULL } }; @@ -489,7 +503,8 @@ cli_cmd_volume_register (struct cli_state *state) struct cli_cmd *cmd = NULL; for (cmd = volume_cmds; cmd->pattern; cmd++) { - ret = cli_cmd_register (&state->tree, cmd->pattern, cmd->cbk); + ret = cli_cmd_register (&state->tree, cmd->pattern, cmd->cbk, + cmd->desc); if (ret) goto out; } diff --git a/cli/src/cli-cmd.c b/cli/src/cli-cmd.c index 4353cb6e7b6..d7a4fcd837a 100644 --- a/cli/src/cli-cmd.c +++ b/cli/src/cli-cmd.c @@ -50,6 +50,9 @@ cli_cmd_needs_connection (struct cli_cmd_word *word) if (!strcasecmp ("quit", word->word)) return _gf_false; + if (!strcasecmp ("help", word->word)) + return _gf_false; + return _gf_true; } diff --git a/cli/src/cli-cmd.h b/cli/src/cli-cmd.h index d62309de23c..b325cfdfccc 100644 --- a/cli/src/cli-cmd.h +++ b/cli/src/cli-cmd.h @@ -30,6 +30,7 @@ struct cli_cmd { const char *pattern; cli_cmd_cbk_t *cbk; + const char *desc; }; int cli_cmd_volume_register (struct cli_state *state); diff --git a/cli/src/cli.h b/cli/src/cli.h index 9efabfe589d..9bc0b50946a 100644 --- a/cli/src/cli.h +++ b/cli/src/cli.h @@ -56,6 +56,7 @@ struct cli_cmd_word { cli_cmd_filler_t *filler; cli_cmd_match_t *match; cli_cmd_cbk_t *cbkfn; + const char *desc; int nextwords_cnt; struct cli_cmd_word **nextwords; @@ -134,7 +135,7 @@ typedef ssize_t (*cli_serialize_t) (struct iovec outmsg, void *args); extern struct cli_state *global_state; /* use only in readline callback */ int cli_cmd_register (struct cli_cmd_tree *tree, const char *template, - cli_cmd_cbk_t cbk); + cli_cmd_cbk_t cbk, const char *desc); int cli_cmds_register (struct cli_state *state); int cli_input_init (struct cli_state *state); diff --git a/cli/src/registry.c b/cli/src/registry.c index 0ced00787c8..f7e366fd66c 100644 --- a/cli/src/registry.c +++ b/cli/src/registry.c @@ -318,7 +318,8 @@ cli_cmd_newword (struct cli_cmd_word *word, const char *token) int -cli_cmd_ingest (struct cli_cmd_tree *tree, char **tokens, cli_cmd_cbk_t *cbkfn) +cli_cmd_ingest (struct cli_cmd_tree *tree, char **tokens, cli_cmd_cbk_t *cbkfn, + const char *desc) { int ret = 0; char **tokenp = NULL; @@ -349,6 +350,7 @@ cli_cmd_ingest (struct cli_cmd_tree *tree, char **tokens, cli_cmd_cbk_t *cbkfn) } word->cbkfn = cbkfn; + word->desc = desc; /* end of static strings in command template */ @@ -360,7 +362,7 @@ cli_cmd_ingest (struct cli_cmd_tree *tree, char **tokens, cli_cmd_cbk_t *cbkfn) int cli_cmd_register (struct cli_cmd_tree *tree, const char *template, - cli_cmd_cbk_t cbk) + cli_cmd_cbk_t cbk, const char *desc) { char **tokens = NULL; int ret = 0; @@ -372,7 +374,7 @@ cli_cmd_register (struct cli_cmd_tree *tree, const char *template, if (!tokens) return -1; - ret = cli_cmd_ingest (tree, tokens, cbk); + ret = cli_cmd_ingest (tree, tokens, cbk, desc); if (ret) goto err; |