diff --git a/modules/net/dap_chain_node_rpc.c b/modules/net/dap_chain_node_rpc.c index 92b38785ca4a58e16c51ed8995bc576d3d3c984b..a6f3c9b0a12847db2441217427c8c99498677130 100644 --- a/modules/net/dap_chain_node_rpc.c +++ b/modules/net/dap_chain_node_rpc.c @@ -27,17 +27,9 @@ #include <stdint.h> #include <string.h> -#ifdef WIN32 -#include <winsock2.h> -#include <windows.h> -#include <mswsock.h> -#include <ws2tcpip.h> -#include <io.h> -#include <pthread.h> -#else -#include <sys/socket.h> -#include <netinet/in.h> -#endif + +#include <sys/sysinfo.h> +#include <sys/vfs.h> #include "dap_hash.h" #include "dap_chain_net.h" @@ -47,18 +39,19 @@ #include "dap_chain_ledger.h" #define LOG_TAG "dap_chain_node_rpc" -#define DAP_RPC_CLUSTER_GLOBAL ".rpc" -#define DAP_RPC_DB_CLUSTER_GLOBAL DAP_RPC_CLUSTER_GLOBAL ".*" +#define DAP_RPC_CLUSTER_GLOBAL ".rpc" +#define DAP_RPC_DB_CLUSTER_GLOBAL DAP_RPC_CLUSTER_GLOBAL ".*" #define DAP_CHAIN_NODE_RPC_STATES_INFO_CURRENT_VERSION 1 -typedef struct dap_chain_node_rpc_states_info { +typedef struct dap_chain_node_rpc_states_info +{ uint32_t version; dap_chain_node_addr_t address; + uint32_t location; + uint32_t links_count; uint32_t cli_thread_count; - uint32_t cpu; - uint64_t mem; + struct sysinfo sysinfo; } DAP_ALIGN_PACKED dap_chain_node_rpc_states_info_t; - static const uint64_t s_timer_update_states_info = 10 /*sec*/ * 1000; static const char s_states_group[] = ".rpc.states"; static dap_global_db_cluster_t *s_global_cluster = NULL; @@ -69,29 +62,25 @@ static dap_global_db_cluster_t *s_global_cluster = NULL; */ static void s_update_node_rpc_states_info(UNUSED_ARG void *a_arg) { - for (dap_chain_net_t *l_net = dap_chain_net_iter_start(); l_net; l_net = dap_chain_net_iter_next(l_net)) { - if(dap_chain_net_get_state(l_net) == NET_STATE_ONLINE) { - size_t - l_uplinks_count = 0, - l_downlinks_count = 0, - l_info_size = 0; - dap_chain_node_rpc_states_info_t *l_info = DAP_NEW_Z_RET_IF_FAIL(dap_chain_node_rpc_states_info_t); - l_info->version = DAP_CHAIN_NODE_RPC_STATES_INFO_CURRENT_VERSION; - l_info->address.uint64 = g_node_addr.uint64; - - char *l_gdb_group = dap_strdup_printf("%s%s", l_net->pub.gdb_groups_prefix, s_states_group); - const char *l_node_addr_str = dap_stream_node_addr_to_str_static(l_info->address); - dap_global_db_set_sync(l_gdb_group, l_node_addr_str, l_info, l_info_size, false); - DAP_DEL_MULTY(l_info, l_gdb_group); - } - } + dap_chain_node_rpc_states_info_t *l_info = DAP_NEW_Z_RET_IF_FAIL(dap_chain_node_rpc_states_info_t); + l_info->version = DAP_CHAIN_NODE_RPC_STATES_INFO_CURRENT_VERSION; + l_info->address.uint64 = g_node_addr.uint64; + l_info->links_count = dap_stream_get_links_count(); + sysinfo(&l_info->sysinfo); + + struct statfs buf; + statfs("/opt/cellframe-node/bin/cellframe-node", &buf); + + // const char *l_node_addr_str = dap_stream_node_addr_to_str_static(l_info->address); + // dap_global_db_set_sync(l_gdb_group, l_node_addr_str, l_info, l_info_size, false); + // 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 + // sanity check dap_return_if_pass(!a_net || !a_node_addr_str || !l_info_str); -// func work + // 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); @@ -104,7 +93,7 @@ static void s_states_info_to_str(dap_chain_net_t *a_net, const char *a_node_addr // 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_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 ); @@ -116,7 +105,7 @@ static void s_states_info_to_str(dap_chain_net_t *a_net, const char *a_node_addr // 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, + // 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); @@ -127,10 +116,10 @@ static void s_states_info_to_str(dap_chain_net_t *a_net, const char *a_node_addr // "-----------------------------------------------------------------\n"); // } // for (size_t i = 0; i < l_max_links; ++i) { - // char *l_upnlink_str = i < l_node_info->info_v1.uplinks_count + // 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 + // 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); @@ -140,14 +129,13 @@ static void s_states_info_to_str(dap_chain_net_t *a_net, const char *a_node_addr // DAP_DELETE(l_node_info); } - void dap_chain_node_rpc_init() { - if ( !(s_global_cluster = dap_global_db_cluster_add( - dap_global_db_instance_get_default(), DAP_RPC_CLUSTER_GLOBAL, - *(dap_guuid_t*)&uint128_0, DAP_RPC_DB_CLUSTER_GLOBAL, - 0, - true, DAP_GDB_MEMBER_ROLE_GUEST, DAP_CLUSTER_TYPE_VIRTUAL))) + if (!(s_global_cluster = dap_global_db_cluster_add( + dap_global_db_instance_get_default(), DAP_RPC_CLUSTER_GLOBAL, + *(dap_guuid_t *)&uint128_0, DAP_RPC_DB_CLUSTER_GLOBAL, + 0, + true, DAP_GDB_MEMBER_ROLE_GUEST, DAP_CLUSTER_TYPE_VIRTUAL))) return; if (dap_proc_thread_timer_add(NULL, s_update_node_rpc_states_info, NULL, s_timer_update_states_info)) log_it(L_ERROR, "Can't activate timer on node states update"); @@ -184,4 +172,3 @@ void dap_chain_node_rpc_init() // } // return l_ret; // } -