diff options
| author | Qiuwen Lu <[email protected]> | 2017-03-23 13:54:35 +0800 |
|---|---|---|
| committer | Qiuwen Lu <[email protected]> | 2017-03-23 13:54:35 +0800 |
| commit | 42df3214fc22ce3a55c028bdb3d3a4dfa131bf4d (patch) | |
| tree | cc93df82e14c32ca5e46c28f24c184eeb056dd5c /tools | |
| parent | 83de81b8f4b4fe4faabc23517efa791430f65ac2 (diff) | |
增加应用端收发包统计功能
Diffstat (limited to 'tools')
| -rw-r--r-- | tools/monit/app.c | 262 | ||||
| -rw-r--r-- | tools/monit/device.c | 196 | ||||
| -rw-r--r-- | tools/monit/libstat.c | 164 | ||||
| -rw-r--r-- | tools/monit/libstat.h | 68 | ||||
| -rw-r--r-- | tools/monit/monit_device.py | 1 | ||||
| -rw-r--r-- | tools/monit/trace.c | 80 |
6 files changed, 1 insertions, 770 deletions
diff --git a/tools/monit/app.c b/tools/monit/app.c deleted file mode 100644 index 623169d..0000000 --- a/tools/monit/app.c +++ /dev/null @@ -1,262 +0,0 @@ - -#include <mr_common.h> -#include <mr_stat.h> -#include <stdio.h> -#include <string.h> -#include <unistd.h> -#include <mr_runtime.h> - -#include "libstat.h" - -#define __APPST_ITEM(_ptr, _item) (_ptr->__per_app[app_id]._per_thread[sid]._item) - -static void write_speed_table_leader(FILE * stream) -{ - char linebuf[MR_STRING_MAX]; - unsigned int linecur = 0; - - __WRITE_TABLE_ITEM("AppSym", "c", NAME_ITEM_WIDTH); - __WRITE_TABLE_ITEM("SID", "c", ID_ITEM_WIDTH); - __WRITE_TABLE_ITEM("Rx-fps", "c", SPEED_ITEM_WIDTH); - __WRITE_TABLE_ITEM("Rx-bps", "c", SPEED_ITEM_WIDTH); - __WRITE_TABLE_ITEM("Tx-fps", "c", SPEED_ITEM_WIDTH); - __WRITE_TABLE_ITEM("Tx-bps", "c", SPEED_ITEM_WIDTH); - __WRITE_TABLE_ITEM("Drop-fps", "c", SPEED_ITEM_WIDTH); - - fprintf(stream, "%s\n", linebuf); - - linecur = 0; - __WRITE_TABLE_CLINE('-', "c", NAME_ITEM_WIDTH); - __WRITE_TABLE_CLINE('-', "c", ID_ITEM_WIDTH); - __WRITE_TABLE_CLINE('-', "c", SPEED_ITEM_WIDTH); - __WRITE_TABLE_CLINE('-', "c", SPEED_ITEM_WIDTH); - __WRITE_TABLE_CLINE('-', "c", SPEED_ITEM_WIDTH); - __WRITE_TABLE_CLINE('-', "c", SPEED_ITEM_WIDTH); - __WRITE_TABLE_CLINE('-', "c", SPEED_ITEM_WIDTH); - - fprintf(stream, "%s\n", linebuf); - return; -} - -static void write_total_table_leader(FILE * stream) -{ - char linebuf[MR_STRING_MAX]; - unsigned int linecur = 0; - - __WRITE_TABLE_ITEM("AppSym", "c", NAME_ITEM_WIDTH); - __WRITE_TABLE_ITEM("SID", "c", ID_ITEM_WIDTH); - __WRITE_TABLE_ITEM("Rx-frames", "c", SPEED_ITEM_WIDTH); - __WRITE_TABLE_ITEM("Rx-bits", "c", SPEED_ITEM_WIDTH); - __WRITE_TABLE_ITEM("Tx-frames", "c", SPEED_ITEM_WIDTH); - __WRITE_TABLE_ITEM("Tx-bits", "c", SPEED_ITEM_WIDTH); - __WRITE_TABLE_ITEM("Drop-frames", "c", SPEED_ITEM_WIDTH); - - fprintf(stream, "%s\n", linebuf); - - linecur = 0; - __WRITE_TABLE_CLINE('-', "c", NAME_ITEM_WIDTH); - __WRITE_TABLE_CLINE('-', "c", ID_ITEM_WIDTH); - __WRITE_TABLE_CLINE('-', "c", SPEED_ITEM_WIDTH); - __WRITE_TABLE_CLINE('-', "c", SPEED_ITEM_WIDTH); - __WRITE_TABLE_CLINE('-', "c", SPEED_ITEM_WIDTH); - __WRITE_TABLE_CLINE('-', "c", SPEED_ITEM_WIDTH); - __WRITE_TABLE_CLINE('-', "c", SPEED_ITEM_WIDTH); - - fprintf(stream, "%s\n", linebuf); - return; -} - -static void write_timeinfo(FILE * stream) -{ - time_t currect; - time(&currect); - - char str_localtime[MR_STRING_MAX]; - libstat_strtime(str_localtime, sizeof(str_localtime), currect); - fprintf(stream, "Time: %12s\n", str_localtime); - return; -} - -static void write_speed_line(FILE * stream, const char * app_sym, unsigned int app_id, unsigned int sid, - const struct mr_app_stat * st_last, const struct mr_app_stat * st_now, - unsigned int delta_time, unsigned int human) -{ - char linebuf[MR_STRING_MAX]; - char str_human[MR_STRING_MAX]; - unsigned int linecur = 0; - unsigned int delta_rx_frame, delta_rx_bits, delta_tx_frame, delta_tx_bits; - - char numbuf[MR_STRING_MAX]; - __WRITE_TABLE_ITEM(app_sym, "c", NAME_ITEM_WIDTH); - __WRITE_TABLE_ITEM(__TRANS_DATA(sid, numbuf), "c", ID_ITEM_WIDTH); - - delta_rx_frame = __APPST_ITEM(st_now, rx_frame) - __APPST_ITEM(st_last, rx_frame); - delta_rx_bits = __APPST_ITEM(st_now, rx_byte) - __APPST_ITEM(st_last, rx_byte); - delta_tx_frame = __APPST_ITEM(st_now, tx_frame) - __APPST_ITEM(st_last, tx_frame); - delta_tx_bits = __APPST_ITEM(st_now, tx_byte) - __APPST_ITEM(st_last, tx_byte); - - delta_rx_frame /= delta_time; - delta_rx_bits /= delta_time; - delta_tx_frame /= delta_time; - delta_tx_bits /= delta_time; - - delta_rx_bits *= 8; - delta_tx_bits *= 8; - - if(human) - { - __TRANS_HUMAN(delta_rx_frame, str_human); - __WRITE_TABLE_ITEM(str_human, "r", SPEED_ITEM_WIDTH); - - __TRANS_HUMAN(delta_rx_bits, str_human); - __WRITE_TABLE_ITEM(str_human, "r", SPEED_ITEM_WIDTH); - - __TRANS_HUMAN(delta_tx_frame, str_human); - __WRITE_TABLE_ITEM(str_human, "r", SPEED_ITEM_WIDTH); - - __TRANS_HUMAN(delta_tx_bits, str_human); - __WRITE_TABLE_ITEM(str_human, "r", SPEED_ITEM_WIDTH); - } - else - { - __TRANS_DATA(delta_rx_frame, numbuf); - __WRITE_TABLE_ITEM(numbuf, "r", SPEED_ITEM_WIDTH); - - __TRANS_DATA(delta_rx_bits, numbuf); - __WRITE_TABLE_ITEM(numbuf, "r", SPEED_ITEM_WIDTH); - - __TRANS_DATA(delta_tx_frame, numbuf); - __WRITE_TABLE_ITEM(numbuf, "r", SPEED_ITEM_WIDTH); - - __TRANS_DATA(delta_tx_bits, numbuf); - __WRITE_TABLE_ITEM(numbuf, "r", SPEED_ITEM_WIDTH); - } - - fprintf(stream, "%s\n", linebuf); - return; -} - -static void write_count_line(FILE * stream, const char * app_sym, - unsigned int app_id, unsigned int sid, const struct mr_app_stat * st_now, unsigned int human) -{ - struct mr_app_stat st_zero[1]; - memset(st_zero, 0, sizeof(struct mr_app_stat)); - write_speed_line(stream, app_sym, app_id, sid, st_zero, st_now, 1, human); -} - -static struct mr_app_stat last_app_stat; -static struct mr_app_stat now_app_stat; - -void pinfo_stat_loop(FILE * stream, struct appinfo * pinfo, - struct mr_app_stat * st_now, struct mr_app_stat * st_last, - int speed, int delta_time, int human) -{ - const char * appsym = mr_appinfo_get_symbol(pinfo); - unsigned int appid = mr_appinfo_get_app_id(pinfo); - unsigned int nr_max_thread = mr_appinfo_get_nr_max_thread(pinfo); - - for(int sid = 0; sid < nr_max_thread; sid++) - { - if (speed) - write_speed_line(stream, appsym, appid, sid, - st_last, st_now, delta_time, human); - else - write_count_line(stream, appsym, appid, sid, - st_now, human); - } - - return; -} - -static struct mr_app_stat * __get_stat_handle() -{ - struct mr_app_stat * stat_ptr = mr_app_stat_get(); - if (stat_ptr == NULL) - { - fprintf(stderr, "Master(serivce) is not run or app stat " - "function is disable(handle is null).\n"); - exit(EXIT_FAILURE); - } - return stat_ptr; -} - -int app_stat_output_loop(FILE * stream, int speed, int delta_time, int human) -{ - last_app_stat = *__get_stat_handle(); - if (delta_time != 0) sleep(delta_time); - now_app_stat = *__get_stat_handle(); - - // д��ͷ - fprintf(stream, "\n"); - write_timeinfo(stream); - fprintf(stream, "\n"); - - if (speed) write_speed_table_leader(stream); - else write_total_table_leader(stream); - - // д������Ϣ - struct appinfo * appinfo_iterate = NULL; - while(mr_app_manager_appinfo_iterate(&appinfo_iterate) >= 0) - { - pinfo_stat_loop(stream, appinfo_iterate, &now_app_stat, &last_app_stat, - speed, delta_time, human); - } - - fprintf(stream, "\n"); - return 0; -} - -void print_help(const char * cmd, FILE * stream) -{ - fprintf(stream, "\n"); - fprintf(stream, "Usage: %s [-t interval][-s][-h][-?]\n", cmd); - fprintf(stream, " -t interval, seconds to wait between updates\n"); - fprintf(stream, " -s print speed or accumulative count, default is speed\n"); - fprintf(stream, " -l print loop, exit when recv a signal\n"); - fprintf(stream, " -h print value in human readable format\n"); - fprintf(stream, " -? print usage message\n"); - fprintf(stream, "\n"); -} - - -int main(int argc, char *argv[]) -{ - char c; - unsigned opt_delta_time = 1; - unsigned opt_speed = 0; - unsigned opt_human = 0; - unsigned opt_loop = 0; - - while ((c = getopt(argc, argv, "t:shl?")) != -1) - { - switch (c) - { - case 't': - opt_delta_time = atoi(optarg); - break; - case 's': - opt_speed = 1; - break; - case 'h': - opt_human = 1; - break; - case 'l': - opt_loop = 1; - break; - case '?': - default: - print_help(argv[0], stdout); - return 0; - } - } - - libstat_init(); - if (opt_delta_time <= 0) opt_delta_time = 1; - while(1) - { - app_stat_output_loop(stdout, opt_speed, opt_delta_time, opt_human); - if (!opt_loop) break; - } - - return 0; -}
\ No newline at end of file diff --git a/tools/monit/device.c b/tools/monit/device.c deleted file mode 100644 index 247a68e..0000000 --- a/tools/monit/device.c +++ /dev/null @@ -1,196 +0,0 @@ -#include <time.h> -#include <stdint.h> -#include <stdlib.h> -#include <string.h> -#include <unistd.h> -#include <assert.h> -#include <field_stat2.h> - - -#include<mr_ctx.h> -#include <mr_common.h> -#include <mr_procman.h> -#include <mr_core.h> -//#include <mrlib.h> -//#include <mrlib_common.h> - -//#include<rte_mbuf.h> -#include "../../core/include/mr_stat.h" -#include "../../core/include/mr_device.h" -#include "../../core/include/mr_common.h" - - -#define MR_LIB_MAX_EAL_ARGC 128 - -enum DEV_STAT_COLUMN -{ - COLUMN_TABLE_DEVICE_RX_FRAME=0, - COLUMN_TABLE_DEVICE_RX_BIT, - COLUMN_TABLE_DEVICE_TX_FRAME, - COLUMN_TABLE_DEVICE_TX_BIT, - COLUMN_TABLE_DEVICE_RX_PPS, - COLUMN_TABLE_DEVICE_RX_BPS, - COLUMN_TABLE_DEVICE_TX_PPS, - COLUMN_TABLE_DEVICE_TX_BPS, - COLUMN_TABLE_COLUMN_NUM -}; -struct dev_stat_statics -{ - screen_stat_handle_t stat_handle; - int fs_column_id[COLUMN_TABLE_COLUMN_NUM]; - int fs_line_id[RTE_MAX_ETHPORTS+1]; - //char *stat_file; -}; -static void __write_arg(char * eal_argv[], unsigned int * eal_argc, - unsigned int max_argc, const char * value) -{ - assert(max_argc >= *eal_argc); - char * mem = (char *)malloc(MR_STRING_MAX * sizeof(char)); - assert(mem != NULL); - - snprintf(mem, MR_STRING_MAX * sizeof(char), "%s", value); - eal_argv[(*eal_argc)++] = mem; - return; -} - -#define WRITE_ARG(x) \ - do {__write_arg(eal_argv, &eal_argc, MR_LIB_MAX_EAL_ARGC, x);} \ - while(0) - -struct dev_stat_statics * dev_stat_init(mr_dev_t * device_list[],int device_list_count) -{ - int value=0; - int i=0; - struct dev_stat_statics *g_dev_stat_statics=(struct dev_stat_statics *)calloc(sizeof(struct dev_stat_statics),1); - g_dev_stat_statics->stat_handle=FS_create_handle(); - value=1; - FS_set_para(g_dev_stat_statics->stat_handle, PRINT_MODE, &value, sizeof(value)); - value=0; - FS_set_para(g_dev_stat_statics->stat_handle, CREATE_THREAD, &value, sizeof(value)); - - //g_dev_stat_statics->fs_column_id[COLUMN_TABLE_DEVICE_NAME]=FS_register(g_dev_stat_statics->stat_handle, FS_STYLE_COLUMN, FS_CALC_CURRENT,"dev_name"); - g_dev_stat_statics->fs_column_id[COLUMN_TABLE_DEVICE_RX_FRAME]=FS_register(g_dev_stat_statics->stat_handle, FS_STYLE_COLUMN, FS_CALC_CURRENT,"dev_rx_frame"); - g_dev_stat_statics->fs_column_id[COLUMN_TABLE_DEVICE_RX_BIT]=FS_register(g_dev_stat_statics->stat_handle, FS_STYLE_COLUMN, FS_CALC_CURRENT,"dev_rx_bit"); - g_dev_stat_statics->fs_column_id[COLUMN_TABLE_DEVICE_TX_FRAME]=FS_register(g_dev_stat_statics->stat_handle, FS_STYLE_COLUMN, FS_CALC_CURRENT,"dev_tx_frame"); - g_dev_stat_statics->fs_column_id[COLUMN_TABLE_DEVICE_TX_BIT]=FS_register(g_dev_stat_statics->stat_handle, FS_STYLE_COLUMN, FS_CALC_CURRENT,"dev_tx_bit"); - g_dev_stat_statics->fs_column_id[COLUMN_TABLE_DEVICE_RX_PPS]=FS_register(g_dev_stat_statics->stat_handle, FS_STYLE_COLUMN, FS_CALC_SPEED,"dev_rx_pps"); - g_dev_stat_statics->fs_column_id[COLUMN_TABLE_DEVICE_RX_BPS]=FS_register(g_dev_stat_statics->stat_handle, FS_STYLE_COLUMN, FS_CALC_SPEED,"dev_rx_bps"); - g_dev_stat_statics->fs_column_id[COLUMN_TABLE_DEVICE_TX_PPS]=FS_register(g_dev_stat_statics->stat_handle, FS_STYLE_COLUMN, FS_CALC_SPEED,"dev_tx_pps"); - g_dev_stat_statics->fs_column_id[COLUMN_TABLE_DEVICE_TX_BPS]=FS_register(g_dev_stat_statics->stat_handle, FS_STYLE_COLUMN, FS_CALC_SPEED,"dev_tx_bbs"); - - - for(i=0;i<device_list_count;i++) - { - mr_dev_t *dev=device_list[i]; - if(dev!=NULL) - g_dev_stat_statics->fs_line_id[i]=FS_register(g_dev_stat_statics->stat_handle, FS_STYLE_LINE, FS_CALC_CURRENT,dev->symbol); - } - //g_dev_stat_statics->fs_column_id[RTE_MAX_ETHPORTS]=FS_register(feather->stat_handle, FS_STYLE_LINE, FS_CALC_CURRENT,"sum"); - FS_start(g_dev_stat_statics->stat_handle); - return g_dev_stat_statics; -} - - -void dev_stat_output(struct dev_stat_statics* g_dev_stat_statics,mr_dev_t * device_list[],int device_list_count) -{ - struct mr_device_stat * mr_device_stat_stattics=mr_device_stat_get(); - time_t now; - time(&now); - int dev_count=0; - port_id_t portid; - int dev_column_count=0; - int dev_thread_count=0; - uint64_t total_dev_rx_tx_frame_bit[MR_DEVICE_MAX][COLUMN_TABLE_COLUMN_NUM]; - for(dev_count=0;dev_count<MR_DEVICE_MAX;dev_count++) - { - for(dev_column_count=0;dev_column_count<COLUMN_TABLE_COLUMN_NUM;dev_column_count++) - { - total_dev_rx_tx_frame_bit[dev_count][dev_column_count]=0; - } - } - for(dev_count=0;dev_count<device_list_count;dev_count++) - { - mr_dev_t *dev=device_list[dev_count]; - if(dev!=NULL) - { - portid=dev->port_id; - if(portid>=0&&portid<MR_DEVICE_MAX) - { - //total_dev_rx_tx_frame_bit[portid][COLUMN_TABLE_DEVICE_NAME]=portid;//device id - for(dev_thread_count=0;dev_thread_count<MR_MAX_GSID;dev_thread_count++) - { - total_dev_rx_tx_frame_bit[portid][COLUMN_TABLE_DEVICE_RX_FRAME]+=mr_device_stat_stattics->_per_thread[dev_thread_count].dev_rx_frame[portid]; - total_dev_rx_tx_frame_bit[portid][COLUMN_TABLE_DEVICE_RX_BIT]+=mr_device_stat_stattics->_per_thread[dev_thread_count].dev_rx_bit[portid]; - total_dev_rx_tx_frame_bit[portid][COLUMN_TABLE_DEVICE_TX_FRAME]+=mr_device_stat_stattics->_per_thread[dev_thread_count].dev_tx_frame[portid]; - total_dev_rx_tx_frame_bit[portid][COLUMN_TABLE_DEVICE_TX_BIT]+=mr_device_stat_stattics->_per_thread[dev_thread_count].dev_tx_bit[portid]; - } - total_dev_rx_tx_frame_bit[portid][COLUMN_TABLE_DEVICE_RX_PPS]=total_dev_rx_tx_frame_bit[portid][COLUMN_TABLE_DEVICE_RX_FRAME]; - total_dev_rx_tx_frame_bit[portid][COLUMN_TABLE_DEVICE_RX_BPS]=total_dev_rx_tx_frame_bit[portid][COLUMN_TABLE_DEVICE_RX_BIT]; - total_dev_rx_tx_frame_bit[portid][COLUMN_TABLE_DEVICE_TX_PPS]=total_dev_rx_tx_frame_bit[portid][COLUMN_TABLE_DEVICE_TX_FRAME]; - total_dev_rx_tx_frame_bit[portid][COLUMN_TABLE_DEVICE_TX_BPS]=total_dev_rx_tx_frame_bit[portid][COLUMN_TABLE_DEVICE_TX_BIT]; - } - } - } - for(dev_count=0;dev_count<MR_DEVICE_MAX;dev_count++) - { - for(dev_column_count=0;dev_column_count<COLUMN_TABLE_COLUMN_NUM;dev_column_count++) - { - FS_operate(g_dev_stat_statics->stat_handle, - g_dev_stat_statics->fs_line_id[dev_count], - g_dev_stat_statics->fs_column_id[dev_column_count], - FS_OP_SET, - total_dev_rx_tx_frame_bit[dev_count][dev_column_count]); - } - } - FS_passive_output(g_dev_stat_statics->stat_handle); - return; -} - - -static void mrapp_eal_init() -{ - char * eal_argv[8]; - unsigned int eal_argc = 0; - - WRITE_ARG("mrlib"); - WRITE_ARG("-c"); - WRITE_ARG("0x1"); - WRITE_ARG("--proc-type=secondary"); - - int ret = rte_eal_init(eal_argc, eal_argv); - MR_CHECK(ret >= 0, "Cannot init EAL Enviorment, Failed"); - return; -} -static void mrapp_slave_log_ready(FILE * logstream) -{ - if (logstream == NULL) logstream = stderr; - rte_openlog_stream(stderr); -} - -int mr_lib_init() -{ - int ret = 0; - mrapp_eal_init(); - mrapp_slave_log_ready(NULL); - - mr_global_ctx_slave_init(); - mr_global_cfg_slave_init(); - mr_core_stage_slaveinit(); - return 0; -} - - -int main(int argc,char *argv[]) -{ - mr_lib_init(); - mr_dev_t * device_list[MR_DEVICE_MAX]; - int device_list_count=mr_device_list(, device_list,MR_DEVICE_MAX), 0; - struct dev_stat_statics *g_dev_stat_statics=dev_stat_init(device_list,device_list_count); - while(1) - { - dev_stat_output(g_dev_stat_statics,device_list,device_list_count); - sleep(1); - } - return 0; -} - diff --git a/tools/monit/libstat.c b/tools/monit/libstat.c deleted file mode 100644 index 2046c2d..0000000 --- a/tools/monit/libstat.c +++ /dev/null @@ -1,164 +0,0 @@ - -#include <mr_common.h> -#include <assert.h> -#include <stdio.h> -#include <rte_log.h> -#include <mr_runtime.h> -#include <string.h> - -#include "libstat.h" -#include "mr_core.h" - -#define MR_LIB_MAX_EAL_ARGC 128 - -static void __write_arg(char * eal_argv[], unsigned int * eal_argc, - unsigned int max_argc, const char * value) -{ - assert(max_argc >= *eal_argc); - char * mem = (char *)malloc(MR_STRING_MAX * sizeof(char)); - assert(mem != NULL); - - snprintf(mem, MR_STRING_MAX * sizeof(char), "%s", value); - eal_argv[(*eal_argc)++] = mem; - return; -} - -#define WRITE_ARG(x) \ - do {__write_arg(eal_argv, &eal_argc, MR_LIB_MAX_EAL_ARGC, x);} \ - while(0) - - -static void libstat_eal_init() -{ - char * eal_argv[8]; - unsigned int eal_argc = 0; - rte_openlog_stream(stderr); - - WRITE_ARG("mrlib"); - WRITE_ARG("-c"); - WRITE_ARG("0x1"); - WRITE_ARG("--proc-type=secondary"); - WRITE_ARG("--log-level"); - WRITE_ARG("4"); - - int ret = rte_eal_init(eal_argc, eal_argv); - MR_CHECK(ret >= 0, "Cannot init EAL Enviorment, Failed"); - return; -} - -int libstat_init() -{ - libstat_eal_init(); - mr_runtime_slave_init(); - - struct mr_global_ctx * g_ctx = mr_global_ctx_get(); - mr_core_default_instance_set(g_ctx->ctx_core); - return 0; -} - - -#define TBPS (1ull * 1000 * 1000 * 1000 * 1000) -#define GBPS (1ull * 1000 * 1000 * 1000) -#define MBPS (1ull * 1000 * 1000) -#define KBPS (1ull * 1000) - -void libstat_unit_translate(uint64_t number, float * f_number, char * unit) -{ - if (number > TBPS) - { - *f_number = number * 1.0 / TBPS; - *unit = 'T'; - } - else if (number > GBPS) - { - *f_number = number * 1.0 / GBPS; - *unit = 'G'; - } - else if (number > MBPS) - { - *f_number = number * 1.0 / MBPS; - *unit = 'M'; - } - else if (number > KBPS) - { - *f_number = number * 1.0 / KBPS; - *unit = 'K'; - } - else - { - *f_number = number * 1.0; - *unit = ' '; - } -} - -void libstat_strtime(char * strtime, int str_max, time_t time) -{ - int pos = snprintf(strtime, str_max, "%s", ctime(&time)); - strtime[pos - 1] = '\0'; - return; -} - -int libstat_table_format_item(const char * str, const char * fmt, - int width, int spacewidth, char * output, int sz_output) -{ - char _format[MR_STRING_MAX]; - int len = strlen(str); - if (len > width) return 0; - -#define __LOCATION_LEFT 0 -#define __LOCATION_RIGHT 1 -#define __LOCATION_CENTER 2 - - // �ַ���λ�� - int location = __LOCATION_LEFT; - for(int i = 0; i < strlen(fmt); i++) - { - switch(fmt[i]) - { - case 'l': location = __LOCATION_LEFT; break; - case 'r': location = __LOCATION_RIGHT; break; - case 'c': location = __LOCATION_CENTER; break; - default: location = __LOCATION_LEFT; break; - } - } - - // ����printf�ĸ�ʽ˵�� - if(location == __LOCATION_LEFT) - { - snprintf(_format, sizeof(fmt), "%%-%ds", width); - } - if(location == __LOCATION_RIGHT) - { - snprintf(_format, sizeof(fmt), "%%%ds", width); - } - if(location == __LOCATION_CENTER) - { - int cur = 0; - int space_before = (width - len) / 2; - for (int i = 0; i < space_before; i++) _format[cur++] = ' '; - cur += snprintf(_format + cur, sizeof(_format) - space_before, "%%s"); - for (int i = 0; i < width - space_before - len; i++) _format[cur++] = ' '; - _format[cur] = '\0'; - } - - // β�����ӿո� - if(spacewidth != 0) - { - char str_fill[MR_STRING_MAX]; - for (int i = 0; i < spacewidth; i++) str_fill[i] = ' '; - str_fill[spacewidth] = '\0'; - strncat(_format, str_fill, sizeof(_format)); - } - - // ��ʽ��� - return snprintf(output, sz_output, _format, str); -} - -int libstat_table_fill_item(const char ch, const char * fmt, - int width, int spacewidth, char * output, int sz_output) -{ - char str_fill[MR_STRING_MAX]; - for (int i = 0; i < width; i++) str_fill[i] = ch; - str_fill[width] = '\0'; - return libstat_table_format_item(str_fill, fmt, width, spacewidth, output, sz_output); -}
\ No newline at end of file diff --git a/tools/monit/libstat.h b/tools/monit/libstat.h deleted file mode 100644 index 42fa054..0000000 --- a/tools/monit/libstat.h +++ /dev/null @@ -1,68 +0,0 @@ -#pragma once - -#include <stdint.h> -#include <inttypes.h> -#include <time.h> - -int libstat_init(); -void libstat_unit_translate(uint64_t number, float * f_number, char * unit); -void libstat_strtime(char * strtime, int str_max, time_t time); - -/** - * \brief 格式化字符串 - * \param str 被格式化的字符串 - * \param fmt 格式说明字符串,"l"为左对齐,"r"为右对齐,"c"为居中 - * \param width 宽度,需大于等于被格式化字符串的长度 - * \param spacewidth 尾部添加的空格数量 - * \param output 输出缓冲区指针 - * \param sz_output 输出缓冲区大小 - * \return 实际输出的长度 - */ -int libstat_table_format_item(const char * str, const char * fmt, - int width, int spacewidth, char * output, int sz_output); - -/** - * \brief 填充字符串 - * \param ch 被填充的字符 - * \param fmt 填充字符串格式 - * \param width 宽度 - * \param spacewidth 尾部添加的空格数量 - * \param output 输出缓冲区指针 - * \param sz_output 输出缓冲区大小 - * \return 实际输出的长度 - */ -int libstat_table_fill_item(const char ch, const char * fmt, - int width, int spacewidth, char * output, int sz_output); - -#define SPEED_ITEM_WIDTH 12 -#define COUNT_ITEM_WIDTH 20 -#define NAME_ITEM_WIDTH 8 -#define ID_ITEM_WIDTH 6 -#define SPACE_WIDTH 2 - -#define __WRITE_TABLE_ITEM(_name, _fmt, _iwidth) \ -do { \ - linecur += libstat_table_format_item(_name, _fmt, _iwidth, SPACE_WIDTH, \ - linebuf + linecur, sizeof(linebuf) - linecur); \ -} while(0); \ - -#define __WRITE_TABLE_CLINE(_ch, _fmt, _iwidth) \ -do { \ - linecur += libstat_table_fill_item(_ch, _fmt, _iwidth, SPACE_WIDTH, \ - linebuf + linecur, sizeof(linebuf) - linecur); \ -} while(0); - -#define __TRANS_HUMAN(_data, _str) \ -do { \ - float f_data; char unit; \ - libstat_unit_translate(_data, &f_data, &unit); \ - sprintf(_str, "%7.2f%c", f_data, unit); \ -}while(0) \ - -static inline char * __trans_data(uint64_t data, char * buffer, size_t sz_buffer) -{ - snprintf(buffer, sz_buffer, "%"PRIu64, data); - return buffer; -} - -#define __TRANS_DATA(_data, _buffer) (__trans_data(_data, _buffer, sizeof(_buffer)))
\ No newline at end of file diff --git a/tools/monit/monit_device.py b/tools/monit/monit_device.py new file mode 100644 index 0000000..5f28270 --- /dev/null +++ b/tools/monit/monit_device.py @@ -0,0 +1 @@ +
\ No newline at end of file diff --git a/tools/monit/trace.c b/tools/monit/trace.c deleted file mode 100644 index fb39d13..0000000 --- a/tools/monit/trace.c +++ /dev/null @@ -1,80 +0,0 @@ -#include <mr_stat.h> - -#include "libstat.h" - -static void write_timeinfo(FILE * stream) -{ - time_t currect; - time(&currect); - - char str_localtime[MR_STRING_MAX]; - libstat_strtime(str_localtime, sizeof(str_localtime), currect); - fprintf(stream, "Time: %12s\n", str_localtime); - return; -} - -#define EVENT_NAME_WIDTH 25 -#define EVENT_COUNT_WIDTH 25 - -static void write_table_header(FILE * stream) -{ - char linebuf[MR_STRING_MAX]; - unsigned int linecur = 0; - - __WRITE_TABLE_ITEM("EventSymbol", "c", EVENT_NAME_WIDTH); - __WRITE_TABLE_ITEM("Count", "c", EVENT_COUNT_WIDTH); - fprintf(stream, "%s\n", linebuf); - - linecur = 0; - __WRITE_TABLE_CLINE('-', "c", EVENT_NAME_WIDTH); - __WRITE_TABLE_CLINE('-', "c", EVENT_COUNT_WIDTH); - fprintf(stream, "%s\n", linebuf); -} - -static void write_event_item(FILE * stream, const char * ev_symbol, uint64_t value) -{ - char linebuf[MR_STRING_MAX]; - char numbuf[MR_STRING_MAX]; - unsigned int linecur = 0; - - __WRITE_TABLE_ITEM(ev_symbol, "r", EVENT_NAME_WIDTH); - __TRANS_DATA(value, numbuf); - __WRITE_TABLE_ITEM(numbuf, "r", EVENT_COUNT_WIDTH); - fprintf(stream, "%s\n", linebuf); -} - -static void event_stat_loop(FILE * stream) -{ - struct mr_trace_stat * stat_handle; - stat_handle = mr_trace_stat_get(); - if(stat_handle == NULL) - { - fprintf(stderr, "Master(serivce) is not run or event stat " - "function is disable(handle is null).\n"); - exit(EXIT_FAILURE); - } - - uint64_t total_ev_rx_dup_failed = 0; - uint64_t total_ev_rx_entunnel_failed = 0; - - for(int i = 0; i < RTE_DIM(stat_handle->_per_thread); i++) - { - total_ev_rx_dup_failed += stat_handle->_per_thread[i].ev_rx_dup_failed; - total_ev_rx_entunnel_failed += stat_handle->_per_thread[i].ev_rx_entunnel_failed; - } - - fprintf(stream, "\n"); - write_timeinfo(stream); - fprintf(stream, "\n"); - write_table_header(stdout); - write_event_item(stream, "ev_rx_dup_failed", total_ev_rx_dup_failed); - write_event_item(stream, "ev_rx_entunnel_failed", total_ev_rx_entunnel_failed); - fprintf(stream, "\n"); - return; -} - -int main(int argc, char * argv[]) -{ - libstat_init(); - event_stat_loop(stdout); -}
\ No newline at end of file |
