From e2e0a3e38e244d79b1b433335a308055ef86f224 Mon Sep 17 00:00:00 2001
From: "pavel.uhanov" <pavel.uhanov@demlabs.net>
Date: Wed, 19 Mar 2025 17:14:23 +0300
Subject: [PATCH] [*] add cmd id enum

---
 modules/net/dap_chain_node_cli.c         |  4 +-
 modules/net/dap_chain_node_rpc.c         | 19 +++++++--
 modules/net/include/dap_chain_node_cli.h | 50 ++++++++++++++++++++++++
 modules/net/include/dap_chain_node_rpc.h |  9 ++++-
 4 files changed, 77 insertions(+), 5 deletions(-)

diff --git a/modules/net/dap_chain_node_cli.c b/modules/net/dap_chain_node_cli.c
index 03ab818b4f..a5f19a24bf 100644
--- a/modules/net/dap_chain_node_cli.c
+++ b/modules/net/dap_chain_node_cli.c
@@ -65,7 +65,9 @@ int dap_chain_node_cli_init(dap_config_t * g_config)
     s_debug_cli = dap_config_get_item_bool_default(g_config, "cli-server", "debug-cli", false);
     if ( dap_cli_server_init(s_debug_cli, "cli-server") )
         return log_it(L_ERROR, "Can't init CLI server!"), -1;
-    dap_chain_node_rpc_init(g_config);
+    if (dap_config_get_item_bool_default(g_config, "rpc", "enabled", false)) {
+        dap_chain_node_rpc_init(g_config);
+    }
 
     dap_cli_server_cmd_add("global_db", com_global_db, "Work with global database",
             "global_db flush\n"
diff --git a/modules/net/dap_chain_node_rpc.c b/modules/net/dap_chain_node_rpc.c
index 6c9f210f71..1bfc174a6c 100644
--- a/modules/net/dap_chain_node_rpc.c
+++ b/modules/net/dap_chain_node_rpc.c
@@ -23,6 +23,7 @@
 #include "dap_global_db.h"
 #include "dap_global_db_cluster.h"
 #include "dap_stream.h"
+#include "dap_cli_server.h"
 
 #define LOG_TAG "dap_chain_node_rpc"
 #define DAP_CHAIN_NODE_RPC_STATES_INFO_CURRENT_VERSION 1
@@ -49,6 +50,11 @@ DAP_STATIC_INLINE s_get_role_from_str(const char *a_str)
     return RPC_ROLE_INVALID;
 }
 
+static void s_collect_state_info(int16_t a_cmd_num, bool a_start_measure)
+{
+
+}
+
 /**
  * @brief get states info about current
  * @param a_arg - pointer to callback arg
@@ -59,6 +65,7 @@ static void s_update_node_rpc_states_info(UNUSED_ARG void *a_arg)
     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();
+    l_info->cli_thread_count = dap_cli_get_cmd_thread_count();
     sysinfo(&l_info->sysinfo);
 
     const char *l_node_addr_str = dap_stream_node_addr_to_str_static(l_info->address);
@@ -85,10 +92,14 @@ void dap_chain_node_rpc_init(dap_config_t *a_cfg)
             log_it(L_ERROR, "Can't create rpc server states cluster");
             return;
         }
-        if (l_role == RPC_ROLE_SERVER && 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");
+        if (l_role == RPC_ROLE_SERVER) {
+            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");
+            else
+                dap_cli_server_statistic_callback_add(s_collect_state_info);
+        }
     }
-    if (l_role == RPC_ROLE_ROOT || l_role == RPC_ROLE_BALANCER) {
+    if (l_role != RPC_ROLE_INVALID) {
         if (!(s_rpc_node_list_cluster = dap_global_db_cluster_add(
                 dap_global_db_instance_get_default(), DAP_STREAM_CLUSTER_GLOBAL,
                 *(dap_guuid_t *)&uint128_0, s_rpc_node_list_group,
@@ -213,5 +224,7 @@ dap_list_t *dap_chain_node_rpc_get_sorted_list(size_t *a_count)
         }
         l_ret = dap_list_insert_sorted(l_ret, (void *)l_node_info_curr, s_rpc_node_cmp);
     }
+    if (a_count)
+        *a_count = l_count;
     return l_ret;
 }
\ No newline at end of file
diff --git a/modules/net/include/dap_chain_node_cli.h b/modules/net/include/dap_chain_node_cli.h
index 2893306b7d..133530c0aa 100644
--- a/modules/net/include/dap_chain_node_cli.h
+++ b/modules/net/include/dap_chain_node_cli.h
@@ -36,6 +36,56 @@
 extern "C" {
 #endif
 
+typedef enum dap_chain_node_cli_cmd {
+    DAP_CHAIN_NODE_CLI_CMD_ID_EXIT,
+    DAP_CHAIN_NODE_CLI_CMD_ID_TX_HISTORY,
+    DAP_CHAIN_NODE_CLI_CMD_ID_WALLET,
+    DAP_CHAIN_NODE_CLI_CMD_ID_MEMPOOL,
+    DAP_CHAIN_NODE_CLI_CMD_ID_LEDGER,
+    DAP_CHAIN_NODE_CLI_CMD_ID_TX_CREATE,
+    DAP_CHAIN_NODE_CLI_CMD_ID_TX_CREATE_JSON,
+    DAP_CHAIN_NODE_CLI_CMD_ID_TX_VERIFY,
+    DAP_CHAIN_NODE_CLI_CMD_ID_TX_COND_CREATE,
+    DAP_CHAIN_NODE_CLI_CMD_ID_TX_COND_REMOVE,
+    DAP_CHAIN_NODE_CLI_CMD_ID_TX_COND_UNSPENT_FIND,
+    DAP_CHAIN_NODE_CLI_CMD_ID_CHAIN_CA_COPY,
+    DAP_CHAIN_NODE_CLI_CMD_ID_DAG,
+    DAP_CHAIN_NODE_CLI_CMD_ID_DAG_POA,
+    DAP_CHAIN_NODE_CLI_CMD_ID_BLOCK,
+    DAP_CHAIN_NODE_CLI_CMD_ID_TOKEN,
+    DAP_CHAIN_NODE_CLI_CMD_ID_ESBOCS,
+    DAP_CHAIN_NODE_CLI_CMD_ID_GLOBAL_DB,
+    DAP_CHAIN_NODE_CLI_CMD_ID_NET_SRV,
+    DAP_CHAIN_NODE_CLI_CMD_ID_NET,
+    DAP_CHAIN_NODE_CLI_CMD_ID_SRV_STAKE,
+    DAP_CHAIN_NODE_CLI_CMD_ID_SRV_DATUM,
+    DAP_CHAIN_NODE_CLI_CMD_ID_POLL,
+    DAP_CHAIN_NODE_CLI_CMD_ID_SRV_XCHANGE,
+    DAP_CHAIN_NODE_CLI_CMD_ID_EMIT_DELEGATE,
+    DAP_CHAIN_NODE_CLI_CMD_ID_TOKEN_DECL,
+    DAP_CHAIN_NODE_CLI_CMD_ID_TOKEN_UPDATE,
+    DAP_CHAIN_NODE_CLI_CMD_ID_TOKEN_UPDATE_SIGN,
+    DAP_CHAIN_NODE_CLI_CMD_ID_TOKEN_DECL_SIGN,
+    DAP_CHAIN_NODE_CLI_CMD_ID_CHAIN_CA_PUB,
+    DAP_CHAIN_NODE_CLI_CMD_ID_TOKEN_EMIT,
+    DAP_CHAIN_NODE_CLI_CMD_ID_FIND,
+    DAP_CHAIN_NODE_CLI_CMD_ID_VERSION,
+    DAP_CHAIN_NODE_CLI_CMD_ID_REMOVE,
+    DAP_CHAIN_NODE_CLI_CMD_ID_GDB_IMPORT,
+    DAP_CHAIN_NODE_CLI_CMD_ID_GDB_EXPORT,
+    DAP_CHAIN_NODE_CLI_CMD_ID_STATS,
+    DAP_CHAIN_NODE_CLI_CMD_ID_PRINT_LOG,
+    DAP_CHAIN_NODE_CLI_CMD_ID_STAKE_LOCK,
+    DAP_CHAIN_NODE_CLI_CMD_ID_EXEC_CMD,
+    DAP_CHAIN_NODE_CLI_CMD_ID_POLICY,
+    DAP_CHAIN_NODE_CLI_CMD_ID_DECREE,
+    DAP_CHAIN_NODE_CLI_CMD_ID_NODE,
+    DAP_CHAIN_NODE_CLI_CMD_ID_VPN_STAT,
+    DAP_CHAIN_NODE_CLI_CMD_ID_VPN_CLIENT,
+    DAP_CHAIN_NODE_CLI_CMD_ID_HELP,
+    DAP_CHAIN_NODE_CLI_CMD_ID_TOTAL
+} dap_chain_node_cli_cmd_t;
+
 /**
  * Initialization of the server side of the interaction
  * with the console kelvin-node-cli
diff --git a/modules/net/include/dap_chain_node_rpc.h b/modules/net/include/dap_chain_node_rpc.h
index eb1f6afffb..dbaee77aaa 100644
--- a/modules/net/include/dap_chain_node_rpc.h
+++ b/modules/net/include/dap_chain_node_rpc.h
@@ -29,9 +29,16 @@
     uint32_t links_count;
     uint32_t cli_thread_count;
     struct sysinfo sysinfo;
+    uint32_t cmd_data_size;
+    uint8_t cmd_data[];
 } DAP_ALIGN_PACKED dap_chain_node_rpc_states_info_t;
 
  void dap_chain_node_rpc_init(dap_config_t *a_cfg);
  bool dap_chain_node_rpc_is_my_node_authorized();
  int dap_chain_node_rpc_info_save(dap_chain_node_info_t *a_node_info);
- dap_string_t *dap_chain_node_rpc_list();
\ No newline at end of file
+ dap_string_t *dap_chain_node_rpc_list();
+
+ DAP_STATIC_INLINE size_t dap_chain_node_rpc_get_states_info_size(dap_chain_node_rpc_states_info_t *a_info)
+ {
+    return a_info ? sizeof(dap_chain_node_rpc_states_info_t) + a_info->cmd_data_size : 0;
+ }
\ No newline at end of file
-- 
GitLab