diff --git a/include/neuron/adapter.h b/include/neuron/adapter.h index d52e536f..672cf9fa 100644 --- a/include/neuron/adapter.h +++ b/include/neuron/adapter.h @@ -395,6 +395,7 @@ typedef struct neu_req_get_node_state { typedef struct neu_resp_get_node_state { neu_node_state_t state; + uint16_t avg_rtt; // average round trip time in milliseconds } neu_resp_get_node_state_t; typedef struct neu_req_get_nodes_state { @@ -403,6 +404,7 @@ typedef struct neu_req_get_nodes_state { typedef struct { char node[NEU_NODE_NAME_LEN]; neu_node_state_t state; + uint16_t avg_rtt; // average round trip time in milliseconds } neu_nodes_state_t; inline static UT_icd neu_nodes_state_t_icd() diff --git a/plugins/restful/adapter_handle.c b/plugins/restful/adapter_handle.c index bb4a0276..88d86b2a 100644 --- a/plugins/restful/adapter_handle.c +++ b/plugins/restful/adapter_handle.c @@ -302,6 +302,7 @@ void handle_get_node_state_resp(nng_aio *aio, neu_resp_get_node_state_t *state) res.link = state->state.link; res.running = state->state.running; + res.avg_rtt = state->avg_rtt; neu_json_encode_by_fn(&res, neu_json_encode_get_node_state_resp, &result); @@ -325,6 +326,7 @@ void handle_get_nodes_state_resp(nng_aio * aio, states_res.nodes[index].name = state->node; states_res.nodes[index].running = state->state.running; states_res.nodes[index].link = state->state.link; + states_res.nodes[index].avg_rtt = state->avg_rtt; } neu_json_encode_by_fn(&states_res, neu_json_encode_get_nodes_state_resp, diff --git a/src/adapter/adapter.c b/src/adapter/adapter.c index 5f5ee841..d98a359d 100644 --- a/src/adapter/adapter.c +++ b/src/adapter/adapter.c @@ -419,6 +419,7 @@ static int adapter_loop(enum neu_event_io_type type, int fd, void *usr_data) neu_resp_get_node_state_t resp = { 0 }; resp.state = neu_adapter_get_state(adapter); + resp.avg_rtt = adapter->stat.avg_rtt; header->type = NEU_RESP_GET_NODE_STATE; neu_msg_exchange(header); reply(adapter, header, &resp); diff --git a/src/core/node_manager.c b/src/core/node_manager.c index fec14d0d..5605b756 100644 --- a/src/core/node_manager.c +++ b/src/core/node_manager.c @@ -303,6 +303,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; + state.avg_rtt = el->adapter->stat.avg_rtt; utarray_push_back(states, &state); } diff --git a/src/parser/neu_json_node.c b/src/parser/neu_json_node.c index 14def345..e7a5ff5a 100644 --- a/src/parser/neu_json_node.c +++ b/src/parser/neu_json_node.c @@ -166,6 +166,11 @@ int neu_json_encode_get_node_state_resp(void *json_object, void *param) .name = "link", .t = NEU_JSON_INT, .v.val_int = resp->link, + }, + { + .name = "average_rtt", + .t = NEU_JSON_INT, + .v.val_int = resp->avg_rtt, } }; ret = neu_json_encode_field(json_object, resp_elems, NEU_JSON_ELEM_SIZE(resp_elems)); @@ -198,6 +203,11 @@ int neu_json_encode_get_nodes_state_resp(void *json_object, void *param) .t = NEU_JSON_INT, .v.val_int = p_node->link, }, + { + .name = "average_rtt", + .t = NEU_JSON_INT, + .v.val_int = p_node->avg_rtt, + }, }; node_array = neu_json_encode_array(node_array, node_elems, NEU_JSON_ELEM_SIZE(node_elems)); diff --git a/src/parser/neu_json_node.h b/src/parser/neu_json_node.h index c6d60d49..a1eb81af 100644 --- a/src/parser/neu_json_node.h +++ b/src/parser/neu_json_node.h @@ -56,6 +56,7 @@ int neu_json_encode_get_node_stat_resp(void *json_object, void *param); typedef struct { int64_t running; int64_t link; + int64_t avg_rtt; } neu_json_get_node_state_resp_t; int neu_json_encode_get_node_state_resp(void *json_object, void *param); @@ -64,6 +65,7 @@ typedef struct { char * name; int64_t running; int64_t link; + int64_t avg_rtt; } neu_json_get_nodes_state_t; typedef struct {