From eda15d188686ed43fa44ab54b949fc61b988be73 Mon Sep 17 00:00:00 2001 From: fengzero Date: Fri, 10 Nov 2023 06:28:01 +0000 Subject: [PATCH] improve: core/adapter log level --- include/neuron/adapter.h | 8 +-- include/neuron/plugin.h | 1 - include/neuron/utils/log.h | 24 +++++++++ plugins/restful/adapter_handle.c | 15 +++--- plugins/restful/log_handle.c | 68 +++++++------------------ src/adapter/adapter.c | 16 +++--- src/adapter/adapter_internal.h | 3 +- src/base/neu_plugin_common.c | 1 - src/core/manager.c | 86 ++++++++------------------------ src/core/manager_internal.h | 9 ++-- src/core/node_manager.c | 3 +- src/parser/neu_json_node.h | 4 +- 12 files changed, 95 insertions(+), 143 deletions(-) diff --git a/include/neuron/adapter.h b/include/neuron/adapter.h index fcbf5480..85d088a5 100644 --- a/include/neuron/adapter.h +++ b/include/neuron/adapter.h @@ -37,7 +37,7 @@ extern "C" { typedef struct { neu_node_running_state_e running; neu_node_link_state_e link; - char log_level[NEU_LOG_LEVEL_LEN]; + int log_level; } neu_node_state_t; typedef enum neu_reqresp_type { @@ -602,7 +602,7 @@ typedef struct neu_req_get_node_state { typedef struct neu_resp_get_node_state { neu_node_state_t state; uint16_t rtt; // round trip time in milliseconds - char core_level[NEU_LOG_LEVEL_LEN]; + int core_level; } neu_resp_get_node_state_t; typedef struct neu_req_get_nodes_state { @@ -622,7 +622,7 @@ inline static UT_icd neu_nodes_state_t_icd() } typedef struct { UT_array *states; // array of neu_nodes_state_t - char core_level[NEU_LOG_LEVEL_LEN]; + int core_level; } neu_resp_get_nodes_state_t, neu_reqresp_nodes_state_t; typedef struct { @@ -1064,7 +1064,7 @@ typedef struct { typedef struct neu_req_update_log_level { char node[NEU_NODE_NAME_LEN]; - char log_level[NEU_LOG_LEVEL_LEN]; + int log_level; bool core; } neu_req_update_log_level_t; diff --git a/include/neuron/plugin.h b/include/neuron/plugin.h index 36dfee7f..4a706e84 100644 --- a/include/neuron/plugin.h +++ b/include/neuron/plugin.h @@ -46,7 +46,6 @@ typedef struct neu_plugin_common { char name[NEU_NODE_NAME_LEN]; neu_node_link_state_e link_state; - char log_level[NEU_LOG_LEVEL_LEN]; zlog_category_t *log; } neu_plugin_common_t; diff --git a/include/neuron/utils/log.h b/include/neuron/utils/log.h index b3b8990d..1bfd9165 100644 --- a/include/neuron/utils/log.h +++ b/include/neuron/utils/log.h @@ -24,8 +24,32 @@ config_ **/ #include "utils/zlog.h" +#include "define.h" + extern zlog_category_t *neuron; +inline static const char *log_level_to_str(int level) +{ + switch (level) { + case ZLOG_LEVEL_FATAL: + return NEU_LOG_LEVEL_FATAL; + case ZLOG_LEVEL_ERROR: + return NEU_LOG_LEVEL_ERROR; + case ZLOG_LEVEL_WARN: + return NEU_LOG_LEVEL_WARN; + case ZLOG_LEVEL_NOTICE: + return NEU_LOG_LEVEL_NOTICE; + case ZLOG_LEVEL_INFO: + return NEU_LOG_LEVEL_INFO; + case ZLOG_LEVEL_DEBUG: + return NEU_LOG_LEVEL_DEBUG; + default: + return "UNKNOWN"; + } +} + +#define nlog_level_change(level) zlog_level_switch(neuron, level) + #define nlog_fatal(...) \ zlog(neuron, __FILE__, sizeof(__FILE__) - 1, __func__, \ sizeof(__func__) - 1, __LINE__, ZLOG_LEVEL_FATAL, __VA_ARGS__) diff --git a/plugins/restful/adapter_handle.c b/plugins/restful/adapter_handle.c index 2ca0249c..60552507 100644 --- a/plugins/restful/adapter_handle.c +++ b/plugins/restful/adapter_handle.c @@ -330,11 +330,11 @@ void handle_get_node_state_resp(nng_aio *aio, neu_resp_get_node_state_t *state) neu_json_get_node_state_resp_t res = { 0 }; char * result = NULL; - res.link = state->state.link; - res.running = state->state.running; - res.rtt = state->rtt; - res.log_level = state->state.log_level; - strcpy(res.core_level, state->core_level); + res.link = state->state.link; + res.running = state->state.running; + res.rtt = state->rtt; + res.log_level = (char *) log_level_to_str(state->state.log_level); + res.core_level = (char *) log_level_to_str(state->core_level); neu_json_encode_by_fn(&res, neu_json_encode_get_node_state_resp, &result); @@ -359,10 +359,11 @@ void handle_get_nodes_state_resp(nng_aio * aio, states_res.nodes[index].running = state->state.running; states_res.nodes[index].link = state->state.link; states_res.nodes[index].rtt = state->rtt; - states_res.nodes[index].log_level = state->state.log_level; + states_res.nodes[index].log_level = + (char *) log_level_to_str(state->state.log_level); } - strcpy(states_res.core_level, states->core_level); + states_res.core_level = (char *) log_level_to_str(states->core_level); neu_json_encode_by_fn(&states_res, neu_json_encode_get_nodes_state_resp, &result); diff --git a/plugins/restful/log_handle.c b/plugins/restful/log_handle.c index ac9460ca..576787c9 100644 --- a/plugins/restful/log_handle.c +++ b/plugins/restful/log_handle.c @@ -113,78 +113,46 @@ void handle_log_level(nng_aio *aio) NEU_PROCESS_HTTP_REQUEST_VALIDATE_JWT( aio, neu_json_update_log_level_req_t, neu_json_decode_update_log_level_req, { - int ret = 0; - neu_reqresp_head_t header = { 0 }; - neu_req_update_log_level_t cmd = { 0 }; - int log_level; + neu_reqresp_head_t header = { 0 }; + neu_req_update_log_level_t cmd = { 0 }; + int log_level = -1; if (0 == strcmp(req->log_level, NEU_LOG_LEVEL_DEBUG)) { log_level = ZLOG_LEVEL_DEBUG; - strcpy(cmd.log_level, NEU_LOG_LEVEL_DEBUG); } else if (0 == strcmp(req->log_level, NEU_LOG_LEVEL_INFO)) { log_level = ZLOG_LEVEL_INFO; - strcpy(cmd.log_level, NEU_LOG_LEVEL_INFO); } else if (0 == strcmp(req->log_level, NEU_LOG_LEVEL_NOTICE)) { log_level = ZLOG_LEVEL_NOTICE; - strcpy(cmd.log_level, NEU_LOG_LEVEL_NOTICE); } else if (0 == strcmp(req->log_level, NEU_LOG_LEVEL_WARN)) { log_level = ZLOG_LEVEL_WARN; - strcpy(cmd.log_level, NEU_LOG_LEVEL_WARN); } else if (0 == strcmp(req->log_level, NEU_LOG_LEVEL_ERROR)) { log_level = ZLOG_LEVEL_ERROR; - strcpy(cmd.log_level, NEU_LOG_LEVEL_ERROR); } else if (0 == strcmp(req->log_level, NEU_LOG_LEVEL_FATAL)) { log_level = ZLOG_LEVEL_FATAL; - strcpy(cmd.log_level, NEU_LOG_LEVEL_FATAL); } else { - strcpy(cmd.log_level, "unknow"); - nlog_error( - "Failed to modify log_level of the node, node_name:%s, ", - req->node_name); + nlog_error("Failed to modify log_level of the node, " + "node_name:%s, log_level: %s", + req->node_name, req->log_level); + } + + if (log_level == -1) { NEU_JSON_RESPONSE_ERROR(NEU_ERR_PARAM_IS_WRONG, { neu_http_response(aio, error_code.error, result_error); }); - goto end; - } - if (req->core) { - zlog_category_t *neuron = zlog_get_category("neuron"); - ret = zlog_level_switch(neuron, log_level); - if (ret != 0) { - nlog_error( - "Failed to modify log_level of the core, ret: %d", ret); - NEU_JSON_RESPONSE_ERROR(NEU_ERR_EINTERNAL, { - neu_http_response(aio, error_code.error, result_error); - }); - goto end; - } - } - - if (req->node_name) { - zlog_category_t *ct = zlog_get_category(req->node_name); + } else { + header.ctx = aio; + header.type = NEU_REQ_UPDATE_LOG_LEVEL; + cmd.core = req->core; + cmd.log_level = log_level; strcpy(cmd.node, req->node_name); - ret = zlog_level_switch(ct, log_level); + + int ret = neu_plugin_op(plugin, header, &cmd); if (ret != 0) { - nlog_error( - "Failed to modify log_level of the node, node_name:%s, " - "ret: %d,", - req->node_name, ret); - NEU_JSON_RESPONSE_ERROR(0, { - neu_http_response(aio, error_code.error, result_error); + NEU_JSON_RESPONSE_ERROR(NEU_ERR_IS_BUSY, { + neu_http_response(aio, NEU_ERR_IS_BUSY, result_error); }); - goto end; } } - - header.ctx = aio; - header.type = NEU_REQ_UPDATE_LOG_LEVEL; - cmd.core = req->core; - ret = neu_plugin_op(plugin, header, &cmd); - if (ret != 0) { - NEU_JSON_RESPONSE_ERROR(NEU_ERR_IS_BUSY, { - neu_http_response(aio, NEU_ERR_IS_BUSY, result_error); - }); - } - end:; }) } diff --git a/src/adapter/adapter.c b/src/adapter/adapter.c index 474c87c1..e2ab29e9 100644 --- a/src/adapter/adapter.c +++ b/src/adapter/adapter.c @@ -146,6 +146,7 @@ neu_adapter_t *neu_adapter_create(neu_adapter_info_t *info, bool load) adapter->module = info->module; adapter->timestamp_lev = 0; adapter->trans_data_port = 0; + adapter->log_level = ZLOG_LEVEL_NOTICE; struct sockaddr_in remote = { .sin_family = AF_INET, @@ -471,9 +472,7 @@ static int adapter_command(neu_adapter_t *adapter, neu_reqresp_head_t header, } case NEU_REQ_UPDATE_LOG_LEVEL: { neu_req_update_log_level_t *cmd = (neu_req_update_log_level_t *) data; - if (cmd->node != NULL) { - strcpy(pheader->receiver, cmd->node); - } + strcpy(pheader->receiver, cmd->node); break; } default: @@ -1141,8 +1140,13 @@ static int adapter_loop(enum neu_event_io_type type, int fd, void *usr_data) break; } case NEU_REQ_UPDATE_LOG_LEVEL: { + neu_req_update_log_level_t *cmd = + (neu_req_update_log_level_t *) &header[1]; neu_resp_error_t error = { 0 }; + adapter->log_level = cmd->log_level; + zlog_level_switch(neu_plugin_to_plugin_common(adapter->plugin)->log, + cmd->log_level); neu_msg_exchange(header); header->type = NEU_RESP_ERROR; reply(adapter, header, &error); @@ -1322,9 +1326,9 @@ neu_node_state_t neu_adapter_get_state(neu_adapter_t *adapter) neu_node_state_t state = { 0 }; neu_plugin_common_t *common = neu_plugin_to_plugin_common(adapter->plugin); - state.link = common->link_state; - state.running = adapter->state; - strcpy(state.log_level, common->log_level); + state.link = common->link_state; + state.running = adapter->state; + state.log_level = adapter->log_level; return state; } diff --git a/src/adapter/adapter_internal.h b/src/adapter/adapter_internal.h index 39782ae2..7f22dec3 100644 --- a/src/adapter/adapter_internal.h +++ b/src/adapter/adapter_internal.h @@ -33,8 +33,6 @@ struct neu_adapter { neu_node_running_state_e state; - char log_level[NEU_LOG_LEVEL_LEN]; - adapter_callbacks_t cb_funs; void * handle; @@ -59,6 +57,7 @@ struct neu_adapter { // metrics neu_node_metrics_t *metrics; + int log_level; }; typedef void (*adapter_handler)(neu_adapter_t * adapter, diff --git a/src/base/neu_plugin_common.c b/src/base/neu_plugin_common.c index 781b61a7..5616d05e 100644 --- a/src/base/neu_plugin_common.c +++ b/src/base/neu_plugin_common.c @@ -31,7 +31,6 @@ void neu_plugin_common_init(neu_plugin_common_t *common) { common->magic = NEU_PLUGIN_MAGIC_NUMBER; common->link_state = NEU_NODE_LINK_STATE_DISCONNECTED; - strcpy(common->log_level, NEU_LOG_LEVEL_NOTICE); } bool neu_plugin_common_check(neu_plugin_t *plugin) diff --git a/src/core/manager.c b/src/core/manager.c index 662b2ed6..4082ee95 100644 --- a/src/core/manager.c +++ b/src/core/manager.c @@ -92,6 +92,7 @@ neu_manager_t *neu_manager_create() manager->node_manager = neu_node_manager_create(); manager->subscribe_manager = neu_subscribe_manager_create(); manager->template_manager = neu_template_manager_create(); + manager->log_level = ZLOG_LEVEL_NOTICE; manager->server_fd = socket(AF_INET, SOCK_DGRAM | SOCK_NONBLOCK, IPPROTO_UDP); @@ -787,11 +788,8 @@ static int manager_loop(enum neu_event_io_type type, int fd, void *usr_data) neu_resp_get_nodes_state_t resp = { 0 }; UT_array *states = neu_node_manager_get_state(manager->node_manager); - neu_adapter_t *adapter_core = - neu_node_manager_find(manager->node_manager, "default-dashboard"); - strcpy(resp.core_level, - neu_plugin_to_plugin_common(adapter_core->plugin)->log_level); - resp.states = utarray_clone(states); + resp.core_level = manager->log_level; + resp.states = utarray_clone(states); strcpy(header->receiver, header->sender); strcpy(header->sender, "manager"); @@ -845,13 +843,6 @@ static int manager_loop(enum neu_event_io_type type, int fd, void *usr_data) neu_msg_exchange(header); reply(manager, header, &e); } else { - neu_resp_get_node_state_t *resp = - (neu_resp_get_node_state_t *) &header[1]; - neu_adapter_t *adapter_core = neu_node_manager_find( - manager->node_manager, "default-dashboard"); - strcpy( - resp->core_level, - neu_plugin_to_plugin_common(adapter_core->plugin)->log_level); forward_msg(manager, header, header->receiver); } @@ -1030,12 +1021,19 @@ static int manager_loop(enum neu_event_io_type type, int fd, void *usr_data) case NEU_RESP_GET_NDRIVER_TAGS: case NEU_RESP_GET_GROUP: case NEU_RESP_GET_NODE_SETTING: - case NEU_RESP_GET_NODE_STATE: case NEU_RESP_ERROR: case NEU_RESP_READ_GROUP: forward_msg(manager, header, header->receiver); break; + case NEU_RESP_GET_NODE_STATE: { + neu_resp_get_node_state_t *resp = + (neu_resp_get_node_state_t *) &header[1]; + + resp->core_level = manager->log_level; + forward_msg(manager, header, header->receiver); + break; + } case NEU_REQ_ADD_NDRIVER_MAP: { neu_req_ndriver_map_t *cmd = (neu_req_ndriver_map_t *) &header[1]; neu_resp_error_t error = { 0 }; @@ -1116,60 +1114,18 @@ static int manager_loop(enum neu_event_io_type type, int fd, void *usr_data) neu_req_update_log_level_t *cmd = (neu_req_update_log_level_t *) &header[1]; - if (cmd->core) { - if (strcmp(header->receiver, "") == 0) { - neu_adapter_t *adapter_core = neu_node_manager_find( - manager->node_manager, "default-dashboard"); - strcpy(neu_plugin_to_plugin_common(adapter_core->plugin) - ->log_level, - cmd->log_level); - neu_resp_error_t error = { 0 }; - neu_msg_exchange(header); - header->type = NEU_RESP_ERROR; - reply(manager, header, &error); - } else { - if (neu_node_manager_find(manager->node_manager, - header->receiver) == NULL) { - neu_resp_error_t e = { .error = NEU_ERR_NODE_NOT_EXIST }; - header->type = NEU_RESP_ERROR; - neu_msg_exchange(header); - reply(manager, header, &e); - } else { - neu_adapter_t *adapter_core = neu_node_manager_find( - manager->node_manager, "default-dashboard"); - strcpy(neu_plugin_to_plugin_common(adapter_core->plugin) - ->log_level, - cmd->log_level); - neu_adapter_t *adapter_log = neu_node_manager_find( - manager->node_manager, header->receiver); - strcpy(neu_plugin_to_plugin_common(adapter_log->plugin) - ->log_level, - cmd->log_level); - forward_msg(manager, header, header->receiver); - } - } + if (neu_node_manager_find(manager->node_manager, header->receiver) == + NULL) { + neu_resp_error_t e = { .error = NEU_ERR_NODE_NOT_EXIST }; + header->type = NEU_RESP_ERROR; + neu_msg_exchange(header); + reply(manager, header, &e); } else { - if (strcmp(header->receiver, "") == 0) { - neu_resp_error_t e = { .error = NEU_ERR_PARAM_IS_WRONG }; - header->type = NEU_RESP_ERROR; - neu_msg_exchange(header); - reply(manager, header, &e); - } else { - if (neu_node_manager_find(manager->node_manager, - header->receiver) == NULL) { - neu_resp_error_t e = { .error = NEU_ERR_NODE_NOT_EXIST }; - header->type = NEU_RESP_ERROR; - neu_msg_exchange(header); - reply(manager, header, &e); - } else { - neu_adapter_t *adapter_log = neu_node_manager_find( - manager->node_manager, header->receiver); - strcpy(neu_plugin_to_plugin_common(adapter_log->plugin) - ->log_level, - cmd->log_level); - forward_msg(manager, header, header->receiver); - } + if (cmd->core) { + manager->log_level = cmd->log_level; + nlog_level_change(manager->log_level); } + forward_msg(manager, header, header->receiver); } break; diff --git a/src/core/manager_internal.h b/src/core/manager_internal.h index 874ce1d1..ea39d136 100644 --- a/src/core/manager_internal.h +++ b/src/core/manager_internal.h @@ -29,9 +29,10 @@ #include "template_manager.h" typedef struct neu_manager { - int server_fd; - uint8_t buf[NEU_MSG_MAX_SIZE]; - uint8_t recv_buf[NEU_MSG_MAX_SIZE]; + int server_fd; + uint8_t buf[NEU_MSG_MAX_SIZE]; + uint8_t recv_buf[NEU_MSG_MAX_SIZE]; + neu_events_t * events; neu_event_io_t *loop; @@ -43,6 +44,8 @@ typedef struct neu_manager { neu_event_timer_t *timer_timestamp; int64_t timestamp_lev_manager; + + int log_level; } neu_manager_t; int neu_manager_add_plugin(neu_manager_t *manager, const char *library); diff --git a/src/core/node_manager.c b/src/core/node_manager.c index ad03823e..a96c0209 100644 --- a/src/core/node_manager.c +++ b/src/core/node_manager.c @@ -414,8 +414,7 @@ UT_array *neu_node_manager_get_state(neu_node_manager_t *mgr) state.state.running = el->adapter->state; state.state.link = neu_plugin_to_plugin_common(el->adapter->plugin)->link_state; - strcpy(state.state.log_level, - neu_plugin_to_plugin_common(el->adapter->plugin)->log_level); + state.state.log_level = el->adapter->log_level; neu_metric_entry_t *e = NULL; if (NULL != el->adapter->metrics) { HASH_FIND_STR(el->adapter->metrics->entries, diff --git a/src/parser/neu_json_node.h b/src/parser/neu_json_node.h index e3268701..b1f51b5e 100644 --- a/src/parser/neu_json_node.h +++ b/src/parser/neu_json_node.h @@ -54,7 +54,7 @@ typedef struct { int64_t link; int64_t rtt; char * log_level; - char core_level[NEU_LOG_LEVEL_LEN]; + char * core_level; } neu_json_get_node_state_resp_t; int neu_json_encode_get_node_state_resp(void *json_object, void *param); @@ -70,7 +70,7 @@ typedef struct { typedef struct { uint16_t n_node; neu_json_get_nodes_state_t *nodes; - char core_level[NEU_LOG_LEVEL_LEN]; + char * core_level; } neu_json_get_nodes_state_resp_t; int neu_json_encode_get_nodes_state_resp(void *json_object, void *param);