diff options
author | Rajesh Amaravathi <rajesh@redhat.com> | 2011-12-07 20:51:03 +0530 |
---|---|---|
committer | Vijay Bellur <vijay@gluster.com> | 2012-01-12 01:58:26 -0800 |
commit | 169c73f28dae61236de54889edcaa8236d91da59 (patch) | |
tree | a4d74fc14c9198cbc78633a844480ab6c4ffdda3 /cli/src/cli-cmd-parser.c | |
parent | 4e40a7e48757feedc959c7982acf05c73f739a15 (diff) |
cli: volume status enhancement
* Support "gluster volume status (all)" option to display all
volumes' status.
* On option "detail" appended to "gluster volume status *",
amount of storage free, total storage, and backend filesystem
details like inode size, inode count, free inodes, fs type,
device name of each brick is displayed.
* One can also obtain [detailed]status of only one brick.
* Format of the enhanced volume status command is:
"gluster volume status [all|<vol>] [<brick>] [detail]"
* Some generic functions have been added to common-utils:
skipword
get_nth_word
These functions enable parsing and fetching
of words in a sentence.
glusterd_get_brick_root (in glusterd)
These are self explanatory.
Change-Id: I6f40c1e19810f8504cd3b1786207364053d82e28
BUG: 765464
Signed-off-by: Rajesh Amaravathi <rajesh@redhat.com>
Reviewed-on: http://review.gluster.com/777
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Amar Tumballi <amar@gluster.com>
Diffstat (limited to 'cli/src/cli-cmd-parser.c')
-rw-r--r-- | cli/src/cli-cmd-parser.c | 71 |
1 files changed, 66 insertions, 5 deletions
diff --git a/cli/src/cli-cmd-parser.c b/cli/src/cli-cmd-parser.c index fa46fa06671..acbd960ba43 100644 --- a/cli/src/cli-cmd-parser.c +++ b/cli/src/cli-cmd-parser.c @@ -1795,23 +1795,84 @@ out: return ret; } -int32_t +int cli_cmd_volume_status_parse (const char **words, int wordcount, - dict_t **options) + dict_t **options) { dict_t *dict = NULL; int ret = -1; + int cmd = 0; - GF_ASSERT (words); GF_ASSERT (options); dict = dict_new (); if (!dict) goto out; - GF_ASSERT(words[2]); + switch (wordcount) { + + case 2: + cmd = GF_CLI_STATUS_ALL; + ret = 0; + break; + + case 3: + if (!strcmp (words[2], "all")) { + + cmd = GF_CLI_STATUS_ALL; + ret = 0; + + } else if (!strcmp (words[2], "detail")) { + + cmd = GF_CLI_STATUS_ALL_DETAIL; + ret = 0; + + } else { + cmd = GF_CLI_STATUS_VOL; + ret = dict_set_str (dict, "volname", (char *)words[2]); + } + break; + + case 4: + if (!strcmp (words[2], "all") && + !strcmp (words[3], "detail")) { + + cmd = GF_CLI_STATUS_ALL_DETAIL; + ret = 0; + + } else if (!strcmp (words[3], "detail")) { + cmd = GF_CLI_STATUS_VOL_DETAIL; + ret = dict_set_str (dict, "volname", (char *)words[2]); + + } else { + + cmd = GF_CLI_STATUS_BRICK; + ret = dict_set_str (dict, "volname", (char *)words[2]); + if (ret) + goto out; + ret = dict_set_str (dict, "brick", (char *)words[3]); + } + break; + + case 5: + if (strcmp (words[4], "detail")) + goto out; + + cmd = GF_CLI_STATUS_BRICK_DETAIL; + ret = dict_set_str (dict, "volname", (char *)words[2]); + if (ret) + goto out; + ret = dict_set_str (dict, "brick", (char *)words[3]); + break; + + default: + goto out; + } + + if (ret) + goto out; - ret = dict_set_str (dict, "volname", (char *)words[2]); + ret = dict_set_int32 (dict, "cmd", cmd); if (ret) goto out; |