diff --git a/net/server/cli_server/dap_cli_server.c b/net/server/cli_server/dap_cli_server.c index 85b7d34b0702007ad8c6d57f9f56f2cc68a112da..5c67c2ba34235d4d91817dda37c8c533cdbbe11d 100644 --- a/net/server/cli_server/dap_cli_server.c +++ b/net/server/cli_server/dap_cli_server.c @@ -59,7 +59,9 @@ static atomic_int_fast64_t s_cmd_thread_count = 0; static dap_cli_cmd_t *cli_commands = NULL; static dap_cli_cmd_aliases_t *s_command_alias = NULL; -static inline dap_cli_cmd_t *s_cmd_add_ex(const char *a_name, dap_cli_server_cmd_callback_ex_t a_func, void *a_arg_func, const char *a_doc, const char *a_doc_ex); +static dap_cli_server_cmd_stat_callback_t s_stat_callback = NULL; + +static inline dap_cli_cmd_t *s_cmd_add_ex(const char *a_name, dap_cli_server_cmd_callback_ex_t a_func, void *a_arg_func, const char *a_doc, const char *a_doc_ex, int16_t a_id); typedef struct cli_cmd_arg { dap_worker_t *worker; @@ -192,9 +194,9 @@ void dap_cli_server_deinit() * @param a_doc * @param a_doc_ex */ -dap_cli_cmd_t *dap_cli_server_cmd_add(const char * a_name, dap_cli_server_cmd_callback_t a_func, const char *a_doc, const char *a_doc_ex) +dap_cli_cmd_t *dap_cli_server_cmd_add(const char * a_name, dap_cli_server_cmd_callback_t a_func, const char *a_doc, int16_t a_id, const char *a_doc_ex) { - return s_cmd_add_ex(a_name, (dap_cli_server_cmd_callback_ex_t)(void *)a_func, NULL, a_doc, a_doc_ex); + return s_cmd_add_ex(a_name, (dap_cli_server_cmd_callback_ex_t)(void *)a_func, NULL, a_doc, a_doc_ex, a_id); } /** @@ -205,7 +207,7 @@ dap_cli_cmd_t *dap_cli_server_cmd_add(const char * a_name, dap_cli_server_cmd_ca * @param a_doc * @param a_doc_ex */ -static inline dap_cli_cmd_t *s_cmd_add_ex(const char * a_name, dap_cli_server_cmd_callback_ex_t a_func, void *a_arg_func, const char *a_doc, const char *a_doc_ex) +static inline dap_cli_cmd_t *s_cmd_add_ex(const char * a_name, dap_cli_server_cmd_callback_ex_t a_func, void *a_arg_func, const char *a_doc, const char *a_doc_ex, int16_t a_id) { dap_cli_cmd_t *l_cmd_item = DAP_NEW_Z(dap_cli_cmd_t); if (!l_cmd_item) { @@ -221,6 +223,7 @@ static inline dap_cli_cmd_t *s_cmd_add_ex(const char * a_name, dap_cli_server_cm } else { l_cmd_item->func = (dap_cli_server_cmd_callback_t )(void *)a_func; } + l_cmd_item->id = a_id; HASH_ADD_STR(cli_commands,name,l_cmd_item); log_it(L_DEBUG,"Added command %s",l_cmd_item->name); return l_cmd_item; @@ -241,7 +244,6 @@ int json_commands(const char * a_name) { "chain_ca_copy", "dag", "block", - "dag", "token", "esbocs", "global_db", @@ -508,6 +510,8 @@ char *dap_cli_cmd_exec(char *a_req_str) { } // Call the command function if(l_cmd && l_argv && l_cmd->func) { + if (s_stat_callback) + s_stat_callback(l_cmd->id, true); if (json_commands(cmd_name)) { res = l_cmd->func(l_argc, l_argv, (void *)&l_json_arr_reply); } else if (l_cmd->arg_func) { @@ -515,6 +519,8 @@ char *dap_cli_cmd_exec(char *a_req_str) { } else { res = l_cmd->func(l_argc, l_argv, (void *)&str_reply); } + if (s_stat_callback) + s_stat_callback(l_cmd->id, false); } else if (l_cmd) { log_it(L_WARNING,"NULL arguments for input for command \"%s\"", str_cmd); dap_json_rpc_error_add(l_json_arr_reply, -1, "NULL arguments for input for command \"%s\"", str_cmd); @@ -557,4 +563,16 @@ char *dap_cli_cmd_exec(char *a_req_str) { DAP_INLINE int64_t dap_cli_get_cmd_thread_count() { return atomic_load(&s_cmd_thread_count); +} + +/** + * @brief dap_cli_server_cmd_add + * @param a_callback callback to statistic collect + */ +void dap_cli_server_statistic_callback_add(dap_cli_server_cmd_stat_callback_t a_callback) +{ + if (a_callback && s_stat_callback) + log_it(L_ERROR, "Dap cli server statistic callback already added"); + else + s_stat_callback = a_callback; } \ No newline at end of file diff --git a/net/server/cli_server/include/dap_cli_server.h b/net/server/cli_server/include/dap_cli_server.h index ab09ac1445b83718f6f1926bb2dfeeedcdfcb123..187f2e6d648dfb4a84fd05178ae4754349ccbe94 100644 --- a/net/server/cli_server/include/dap_cli_server.h +++ b/net/server/cli_server/include/dap_cli_server.h @@ -32,6 +32,7 @@ typedef int (*dap_cli_server_cmd_callback_ex_t)(int argc, char ** argv, void *arg_func, void **a_str_reply); typedef int (*dap_cli_server_cmd_callback_t)(int argc, char ** argv, void **a_str_reply); +typedef void (*dap_cli_server_cmd_stat_callback_t)(int16_t a_cmd_num, bool a_flag); // use to statistic collect typedef void (*dap_cli_server_override_log_cmd_callback_t)(const char*); @@ -50,6 +51,7 @@ typedef struct dap_cli_cmd{ char *doc; /* Documentation for this function. */ char *doc_ex; /* Full documentation for this function. */ dap_cli_server_cmd_override_t overrides; /* Used to change default behaviour */ + int16_t id; UT_hash_handle hh; } dap_cli_cmd_t; @@ -64,7 +66,7 @@ typedef struct dap_cli_cmd_aliases{ int dap_cli_server_init(bool a_debug_more, const char *a_cfg_section); void dap_cli_server_deinit(); -dap_cli_cmd_t *dap_cli_server_cmd_add(const char * a_name, dap_cli_server_cmd_callback_t a_func, const char *a_doc, const char *a_doc_ex); +dap_cli_cmd_t *dap_cli_server_cmd_add(const char * a_name, dap_cli_server_cmd_callback_t a_func, const char *a_doc, int16_t a_id, const char *a_doc_ex); DAP_PRINTF_ATTR(2, 3) void dap_cli_server_cmd_set_reply_text(void **a_str_reply, const char *str, ...); int dap_cli_server_cmd_find_option_val( char** argv, int arg_start, int arg_end, const char *opt_name, const char **opt_value); int dap_cli_server_cmd_check_option( char** argv, int arg_start, int arg_end, const char *opt_name); @@ -80,3 +82,4 @@ int64_t dap_cli_get_cmd_thread_count(); //for json int json_commands(const char * a_name); char *dap_cli_cmd_exec(char *a_req_str); +void dap_cli_server_statistic_callback_add(dap_cli_server_cmd_stat_callback_t a_callback); diff --git a/plugin/src/dap_plugin_command.c b/plugin/src/dap_plugin_command.c index c7d036612f54b225ee2f14a128082aa90a61a4d2..cf0fec07f3ee091b313a9dc5b1ded3741ec186d8 100644 --- a/plugin/src/dap_plugin_command.c +++ b/plugin/src/dap_plugin_command.c @@ -22,7 +22,7 @@ void dap_plugin_command_init(void) { if (!s_l_restart_plugins){ dap_cli_server_cmd_add("plugin", s_command_handler, - "Commands for working with plugins:\n", + "Commands for working with plugins:\n", -1, "plugin list\n" "\tShow plugins list\n" "plugin show <plugin name>\n"