summaryrefslogtreecommitdiff
path: root/app/src/monit.c
diff options
context:
space:
mode:
authorQiuwen Lu <[email protected]>2017-03-23 13:54:35 +0800
committerQiuwen Lu <[email protected]>2017-03-23 13:54:35 +0800
commit42df3214fc22ce3a55c028bdb3d3a4dfa131bf4d (patch)
treecc93df82e14c32ca5e46c28f24c184eeb056dd5c /app/src/monit.c
parent83de81b8f4b4fe4faabc23517efa791430f65ac2 (diff)
增加应用端收发包统计功能
Diffstat (limited to 'app/src/monit.c')
-rw-r--r--app/src/monit.c88
1 files changed, 58 insertions, 30 deletions
diff --git a/app/src/monit.c b/app/src/monit.c
index c3ccbfa..203e6e5 100644
--- a/app/src/monit.c
+++ b/app/src/monit.c
@@ -4,11 +4,38 @@
* \date 2016-11-30
*/
-#include <mr_common.h>
-#include <mr_rtdev.h>
#include <mrapp.h>
-
-#include "cJSON.h"
+#include <cJSON.h>
+
+int vdev_instance_stats_get(struct vdev_instance * vdi, struct vdev_stat_info * stat_info)
+{
+ struct vnode_cons_stat * st_cons_rx = vnode_mirror_cons_stat_get(vdi->vnode_rx_cons);
+ struct vnode_prod_stat * st_prod_tx = vnode_mirror_prod_stat_get(vdi->vnode_tx_prod);
+ struct vnode_prod_stat * st_prod_ftx = vnode_mirror_prod_stat_get(vdi->vnode_ftx_prod);
+ stat_info->nr_rxstream = vdi->nr_rxstream;
+ stat_info->nr_txstream = vdi->nr_txstream;
+
+ for (int i = 0; i < vdi->nr_rxstream; i++)
+ {
+ stat_info->rx_on_line[i] = rte_atomic64_read(&st_cons_rx[i].on_line);
+ stat_info->rx_deliver[i] = rte_atomic64_read(&st_cons_rx[i].recieved);
+ stat_info->rx_missed[i] = rte_atomic64_read(&st_cons_rx[i].missed);
+ }
+
+ for (int i = 0; i < vdi->nr_txstream; i++)
+ {
+ stat_info->tx_on_line[i] = rte_atomic64_read(&st_prod_tx[i].on_line);
+ stat_info->tx_deliver[i] = rte_atomic64_read(&st_prod_tx[i].sent);
+ stat_info->tx_missed[i] = rte_atomic64_read(&st_prod_tx[i].missed);
+
+ stat_info->ftx_on_line[i] = rte_atomic64_read(&st_prod_ftx[i].on_line);
+ stat_info->ftx_deliver[i] = rte_atomic64_read(&st_prod_ftx[i].sent);
+ stat_info->ftx_missed[i] = rte_atomic64_read(&st_prod_ftx[i].missed);
+ }
+
+ return 0;
+}
+
static cJSON * __create_uint64_array(const uint64_t * value, int nr_value)
{
@@ -18,18 +45,18 @@ static cJSON * __create_uint64_array(const uint64_t * value, int nr_value)
return uint64_array;
}
-static cJSON * __create_vdev_stats(struct rtdev_app_desc * dev_desc)
+static cJSON * __create_vdev_stats(struct vdev_instance * vdi)
{
- struct rtdev_stat_info _stat_info;
- mr_rtdev_app_stats_get(dev_desc, &_stat_info);
+ struct vdev_stat_info _stat_info;
+ vdev_instance_stats_get(vdi, &_stat_info);
- struct cJSON * j_raw_device_stats = cJSON_CreateObject();
- unsigned int nr_rx_stream = dev_desc->nr_rx_stream;
- unsigned int nr_tx_stream = dev_desc->nr_tx_stream;
+ struct cJSON * j_vdi_stats = cJSON_CreateObject();
+ unsigned int nr_rx_stream = _stat_info.nr_rxstream;
+ unsigned int nr_tx_stream = _stat_info.nr_txstream;
-#define __JOIN_RAW_DEVICE_STATS_ITEM(item, streams) do { \
- cJSON_AddItemToObject(j_raw_device_stats, #item, \
- __create_uint64_array(_stat_info.item, streams)); \
+#define __JOIN_RAW_DEVICE_STATS_ITEM(item, streams) do { \
+ cJSON_AddItemToObject(j_vdi_stats, #item, \
+ __create_uint64_array(_stat_info.item, streams)); \
} while(0)
__JOIN_RAW_DEVICE_STATS_ITEM(rx_on_line, nr_rx_stream);
@@ -40,38 +67,39 @@ static cJSON * __create_vdev_stats(struct rtdev_app_desc * dev_desc)
__JOIN_RAW_DEVICE_STATS_ITEM(tx_missed, nr_tx_stream);
__JOIN_RAW_DEVICE_STATS_ITEM(ftx_on_line, nr_tx_stream);
__JOIN_RAW_DEVICE_STATS_ITEM(ftx_deliver, nr_tx_stream);
- __JOIN_RAW_DEVICE_STATS_ITEM(ftx_missed, nr_tx_stream);
- return j_raw_device_stats;
+ __JOIN_RAW_DEVICE_STATS_ITEM(ftx_missed, nr_tx_stream);
+
+ return j_vdi_stats;
}
// 运行时原始报文设备统计计数
-static cJSON * monit_vdev(struct mrapp_instance * instance)
+static cJSON * monit_vdev(struct mr_instance * instance)
{
struct cJSON * j_raw_device_array = cJSON_CreateArray();
- for(int i = 0; i < RTE_DIM(instance->raw_socket); i++)
+ for(int i = 0; i < instance->nr_vdevs; i++)
{
- struct raw_socket * socket = instance->raw_socket[i];
- if (socket == NULL) continue;
+ struct mr_vdev * vdev = &instance->vdevs[i];
+ if (vdev == NULL) continue;
- cJSON * j_raw_device = cJSON_CreateObject();
- cJSON_AddStringToObject(j_raw_device, "symbol", socket->devsym);
- cJSON_AddNumberToObject(j_raw_device, "rxstreams", socket->nr_rxstream);
- cJSON_AddNumberToObject(j_raw_device, "txstreams", socket->nr_txstream);
- cJSON_AddItemToObject(j_raw_device, "stats", __create_vdev_stats(socket->rtdev_desc));
- cJSON_AddItemToArray(j_raw_device_array, j_raw_device);
+ cJSON * j_vdev = cJSON_CreateObject();
+ cJSON_AddStringToObject(j_vdev, "symbol", vdev->devsym);
+ cJSON_AddNumberToObject(j_vdev, "rxstreams", vdev->nr_rxstream);
+ cJSON_AddNumberToObject(j_vdev, "txstreams", vdev->nr_txstream);
+ cJSON_AddItemToObject(j_vdev, "stats", __create_vdev_stats(vdev->vdi));
+ cJSON_AddItemToArray(j_raw_device_array, j_vdev);
}
return j_raw_device_array;
}
-static cJSON * monit_app_info(struct mrapp_instance * instance)
+static cJSON * monit_app_info(struct mr_instance * instance)
{
struct cJSON * j_root = cJSON_CreateObject();
cJSON_AddStringToObject(j_root, "symbol", instance->appsym);
return j_root;
}
-static cJSON * monit_root(struct mrapp_instance * instance)
+static cJSON * monit_root(struct mr_instance * instance)
{
struct cJSON * j_root = cJSON_CreateObject();
cJSON_AddItemToObject(j_root, "appinfo", monit_app_info(instance));
@@ -79,13 +107,13 @@ static cJSON * monit_root(struct mrapp_instance * instance)
return j_root;
}
-int mrapp_monit_loop(struct mrapp_instance * instance)
+int mrapp_monit_loop(struct mr_instance * instance)
{
FILE * fp_monit = fopen(instance->monit_file_path, "w");
if(fp_monit == NULL)
{
- MR_LOG(INFO, MRLIB, "Open monit result file %s failed: %s \n",
- instance->monit_file_path, strerror(errno));
+ MR_ERROR("Open monit result file %s failed: %s \n",
+ instance->monit_file_path, strerror(errno));
return 0;
}