1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
|
/* \brief Ӧ��״̬����������
*
* \author Lu Qiuwen<[email protected]>
* \date 2016-11-30
*/
#include <mr_common.h>
#include <mr_rtdev.h>
#include <mrapp.h>
#include "cJSON.h"
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;
}
static cJSON * __create_raw_device_stats(struct rtdev_app_desc * dev_desc)
{
struct rtdev_stat_info _stat_info;
mr_rtdev_app_stats_get(dev_desc, &_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;
#define __JOIN_RAW_DEVICE_STATS_ITEM(item, streams) do { \
cJSON_AddItemToObject(j_raw_device_stats, #item, \
__create_uint64_array(_stat_info.item, streams)); \
} 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_raw_device_stats;
}
// ����ʱԭʼ�����豸ͳ�Ƽ���
static cJSON * monit_raw_device(struct mrapp_instance * instance)
{
struct cJSON * j_raw_device_array = cJSON_CreateArray();
for(int i = 0; i < RTE_DIM(instance->raw_socket); i++)
{
struct raw_socket * socket = instance->raw_socket[i];
if (socket == 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_raw_device_stats(socket->rtdev_desc));
cJSON_AddItemToArray(j_raw_device_array, j_raw_device);
}
return j_raw_device_array;
}
static cJSON * monit_app_info(struct mrapp_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)
{
struct cJSON * j_root = cJSON_CreateObject();
cJSON_AddItemToObject(j_root, "appinfo", monit_app_info(instance));
cJSON_AddItemToObject(j_root, "raw", monit_raw_device(instance));
return j_root;
}
int mrapp_monit_loop(struct mrapp_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));
return 0;
}
cJSON * j_root = monit_root(instance);
char * str_json_print = cJSON_Print(j_root);
fprintf(fp_monit, "%s", str_json_print);
free(j_root);
fclose(fp_monit);
return 0;
}
|