diff --git a/modules/net/dap_chain_node_cli_cmd.c b/modules/net/dap_chain_node_cli_cmd.c index 4413358c8a27fee8f029c46117283fa8476563da..33009189748a0a0513083895a64243d74ab09d82 100644 --- a/modules/net/dap_chain_node_cli_cmd.c +++ b/modules/net/dap_chain_node_cli_cmd.c @@ -842,7 +842,7 @@ int com_node(int a_argc, char ** a_argv, void **a_str_reply) { enum { CMD_NONE, CMD_ADD, CMD_DEL, CMD_ALIAS, CMD_HANDSHAKE, CMD_CONNECT, CMD_LIST, CMD_DUMP, CMD_CONNECTIONS, CMD_BALANCER, - CMD_BAN, CMD_UNBAN, CMD_BANLIST, CMD_ADD_RPC, CMD_LIST_RPC + CMD_BAN, CMD_UNBAN, CMD_BANLIST, CMD_ADD_RPC, CMD_LIST_RPC, CMD_DUMP_RPC }; int arg_index = 1; int cmd_num = CMD_NONE; @@ -871,7 +871,10 @@ int com_node(int a_argc, char ** a_argv, void **a_str_reply) cmd_num = CMD_LIST; } else if(dap_cli_server_cmd_find_option_val(a_argv, arg_index, dap_min(a_argc, arg_index + 1), "dump", NULL)) { - cmd_num = CMD_DUMP; + if (dap_cli_server_cmd_find_option_val(a_argv, arg_index, a_argc, "-rpc", NULL)) + cmd_num = CMD_DUMP_RPC; + else + cmd_num = CMD_DUMP; } else if (dap_cli_server_cmd_find_option_val(a_argv, arg_index, dap_min(a_argc, arg_index + 1), "connections", NULL)) { cmd_num = CMD_CONNECTIONS; @@ -897,7 +900,7 @@ int com_node(int a_argc, char ** a_argv, void **a_str_reply) int l_net_parse_val = dap_chain_node_cli_cmd_values_parse_net_chain(&arg_index, a_argc, a_argv, a_str_reply, NULL, &l_net, CHAIN_TYPE_INVALID); if(l_net_parse_val < 0 && cmd_num != CMD_BANLIST && cmd_num != CMD_ADD_RPC && cmd_num != CMD_LIST_RPC) { - if ((cmd_num != CMD_CONNECTIONS && cmd_num != CMD_DUMP) || l_net_parse_val == -102) + if ((cmd_num != CMD_CONNECTIONS && cmd_num != CMD_DUMP && cmd_num != CMD_DUMP_RPC) || l_net_parse_val == -102) return -11; } @@ -1055,6 +1058,12 @@ int com_node(int a_argc, char ** a_argv, void **a_str_reply) dap_cli_server_cmd_set_reply_text(a_str_reply, "%s", l_string_reply->str); dap_string_free(l_string_reply, true); return 0; + } + case CMD_DUMP_RPC: { + dap_string_t *l_string_reply = dap_chain_node_states_info_read(l_net, l_node_info->address); + dap_cli_server_cmd_set_reply_text(a_str_reply, "%s", l_string_reply->str); + dap_string_free(l_string_reply, true); + return 0; } // add alias case CMD_ALIAS: diff --git a/modules/net/dap_chain_node_rpc.c b/modules/net/dap_chain_node_rpc.c index eb999a33c29c2329c735289b9594234a356b5df4..7e1de0b0bce8fbc79afed861fa0ebf88448d9894 100644 --- a/modules/net/dap_chain_node_rpc.c +++ b/modules/net/dap_chain_node_rpc.c @@ -70,59 +70,6 @@ static void s_update_node_rpc_states_info(UNUSED_ARG void *a_arg) DAP_DELETE(l_info); } -static void s_states_info_to_str(dap_chain_net_t *a_net, const char *a_node_addr_str, dap_string_t *l_info_str) -{ - // sanity check - dap_return_if_pass(!a_net || !a_node_addr_str || !l_info_str); - // func work - // dap_nanotime_t l_timestamp = 0; - // size_t l_data_size = 0; - // char *l_gdb_group = dap_strdup_printf("%s%s", a_net->pub.gdb_groups_prefix, s_states_group); - // byte_t *l_node_info_data = dap_global_db_get_sync(l_gdb_group, a_node_addr_str, &l_data_size, NULL, &l_timestamp); - // DAP_DELETE(l_gdb_group); - // dap_chain_node_rpc_states_info_t *l_node_info = NULL; - // if (!l_node_info_data) - // return log_it(L_ERROR, "Can't find state of node %s in net %s", a_node_addr_str, a_net->pub.name); - // if ( (l_data_size - sizeof(dap_chain_node_rpc_states_info_t)) % sizeof(dap_chain_node_addr_t) ) { - // if ( (l_data_size - sizeof(dap_chain_node_net_states_info_v1_t)) % sizeof(dap_chain_node_addr_t) ) - // return DAP_DELETE(l_node_info_data), log_it(L_ERROR, "Irrelevant size of node %s info", a_node_addr_str); - // dap_chain_node_net_states_info_v1_t *l_info_old = (dap_chain_node_net_states_info_v1_t*)l_node_info_data; - // l_node_info = DAP_NEW_Z_SIZE( dap_chain_node_rpc_states_info_t, sizeof(dap_chain_node_rpc_states_info_t) - // + (l_info_old->uplinks_count + l_info_old->downlinks_count) * sizeof(dap_chain_node_addr_t) ); - // l_node_info->version_info = 1; - // memcpy( (byte_t*)l_node_info + node_info_v1_shift, l_info_old, l_data_size ); - // DAP_DELETE(l_node_info_data); - // } else - // l_node_info = (dap_chain_node_rpc_states_info_t*)l_node_info_data; - // char l_ts[80] = { '\0' }; - // dap_nanotime_to_str_rfc822(l_ts, sizeof(l_ts), l_timestamp); - // dap_string_append_printf(l_info_str, - // "Record timestamp: %s\nRecord version: %u\nNode version: %s\nNode addr: %s\nNet: %s\nRole: %s\n" - // "Events count: %"DAP_UINT64_FORMAT_U"\nAtoms count: %"DAP_UINT64_FORMAT_U"\nUplinks count: %u\nDownlinks count: %u\n", - // l_ts, l_node_info->version_info, l_node_info->version_node, a_node_addr_str, a_net->pub.name, - // dap_chain_node_role_to_str(l_node_info->role), l_node_info->info_v1.events_count, l_node_info->info_v1.atoms_count, - // l_node_info->info_v1.uplinks_count, l_node_info->info_v1.downlinks_count); - // size_t l_max_links = dap_max(l_node_info->info_v1.uplinks_count, l_node_info->info_v1.downlinks_count); - // if(l_max_links) { - // dap_string_append_printf(l_info_str, - // "-----------------------------------------------------------------\n" - // "|\tUplinks node addrs\t|\tDownlinks node addrs\t|\n" - // "-----------------------------------------------------------------\n"); - // } - // for (size_t i = 0; i < l_max_links; ++i) { - // char *l_upnlink_str = i < l_node_info->info_v1.uplinks_count - // ? dap_stream_node_addr_to_str(l_node_info->info_v1.links_addrs[i], false) - // : dap_strdup("\t\t"); - // char *l_downlink_str = i < l_node_info->info_v1.downlinks_count - // ? dap_stream_node_addr_to_str(l_node_info->info_v1.links_addrs[i + l_node_info->info_v1.uplinks_count], false) - // : dap_strdup("\t\t"); - // dap_string_append_printf(l_info_str, "|\t%s\t|\t%s\t|\n", l_upnlink_str, l_downlink_str); - // DAP_DEL_MULTY(l_upnlink_str, l_downlink_str); - // } - // dap_string_append_printf(l_info_str, "-----------------------------------------------------------------\n"); - // DAP_DELETE(l_node_info); -} - void dap_chain_node_rpc_init(dap_config_t *a_cfg) { if (!(s_rpc_states_cluster = dap_global_db_cluster_add( @@ -147,37 +94,31 @@ void dap_chain_node_rpc_init(dap_config_t *a_cfg) log_it(L_ERROR, "Can't activate timer on node states update"); } -// /** -// * @brief get states info about current -// * @param a_arg - pointer to callback arg -// */ -// dap_string_t *dap_chain_node_states_info_read(dap_chain_net_t *a_net, dap_stream_node_addr_t a_addr) -// { -// dap_string_t *l_ret = dap_string_new(""); -// const char *l_node_addr_str = dap_stream_node_addr_to_str_static(a_addr.uint64 ? a_addr : g_node_addr); -// if(!a_net) { -// for (dap_chain_net_t *l_net = dap_chain_net_iter_start(); l_net; l_net = dap_chain_net_iter_next(l_net)) { -// s_states_info_to_str(l_net, l_node_addr_str, l_ret); -// } -// } else { -// s_states_info_to_str(a_net, l_node_addr_str, l_ret); -// } -// if (!l_ret->len) { -// const char *l_prefix = !a_addr.uint64 ? "my" : a_addr.uint64 == g_node_addr.uint64 ? "my" : ""; -// if (a_net) { -// dap_string_append_printf(l_ret, "Can't find rpc state of %s node %s in net %s", l_prefix, l_node_addr_str, a_net->pub.name); -// } else { -// dap_string_append_printf(l_ret, "Can't find rpc state of %s node %s in nets ", l_prefix, l_node_addr_str); -// dap_chain_net_t *l_current_net = NULL, *l_next_net = dap_chain_net_iter_start(); -// while(l_next_net) { -// l_current_net = l_next_net; -// l_next_net = dap_chain_net_iter_next(l_next_net); -// dap_string_append_printf(l_ret, l_next_net ? "%s, " : "%s", l_current_net->pub.name); -// } -// } -// } -// return l_ret; -// } +/** + * @brief get states rpc info about current + * @param a_arg - pointer to callback arg + */ +dap_string_t *dap_chain_node_rpc_states_info_read(dap_stream_node_addr_t a_addr) +{ + dap_nanotime_t l_timestamp = 0; + size_t l_data_size = 0; + dap_string_t *l_ret = dap_string_new(""); + const char *l_node_addr_str = dap_stream_node_addr_to_str_static(a_addr.uint64 ? a_addr : g_node_addr); + dap_chain_node_rpc_states_info_t *l_node_info = (dap_chain_node_rpc_states_info_t *)dap_global_db_get_sync(s_rpc_states_group, l_node_addr_str, &l_data_size, NULL, &l_timestamp); + if (!l_node_info) { + log_it(L_ERROR, "Can't find state of rpc node %s", l_node_addr_str); + dap_string_append_printf(l_ret, "Can't find state of %s rpc node", l_node_addr_str); + return l_ret; + } + char l_ts[80] = { '\0' }; + dap_nanotime_to_str_rfc822(l_ts, sizeof(l_ts), l_timestamp); + dap_string_append_printf(l_ret, + "Record timestamp: %s\nRecord version: %u\nNode addr: %s\n" + "Location: %s\nCli thread count: %u\nLinks count: %u\n", + l_ts, l_node_info->version, l_node_addr_str, + l_node_info->location, l_node_info->cli_thread_count, l_node_info->links_count); + return l_ret; +} bool dap_chain_node_rpc_is_my_node_authorized()