diff options
| author | Qiuwen Lu <[email protected]> | 2017-04-11 18:56:47 +0800 |
|---|---|---|
| committer | Qiuwen Lu <[email protected]> | 2017-04-11 18:56:47 +0800 |
| commit | 68d290abd9825291eafd9954c0fdaa45e64c612b (patch) | |
| tree | 2b4d3aad24e7d64f776a8b0c679ec28b3eb6158b /app/src/monit.c | |
| parent | 64c04050bea7ec59c8d4affa8559fbd50b9880cf (diff) | |
增加应用处理数据统计工具
Diffstat (limited to 'app/src/monit.c')
| -rw-r--r-- | app/src/monit.c | 84 |
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; } // 运行时原始报文设备统计计数 |
