Skip to content
Snippets Groups Projects
Commit f0d0e85f authored by pavel.uhanov's avatar pavel.uhanov
Browse files

[*] add stat callback

parent 156f2c64
No related branches found
No related tags found
1 merge request!528Draft: feature-15728
Pipeline #52329 passed with stage
in 36 minutes and 14 seconds
...@@ -59,7 +59,9 @@ static atomic_int_fast64_t s_cmd_thread_count = 0; ...@@ -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_t *cli_commands = NULL;
static dap_cli_cmd_aliases_t *s_command_alias = 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 { typedef struct cli_cmd_arg {
dap_worker_t *worker; dap_worker_t *worker;
...@@ -192,9 +194,9 @@ void dap_cli_server_deinit() ...@@ -192,9 +194,9 @@ void dap_cli_server_deinit()
* @param a_doc * @param a_doc
* @param a_doc_ex * @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 ...@@ -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
* @param a_doc_ex * @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); dap_cli_cmd_t *l_cmd_item = DAP_NEW_Z(dap_cli_cmd_t);
if (!l_cmd_item) { 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 ...@@ -221,6 +223,7 @@ static inline dap_cli_cmd_t *s_cmd_add_ex(const char * a_name, dap_cli_server_cm
} else { } else {
l_cmd_item->func = (dap_cli_server_cmd_callback_t )(void *)a_func; 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); HASH_ADD_STR(cli_commands,name,l_cmd_item);
log_it(L_DEBUG,"Added command %s",l_cmd_item->name); log_it(L_DEBUG,"Added command %s",l_cmd_item->name);
return l_cmd_item; return l_cmd_item;
...@@ -241,7 +244,6 @@ int json_commands(const char * a_name) { ...@@ -241,7 +244,6 @@ int json_commands(const char * a_name) {
"chain_ca_copy", "chain_ca_copy",
"dag", "dag",
"block", "block",
"dag",
"token", "token",
"esbocs", "esbocs",
"global_db", "global_db",
...@@ -508,6 +510,8 @@ char *dap_cli_cmd_exec(char *a_req_str) { ...@@ -508,6 +510,8 @@ char *dap_cli_cmd_exec(char *a_req_str) {
} }
// Call the command function // Call the command function
if(l_cmd && l_argv && l_cmd->func) { if(l_cmd && l_argv && l_cmd->func) {
if (s_stat_callback)
s_stat_callback(l_cmd->id, true);
if (json_commands(cmd_name)) { if (json_commands(cmd_name)) {
res = l_cmd->func(l_argc, l_argv, (void *)&l_json_arr_reply); res = l_cmd->func(l_argc, l_argv, (void *)&l_json_arr_reply);
} else if (l_cmd->arg_func) { } else if (l_cmd->arg_func) {
...@@ -515,6 +519,8 @@ char *dap_cli_cmd_exec(char *a_req_str) { ...@@ -515,6 +519,8 @@ char *dap_cli_cmd_exec(char *a_req_str) {
} else { } else {
res = l_cmd->func(l_argc, l_argv, (void *)&str_reply); 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) { } else if (l_cmd) {
log_it(L_WARNING,"NULL arguments for input for command \"%s\"", str_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); 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) { ...@@ -557,4 +563,16 @@ char *dap_cli_cmd_exec(char *a_req_str) {
DAP_INLINE int64_t dap_cli_get_cmd_thread_count() DAP_INLINE int64_t dap_cli_get_cmd_thread_count()
{ {
return atomic_load(&s_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
...@@ -32,6 +32,7 @@ ...@@ -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_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 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*); typedef void (*dap_cli_server_override_log_cmd_callback_t)(const char*);
...@@ -50,6 +51,7 @@ typedef struct dap_cli_cmd{ ...@@ -50,6 +51,7 @@ typedef struct dap_cli_cmd{
char *doc; /* Documentation for this function. */ char *doc; /* Documentation for this function. */
char *doc_ex; /* Full documentation for this function. */ char *doc_ex; /* Full documentation for this function. */
dap_cli_server_cmd_override_t overrides; /* Used to change default behaviour */ dap_cli_server_cmd_override_t overrides; /* Used to change default behaviour */
int16_t id;
UT_hash_handle hh; UT_hash_handle hh;
} dap_cli_cmd_t; } dap_cli_cmd_t;
...@@ -64,7 +66,7 @@ typedef struct dap_cli_cmd_aliases{ ...@@ -64,7 +66,7 @@ typedef struct dap_cli_cmd_aliases{
int dap_cli_server_init(bool a_debug_more, const char *a_cfg_section); int dap_cli_server_init(bool a_debug_more, const char *a_cfg_section);
void dap_cli_server_deinit(); 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, ...); 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_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); 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(); ...@@ -80,3 +82,4 @@ int64_t dap_cli_get_cmd_thread_count();
//for json //for json
int json_commands(const char * a_name); int json_commands(const char * a_name);
char *dap_cli_cmd_exec(char *a_req_str); 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);
...@@ -22,7 +22,7 @@ void dap_plugin_command_init(void) ...@@ -22,7 +22,7 @@ void dap_plugin_command_init(void)
{ {
if (!s_l_restart_plugins){ if (!s_l_restart_plugins){
dap_cli_server_cmd_add("plugin", s_command_handler, 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" "plugin list\n"
"\tShow plugins list\n" "\tShow plugins list\n"
"plugin show <plugin name>\n" "plugin show <plugin name>\n"
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment