summaryrefslogtreecommitdiff
path: root/app/src/monit.c
diff options
context:
space:
mode:
authorQiuwen Lu <[email protected]>2017-04-11 18:56:47 +0800
committerQiuwen Lu <[email protected]>2017-04-11 18:56:47 +0800
commit68d290abd9825291eafd9954c0fdaa45e64c612b (patch)
tree2b4d3aad24e7d64f776a8b0c679ec28b3eb6158b /app/src/monit.c
parent64c04050bea7ec59c8d4affa8559fbd50b9880cf (diff)
增加应用处理数据统计工具
Diffstat (limited to 'app/src/monit.c')
-rw-r--r--app/src/monit.c84
1 files changed, 68 insertions, 16 deletions
diff --git a/app/src/monit.c b/app/src/monit.c
index 278c9fe..74a44f5 100644
--- a/app/src/monit.c
+++ b/app/src/monit.c
@@ -7,6 +7,8 @@
#include <mrapp.h>
#include <cJSON.h>
+unsigned int g_monit_interval = 1;
+
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);
@@ -36,6 +38,15 @@ int vdev_instance_stats_get(struct vdev_instance * vdi, struct vdev_stat_info *
return 0;
}
+void vdev_instance_stat_last_save(struct vdev_instance * vdi, struct vdev_stat_info * stat_info)
+{
+ vdi->stat_info_last = *stat_info;
+}
+
+void vdev_instance_stats_last_get(struct vdev_instance * vdi, struct vdev_stat_info * stat_info)
+{
+ *stat_info = vdi->stat_info_last;
+}
static cJSON * __create_uint64_array(const uint64_t * value, int nr_value)
{
@@ -45,31 +56,72 @@ static cJSON * __create_uint64_array(const uint64_t * value, int nr_value)
return uint64_array;
}
+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++)
+ {
+ uint64_t delta = (value_large[i] - value_small[i]) / interval;
+ cJSON_AddItemToArray(uint64_array, cJSON_CreateNumber(delta));
+ }
+
+ return uint64_array;
+}
+
static cJSON * __create_vdev_stats(struct vdev_instance * vdi)
{
- struct vdev_stat_info _stat_info;
+ struct vdev_stat_info _stat_info;
+ struct vdev_stat_info _stat_info_last;
+
vdev_instance_stats_get(vdi, &_stat_info);
+ vdev_instance_stats_last_get(vdi, &_stat_info_last);
+ vdev_instance_stat_last_save(vdi, &_stat_info);
- 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_vdi_stats, #item, \
- __create_uint64_array(_stat_info.item, streams)); \
+ /* 统计节点句柄 */
+ struct cJSON * j_vdev_stats = cJSON_CreateObject();
+ /* 累计量 */
+ struct cJSON * j_vdev_value = cJSON_CreateObject();
+ /* 瞬时值 */
+ struct cJSON * j_vdev_speed = 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)
+
+ __JOIN_VDEV_VALUE_STATS_ITEM(rx_on_line, nr_rx_stream);
+ __JOIN_VDEV_VALUE_STATS_ITEM(rx_deliver, nr_rx_stream);
+ __JOIN_VDEV_VALUE_STATS_ITEM(rx_missed, nr_rx_stream);
+ __JOIN_VDEV_VALUE_STATS_ITEM(tx_on_line, nr_tx_stream);
+ __JOIN_VDEV_VALUE_STATS_ITEM(tx_deliver, nr_tx_stream);
+ __JOIN_VDEV_VALUE_STATS_ITEM(tx_missed, nr_tx_stream);
+ __JOIN_VDEV_VALUE_STATS_ITEM(ftx_on_line, nr_tx_stream);
+ __JOIN_VDEV_VALUE_STATS_ITEM(ftx_deliver, nr_tx_stream);
+ __JOIN_VDEV_VALUE_STATS_ITEM(ftx_missed, 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)
- __JOIN_RAW_DEVICE_STATS_ITEM(rx_on_line, nr_rx_stream);
- __JOIN_RAW_DEVICE_STATS_ITEM(rx_deliver, nr_rx_stream);
- __JOIN_RAW_DEVICE_STATS_ITEM(rx_missed, nr_rx_stream);
- __JOIN_RAW_DEVICE_STATS_ITEM(tx_on_line, nr_tx_stream);
- __JOIN_RAW_DEVICE_STATS_ITEM(tx_deliver, nr_tx_stream);
- __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_vdi_stats;
+ __JOIN_VDEV_SPEED_STATS_ITEM(rx_on_line, nr_rx_stream);
+ __JOIN_VDEV_SPEED_STATS_ITEM(rx_deliver, nr_rx_stream);
+ __JOIN_VDEV_SPEED_STATS_ITEM(rx_missed, nr_rx_stream);
+ __JOIN_VDEV_SPEED_STATS_ITEM(tx_on_line, nr_tx_stream);
+ __JOIN_VDEV_SPEED_STATS_ITEM(tx_deliver, nr_tx_stream);
+ __JOIN_VDEV_SPEED_STATS_ITEM(tx_missed, nr_tx_stream);
+ __JOIN_VDEV_SPEED_STATS_ITEM(ftx_on_line, nr_tx_stream);
+ __JOIN_VDEV_SPEED_STATS_ITEM(ftx_deliver, nr_tx_stream);
+ __JOIN_VDEV_SPEED_STATS_ITEM(ftx_missed, nr_tx_stream);
+
+ cJSON_AddItemToObject(j_vdev_stats, "accumulative", j_vdev_value);
+ cJSON_AddItemToObject(j_vdev_stats, "speed", j_vdev_speed);
+ return j_vdev_stats;
}
// 运行时原始报文设备统计计数