summaryrefslogtreecommitdiff
path: root/app/src/monit.c
diff options
context:
space:
mode:
author童宗振 <[email protected]>2024-03-13 10:46:27 +0000
committer童宗振 <[email protected]>2024-03-13 10:46:27 +0000
commit468c21fa9ca6c37b66839635dbf8cac8479c0c6c (patch)
tree7615fd431a39a0b54cea96fdc3b46103aca73ca7 /app/src/monit.c
parentdde974556876ed3e6e10b8051dff9dbead329f69 (diff)
Dp trace perf opti
Diffstat (limited to 'app/src/monit.c')
-rw-r--r--app/src/monit.c216
1 files changed, 112 insertions, 104 deletions
diff --git a/app/src/monit.c b/app/src/monit.c
index a169ab7..e543b0f 100644
--- a/app/src/monit.c
+++ b/app/src/monit.c
@@ -1,11 +1,12 @@
/* \brief 应用状态监测数据输出
-*
-* \author Lu Qiuwen<[email protected]>
-* \date 2016-11-30
-*/
+ *
+ * \author Lu Qiuwen<[email protected]>
+ * \date 2016-11-30
+ */
-#include <mrapp.h>
#include <cJSON.h>
+#include <mrapp.h>
+#include <mrdp_trace.h>
unsigned int g_monit_interval = 1;
@@ -18,12 +19,12 @@ int vdev_instance_stats_get(struct vdev_instance * vdi, struct vdev_stat_info *
stat_info->nr_rxstream = vdi->nr_rxstream;
stat_info->nr_txstream = vdi->nr_txstream;
- if(vdi->nr_rxstream > 0)
+ if (vdi->nr_rxstream > 0)
{
st_cons_rx = vnode_mirror_cons_stat_get(vdi->vnode_rx_cons);
}
- if(vdi->nr_txstream > 0)
+ if (vdi->nr_txstream > 0)
{
st_prod_tx = vnode_mirror_prod_stat_get(vdi->vnode_tx_prod);
st_prod_ftx = vnode_mirror_prod_stat_get(vdi->vnode_ftx_prod);
@@ -68,14 +69,14 @@ void vdev_instance_stats_last_get(struct vdev_instance * vdi, struct vdev_stat_i
static cJSON * __create_uint64_array(const uint64_t * value, int nr_value)
{
- struct cJSON * uint64_array = cJSON_CreateArray();
- for (int i = 0; i < nr_value; i++)
- cJSON_AddItemToArray(uint64_array, cJSON_CreateNumber(value[i]));
- return uint64_array;
+ struct cJSON * uint64_array = cJSON_CreateArray();
+ for (int i = 0; i < nr_value; i++)
+ cJSON_AddItemToArray(uint64_array, cJSON_CreateNumber(value[i]));
+ return uint64_array;
}
-static cJSON * __create_uint64_delta_array(const uint64_t * value_large,
- const uint64_t * value_small, int nr_value, int interval)
+static cJSON * __create_uint64_delta_array(const uint64_t * value_large, const uint64_t * value_small, int nr_value,
+ int interval)
{
struct cJSON * uint64_array = cJSON_CreateArray();
for (int i = 0; i < nr_value; i++)
@@ -108,19 +109,21 @@ static cJSON * __create_vdev_stats(struct vdev_instance * vdi)
/* Gauge */
struct cJSON * j_vdev_gauge = cJSON_CreateObject();
-#define __JOIN_VDEV_VALUE_STATS_ITEM(item, streams) do { \
- cJSON_AddItemToObject(j_vdev_value, #item, \
- __create_uint64_array(_stat_info.item, streams)); \
-} while(0)
-
-#define __JOIN_VDEV_VALUE_BYTES_TO_BITS_STAT_ITEM(item, streams) do { \
- uint64_t __bits_item[MR_SID_MAX]; \
- for (int i = 0; i < streams; i++) \
- __bits_item[i] = _stat_info.item[i] * 8; \
- \
- cJSON_AddItemToObject(j_vdev_value, #item, __create_uint64_array( \
- __bits_item, streams)); \
-} while(0)
+#define __JOIN_VDEV_VALUE_STATS_ITEM(item, streams) \
+ do \
+ { \
+ cJSON_AddItemToObject(j_vdev_value, #item, __create_uint64_array(_stat_info.item, streams)); \
+ } while (0)
+
+#define __JOIN_VDEV_VALUE_BYTES_TO_BITS_STAT_ITEM(item, streams) \
+ do \
+ { \
+ uint64_t __bits_item[MR_SID_MAX]; \
+ for (int i = 0; i < streams; i++) \
+ __bits_item[i] = _stat_info.item[i] * 8; \
+ \
+ cJSON_AddItemToObject(j_vdev_value, #item, __create_uint64_array(__bits_item, streams)); \
+ } while (0)
__JOIN_VDEV_VALUE_STATS_ITEM(rx_on_line, nr_rx_stream);
__JOIN_VDEV_VALUE_STATS_ITEM(rx_deliver, nr_rx_stream);
@@ -142,25 +145,28 @@ static cJSON * __create_vdev_stats(struct vdev_instance * vdi)
__JOIN_VDEV_VALUE_STATS_ITEM(ltx_missed, nr_tx_stream);
__JOIN_VDEV_VALUE_BYTES_TO_BITS_STAT_ITEM(ltx_total_len, nr_tx_stream);
-#define __JOIN_VDEV_SPEED_STATS_ITEM(item, streams) do { \
- cJSON_AddItemToObject(j_vdev_speed, #item, \
- __create_uint64_delta_array(_stat_info.item, \
- _stat_info_last.item, streams, g_monit_interval)); \
-} while(0)
-
-#define __JOIN_VDEV_SPEED_BYTES_TO_BITS_STAT_ITEM(item, streams) do { \
- uint64_t __bits_item[MR_SID_MAX]; \
- for (int i = 0; i < streams; i++) \
- __bits_item[i] = _stat_info.item[i] * 8; \
- \
- uint64_t __bits_item_last[MR_SID_MAX]; \
- for (int i = 0; i < streams; i++) \
- __bits_item_last[i] = _stat_info_last.item[i] * 8; \
- \
- cJSON_AddItemToObject(j_vdev_speed, #item, \
- __create_uint64_delta_array(__bits_item, \
- __bits_item_last, streams, g_monit_interval)); \
-} while(0)
+#define __JOIN_VDEV_SPEED_STATS_ITEM(item, streams) \
+ do \
+ { \
+ cJSON_AddItemToObject( \
+ j_vdev_speed, #item, \
+ __create_uint64_delta_array(_stat_info.item, _stat_info_last.item, streams, g_monit_interval)); \
+ } while (0)
+
+#define __JOIN_VDEV_SPEED_BYTES_TO_BITS_STAT_ITEM(item, streams) \
+ do \
+ { \
+ uint64_t __bits_item[MR_SID_MAX]; \
+ for (int i = 0; i < streams; i++) \
+ __bits_item[i] = _stat_info.item[i] * 8; \
+ \
+ uint64_t __bits_item_last[MR_SID_MAX]; \
+ for (int i = 0; i < streams; i++) \
+ __bits_item_last[i] = _stat_info_last.item[i] * 8; \
+ \
+ cJSON_AddItemToObject(j_vdev_speed, #item, \
+ __create_uint64_delta_array(__bits_item, __bits_item_last, streams, g_monit_interval)); \
+ } while (0)
__JOIN_VDEV_SPEED_STATS_ITEM(rx_on_line, nr_rx_stream);
__JOIN_VDEV_SPEED_STATS_ITEM(rx_deliver, nr_rx_stream);
@@ -183,14 +189,14 @@ static cJSON * __create_vdev_stats(struct vdev_instance * vdi)
__JOIN_VDEV_SPEED_BYTES_TO_BITS_STAT_ITEM(ltx_total_len, nr_tx_stream);
cJSON * rx_q_len_array = cJSON_CreateArray();
- for(unsigned int i = 0; i < nr_rx_stream; i++)
+ for (unsigned int i = 0; i < nr_rx_stream; i++)
{
cJSON_AddItemToArray(rx_q_len_array, cJSON_CreateNumber(_stat_info.rx_q_len_max[i]));
}
cJSON_AddItemToObject(j_vdev_gauge, "rx_q_len", rx_q_len_array);
cJSON * rx_q_avg_len_array = cJSON_CreateArray();
- for(unsigned int i = 0; i < nr_rx_stream; i++)
+ for (unsigned int i = 0; i < nr_rx_stream; i++)
{
cJSON_AddItemToArray(rx_q_avg_len_array, cJSON_CreateNumber(_stat_info.rx_q_len_avg_max[i]));
}
@@ -207,35 +213,36 @@ static cJSON * __create_vdev_stats(struct vdev_instance * vdi)
// 运行时原始报文设备统计计数
static cJSON * monit_vdev(struct mr_instance * instance)
{
- struct cJSON * j_vdev_array = cJSON_CreateArray();
- for(int i = 0; i < instance->nr_vdevs; i++)
- {
+ struct cJSON * j_vdev_array = cJSON_CreateArray();
+ for (int i = 0; i < instance->nr_vdevs; i++)
+ {
struct mr_vdev * vdev = &instance->vdevs[i];
- if (vdev == NULL) continue;
-
- 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_vdev_array, j_vdev);
- }
+ if (vdev == NULL)
+ continue;
+
+ 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_vdev_array, j_vdev);
+ }
- return j_vdev_array;
+ return j_vdev_array;
}
static cJSON * monit_app_stat(struct mr_instance * instance)
{
struct cJSON * j_root = cJSON_CreateObject();
-#define _trans_app_stat(item) \
- uint64_t __trans_##item[MR_SID_MAX]; \
- for(int i = 0; i < instance->nr_dataplane_thread; i++) \
- { \
- __trans_##item[i] = instance->stat[i].item; \
- } \
+#define _trans_app_stat(item) \
+ uint64_t __trans_##item[MR_SID_MAX]; \
+ for (int i = 0; i < instance->nr_dataplane_thread; i++) \
+ { \
+ __trans_##item[i] = instance->stat[i].item; \
+ }
-#define _trans_app_stat_array(item) __trans_##item
+#define _trans_app_stat_array(item) __trans_##item
_trans_app_stat(packet_recv_count);
_trans_app_stat(packet_recv_length);
@@ -252,17 +259,17 @@ static cJSON * monit_app_stat(struct mr_instance * instance)
uint64_t __trans_mbuf_in_use_count[MR_SID_MAX];
for (int i = 0; i < instance->nr_dataplane_thread; i++)
{
- __trans_mbuf_in_use_count[i] = __trans_packet_recv_count[i] +
- __trans_mbuf_alloc_count[i] - __trans_packet_send_count[i] -
- __trans_mbuf_free_count[i];
+ __trans_mbuf_in_use_count[i] = __trans_packet_recv_count[i] + __trans_mbuf_alloc_count[i] -
+ __trans_packet_send_count[i] - __trans_mbuf_free_count[i];
}
-#define _json_generate(item) \
-do { \
- cJSON_AddItemToObject(j_root, #item, __create_uint64_array( \
- _trans_app_stat_array(item), instance->nr_dataplane_thread)); \
-} while(0) \
-
+#define _json_generate(item) \
+ do \
+ { \
+ cJSON_AddItemToObject(j_root, #item, \
+ __create_uint64_array(_trans_app_stat_array(item), instance->nr_dataplane_thread)); \
+ } while (0)
+
_json_generate(packet_recv_count);
_json_generate(packet_recv_length);
_json_generate(packet_send_count);
@@ -282,45 +289,46 @@ do { \
return j_root;
}
-
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;
+ struct cJSON * j_root = cJSON_CreateObject();
+ cJSON_AddStringToObject(j_root, "symbol", instance->appsym);
+ return j_root;
}
static cJSON * monit_root(struct mr_instance * instance)
{
- struct cJSON * j_root = cJSON_CreateObject();
- cJSON_AddItemToObject(j_root, "appinfo", monit_app_info(instance));
- cJSON_AddItemToObject(j_root, "raw", monit_vdev(instance));
+ struct cJSON * j_root = cJSON_CreateObject();
+ cJSON_AddItemToObject(j_root, "appinfo", monit_app_info(instance));
+ cJSON_AddItemToObject(j_root, "raw", monit_vdev(instance));
cJSON_AddItemToObject(j_root, "appstat", monit_app_stat(instance));
+ cJSON_AddItemToObject(j_root, "dp-trace-path", marsio_dp_trace_monit_loop(instance));
+
+ if (instance->neigh != NULL)
+ {
+ struct cJSON * j_monit_neigh = neighbour_manager_monit(instance->neigh);
+ cJSON_AddItemToObject(j_root, "neigh", j_monit_neigh);
+ }
- if (instance->neigh != NULL)
- {
- struct cJSON * j_monit_neigh = neighbour_manager_monit(instance->neigh);
- cJSON_AddItemToObject(j_root, "neigh", j_monit_neigh);
- }
-
- return j_root;
+ return j_root;
}
int mrapp_monit_loop(struct mr_instance * instance)
{
- cJSON * j_root = monit_root(instance);
- char * str_json_print = cJSON_Print(j_root);
-
- FILE * fp_monit = fopen(instance->monit_file_path, "w");
- if (fp_monit == NULL)
- {
- MR_WARNING("monit file %s open failed, cannot dump program stat info : %s",
- instance->monit_file_path, strerror(errno)); return 0;
- }
-
- fprintf(fp_monit, "%s", str_json_print);
- cJSON_Delete(j_root);
+ cJSON * j_root = monit_root(instance);
+ char * str_json_print = cJSON_Print(j_root);
+
+ FILE * fp_monit = fopen(instance->monit_file_path, "w");
+ if (fp_monit == NULL)
+ {
+ MR_WARNING("monit file %s open failed, cannot dump program stat info : %s", instance->monit_file_path,
+ strerror(errno));
+ return 0;
+ }
+
+ fprintf(fp_monit, "%s", str_json_print);
+ cJSON_Delete(j_root);
free(str_json_print);
- fclose(fp_monit);
- return 0;
+ fclose(fp_monit);
+ return 0;
} \ No newline at end of file