From 3a9e4b888dd383034f7f6bcc6d4ebbda5cfed6c3 Mon Sep 17 00:00:00 2001 From: fengzero Date: Thu, 10 Nov 2022 02:29:52 +0000 Subject: [PATCH 1/2] connection: statics of bytes sent and recvied --- include/neuron/connection/neu_connection.h | 13 +++++++++++ src/connection/connection.c | 26 +++++++++++++++++++++- 2 files changed, 38 insertions(+), 1 deletion(-) diff --git a/include/neuron/connection/neu_connection.h b/include/neuron/connection/neu_connection.h index 7f9ec94e..eaad1cb0 100644 --- a/include/neuron/connection/neu_connection.h +++ b/include/neuron/connection/neu_connection.h @@ -111,6 +111,11 @@ typedef struct neu_conn_param { typedef struct neu_conn neu_conn_t; +typedef struct neu_conn_state { + uint64_t send_bytes; + uint64_t recv_bytes; +} neu_conn_state_t; + /** * @brief create a new connection. * @@ -166,6 +171,14 @@ void neu_conn_stop(neu_conn_t *conn); */ void neu_conn_start(neu_conn_t *conn); +/** + * @brief get state of connection + * + * + * @param[in] conn + * @return returns state. + */ +neu_conn_state_t neu_conn_state(neu_conn_t *conn); /** * @brief Receive connection requests from clients. * diff --git a/src/connection/connection.c b/src/connection/connection.c index 3e115dc0..cc5460aa 100644 --- a/src/connection/connection.c +++ b/src/connection/connection.c @@ -53,6 +53,8 @@ struct neu_conn { int fd; bool block; + neu_conn_state_t state; + struct { struct tcp_client *clients; int n_client; @@ -120,7 +122,6 @@ void neu_conn_start(neu_conn_t *conn) neu_conn_t *neu_conn_reconfig(neu_conn_t *conn, neu_conn_param_t *param) { pthread_mutex_lock(&conn->mtx); - (void) param; conn_disconnect(conn); conn_free_param(conn); @@ -129,6 +130,9 @@ neu_conn_t *neu_conn_reconfig(neu_conn_t *conn, neu_conn_param_t *param) conn_init_param(conn, param); conn_tcp_server_listen(conn); + conn->state.recv_bytes = 0; + conn->state.send_bytes = 0; + pthread_mutex_unlock(&conn->mtx); return conn; @@ -150,6 +154,11 @@ void neu_conn_destory(neu_conn_t *conn) free(conn); } +neu_conn_state_t neu_conn_state(neu_conn_t *conn) +{ + return conn->state; +} + int neu_conn_tcp_server_accept(neu_conn_t *conn) { struct sockaddr_in client = { 0 }; @@ -234,6 +243,9 @@ ssize_t neu_conn_tcp_server_send(neu_conn_t *conn, int fd, uint8_t *buf, conn_tcp_server_listen(conn); ret = send(fd, buf, len, MSG_NOSIGNAL | MSG_DONTWAIT); + if (ret > 0) { + conn->state.send_bytes += ret; + } pthread_mutex_unlock(&conn->mtx); @@ -257,6 +269,10 @@ ssize_t neu_conn_tcp_server_recv(neu_conn_t *conn, int fd, uint8_t *buf, ret = recv(fd, buf, len, 0); } + if (ret > 0) { + conn->state.recv_bytes += ret; + } + pthread_mutex_unlock(&conn->mtx); return ret; @@ -310,6 +326,10 @@ ssize_t neu_conn_send(neu_conn_t *conn, uint8_t *buf, ssize_t len) } } + if (ret > 0) { + conn->state.send_bytes += ret; + } + pthread_mutex_unlock(&conn->mtx); return ret; @@ -370,6 +390,10 @@ ssize_t neu_conn_recv(neu_conn_t *conn, uint8_t *buf, ssize_t len) pthread_mutex_unlock(&conn->mtx); + if (ret > 0) { + conn->state.recv_bytes += ret; + } + return ret; } From 04d990e79b4aca7cd4bc6945595c62e31099251e Mon Sep 17 00:00:00 2001 From: fengzero Date: Thu, 10 Nov 2022 02:50:09 +0000 Subject: [PATCH 2/2] modbus: connection state --- plugins/modbus/modbus_req.c | 25 ++++++++++--------------- 1 file changed, 10 insertions(+), 15 deletions(-) diff --git a/plugins/modbus/modbus_req.c b/plugins/modbus/modbus_req.c index d36200ff..79eecab2 100644 --- a/plugins/modbus/modbus_req.c +++ b/plugins/modbus/modbus_req.c @@ -50,15 +50,8 @@ int modbus_send_msg(void *ctx, uint16_t n_byte, uint8_t *bytes) { neu_plugin_t *plugin = (neu_plugin_t *) ctx; - neu_adapter_update_metric_cb_t update_metric = - plugin->common.adapter_callbacks->update_metric; - plog_send_protocol(plugin, bytes, n_byte); - int ret = neu_conn_send(plugin->conn, bytes, n_byte); - if (ret > 0) { - update_metric(plugin->common.adapter, NEU_METRIC_SEND_BYTES, ret, NULL); - } - return ret; + return neu_conn_send(plugin->conn, bytes, n_byte); } int modbus_group_timer(neu_plugin_t *plugin, neu_plugin_group_t *group, @@ -66,9 +59,9 @@ int modbus_group_timer(neu_plugin_t *plugin, neu_plugin_group_t *group, { neu_adapter_update_metric_cb_t update_metric = plugin->common.adapter_callbacks->update_metric; - - struct modbus_group_data *gd = NULL; - int64_t rtt = NEU_METRIC_LAST_RTT_MS_MAX; + struct modbus_group_data *gd = NULL; + neu_conn_state_t state = { 0 }; + int64_t rtt = NEU_METRIC_LAST_RTT_MS_MAX; if (group->user_data == NULL) { gd = calloc(1, sizeof(struct modbus_group_data)); @@ -112,6 +105,12 @@ int modbus_group_timer(neu_plugin_t *plugin, neu_plugin_group_t *group, } } + state = neu_conn_state(plugin->conn); + + update_metric(plugin->common.adapter, NEU_METRIC_SEND_BYTES, + state.send_bytes, NULL); + update_metric(plugin->common.adapter, NEU_METRIC_RECV_BYTES, + state.recv_bytes, NULL); update_metric(plugin->common.adapter, NEU_METRIC_LAST_RTT_MS, rtt, NULL); update_metric(plugin->common.adapter, NEU_METRIC_GROUP_LAST_SEND_MSGS, gd->cmd_sort->n_cmd, group->group_name); @@ -319,13 +318,9 @@ static int process_protocol_buf(neu_plugin_t *plugin, uint16_t response_size) neu_protocol_unpack_buf_t pbuf = { 0 }; ssize_t ret = 0; - neu_adapter_update_metric_cb_t update_metric = - plugin->common.adapter_callbacks->update_metric; - ret = neu_conn_recv(plugin->conn, recv_buf, response_size); if (ret > 0) { - update_metric(plugin->common.adapter, NEU_METRIC_RECV_BYTES, ret, NULL); neu_protocol_unpack_buf_init(&pbuf, recv_buf, ret); plog_recv_protocol(plugin, recv_buf, ret); ret = modbus_stack_recv(plugin->stack, &pbuf);