diff options
Diffstat (limited to 'cli/src/cli-rpc-ops.c')
-rw-r--r-- | cli/src/cli-rpc-ops.c | 139 |
1 files changed, 139 insertions, 0 deletions
diff --git a/cli/src/cli-rpc-ops.c b/cli/src/cli-rpc-ops.c index 03071dd9e45..1840b208431 100644 --- a/cli/src/cli-rpc-ops.c +++ b/cli/src/cli-rpc-ops.c @@ -7299,6 +7299,141 @@ out: } void +cli_print_volume_status_client_list (dict_t *dict, gf_boolean_t notbrick) +{ + int ret = -1; + char *volname = NULL; + int client_count = 0; + int current_count = 0; + char key[1024] = {0,}; + int i = 0; + int total = 0; + char *name = NULL; + gf_boolean_t is_fuse_done = _gf_false; + gf_boolean_t is_gfapi_done = _gf_false; + gf_boolean_t is_tierd_done = _gf_false; + gf_boolean_t is_rebalance_done = _gf_false; + gf_boolean_t is_glustershd_done = _gf_false; + gf_boolean_t is_quotad_done = _gf_false; + gf_boolean_t is_snapd_done = _gf_false; + + GF_ASSERT (dict); + + ret = dict_get_str (dict, "volname", &volname); + if (ret) + goto out; + cli_out ("Client connections for volume %s", volname); + + ret = dict_get_int32 (dict, "client-count", &client_count); + if (ret) + goto out; + + cli_out ("%-48s %15s", "Name", "count"); + cli_out ("%-48s %15s", "-----", "------"); + for (i = 0; i < client_count; i++) { + name = NULL; + memset (key, 0, sizeof (key)); + snprintf (key, sizeof (key), + "client%d.name", i); + ret = dict_get_str (dict, key, &name); + + if (!strncmp (name, "fuse", 4)) { + if (!is_fuse_done) { + is_fuse_done = _gf_true; + ret = dict_get_int32 (dict, + "fuse-count", + ¤t_count); + if (ret) + goto out; + total = total + current_count; + goto print; + } + continue; + } else if (!strncmp (name, "gfapi", 5)) { + if (!is_gfapi_done) { + is_gfapi_done = _gf_true; + ret = dict_get_int32 (dict, + "gfapi-count", + ¤t_count); + if (ret) + goto out; + total = total + current_count; + goto print; + } + continue; + } else if (!strcmp(name, "tierd")) { + if (!is_tierd_done) { + is_tierd_done = _gf_true; + ret = dict_get_int32 (dict, + "tierd-count", + ¤t_count); + if (ret) + goto out; + total = total + current_count; + goto print; + } + continue; + } else if (!strcmp(name, "rebalance")) { + if (!is_rebalance_done) { + is_rebalance_done = _gf_true; + ret = dict_get_int32 (dict, + "rebalance-count", + ¤t_count); + if (ret) + goto out; + total = total + current_count; + goto print; + } + continue; + } else if (!strcmp(name, "glustershd")) { + if (!is_glustershd_done) { + is_glustershd_done = _gf_true; + ret = dict_get_int32 (dict, + "glustershd-count", + ¤t_count); + if (ret) + goto out; + total = total + current_count; + goto print; + } + continue; + } else if (!strcmp(name, "quotad")) { + if (!is_quotad_done) { + is_quotad_done = _gf_true; + ret = dict_get_int32 (dict, + "quotad-count", + ¤t_count); + if (ret) + goto out; + total = total + current_count; + goto print; + } + continue; + } else if (!strcmp(name, "snapd")) { + if (!is_snapd_done) { + is_snapd_done = _gf_true; + ret = dict_get_int32 (dict, + "snapd-count", + ¤t_count); + if (ret) + goto out; + total = total + current_count; + goto print; + } + continue; + } + +print: + cli_out ("%-48s %15d", name, current_count); + + } +out: + cli_out ("\ntotal clients for volume %s : %d ", volname, total); + cli_out ("-----------------------------------------------------------------\n"); + return; +} + +void cli_print_volume_status_clients (dict_t *dict, gf_boolean_t notbrick) { int ret = -1; @@ -8293,6 +8428,10 @@ xml_end: cli_print_volume_status_clients (dict, notbrick); goto cont; break; + case GF_CLI_STATUS_CLIENT_LIST: + cli_print_volume_status_client_list (dict, notbrick); + goto cont; + break; case GF_CLI_STATUS_INODE: cli_print_volume_status_inode (dict, notbrick); goto cont; |