diff options
| author | luwenpeng <[email protected]> | 2024-11-08 15:30:28 +0800 |
|---|---|---|
| committer | luwenpeng <[email protected]> | 2024-11-08 17:20:14 +0800 |
| commit | 6aa82aeea6bdf4ded2f2523868199d7da3131dd5 (patch) | |
| tree | a91f8b187eef21d98dd26ea188597465c1a7dab3 /platform | |
| parent | 043f9cbad7bd2be51b655067b274c31ffdeefde0 (diff) | |
TSG-23386 SCE移除FieldStat2,为适配AArch64做准备
Diffstat (limited to 'platform')
| -rw-r--r-- | platform/CMakeLists.txt | 1 | ||||
| -rw-r--r-- | platform/include/global_metrics.h | 14 | ||||
| -rw-r--r-- | platform/src/global_metrics.cpp | 620 | ||||
| -rw-r--r-- | platform/src/main.cpp | 4 |
4 files changed, 158 insertions, 481 deletions
diff --git a/platform/CMakeLists.txt b/platform/CMakeLists.txt index 46055ca..f4cc0b6 100644 --- a/platform/CMakeLists.txt +++ b/platform/CMakeLists.txt @@ -2,7 +2,6 @@ add_library(platform src/policy.cpp src/health_check.cpp src/sce.cpp src/packet_ target_link_libraries(platform PUBLIC common) target_link_libraries(platform PUBLIC pthread) target_link_libraries(platform PUBLIC MESA_prof_load) -target_link_libraries(platform PUBLIC MESA_field_stat) target_link_libraries(platform PUBLIC fieldstat4) target_link_libraries(platform PUBLIC breakpad_mini) target_link_libraries(platform PUBLIC maatframe) diff --git a/platform/include/global_metrics.h b/platform/include/global_metrics.h index d208d47..61e08c0 100644 --- a/platform/include/global_metrics.h +++ b/platform/include/global_metrics.h @@ -7,7 +7,7 @@ extern "C" #endif #include "utils.h" -#include <MESA/field_stat2.h> +#include <fieldstat/fieldstat_easy.h> struct throughput_metrics { @@ -92,13 +92,7 @@ struct thread_metrics struct metrics_config { char output_file[256]; - char statsd_server[32]; - int statsd_port; - int statsd_format; int statsd_cycle; - - int prometheus_listen_port; - char prometheus_listen_url[256]; }; struct global_metrics @@ -106,7 +100,7 @@ struct global_metrics struct thread_metrics sum; struct metrics_config config; - screen_stat_handle_t fs_handle; + struct fieldstat_easy *fs_handle; int fs_id[128]; int thread_num; @@ -116,8 +110,8 @@ struct global_metrics struct global_metrics *global_metrics_create(const char *profile, int thread_num); void global_metrics_destory(struct global_metrics *global_metrics); -void global_metrics_update(struct global_metrics *global_metrics, struct thread_metrics *thread_metrics, int thread_id); -void global_metrics_dump(struct global_metrics *global_metrics); +void global_metrics_sync(struct global_metrics *global_metrics, struct thread_metrics *thread_metrics, int thread_id); +void global_metrics_flush(struct global_metrics *global_metrics); #ifdef __cplusplus } diff --git a/platform/src/global_metrics.cpp b/platform/src/global_metrics.cpp index 3aa7a94..38892af 100644 --- a/platform/src/global_metrics.cpp +++ b/platform/src/global_metrics.cpp @@ -1,275 +1,145 @@ #include <stdlib.h> #include <string.h> #include <assert.h> -#include <MESA/field_stat2.h> #include <MESA/MESA_prof_load.h> #include "log.h" #include "global_metrics.h" -enum SCE_STAT_FIELD +// type, name, value +#define STAT_MAP(XX) \ + /* device_nf */ \ + XX(STAT_DEVICE_NF_RX_PKT, dev_nf_rx_P, nf_rx.n_pkts) \ + XX(STAT_DEVICE_NF_RX_B, dev_nf_rx_B, nf_rx.n_bytes) \ + XX(STAT_DEVICE_NF_TX_PKT, dev_nf_tx_P, nf_tx.n_pkts) \ + XX(STAT_DEVICE_NF_TX_B, dev_nf_tx_B, nf_tx.n_bytes) \ + XX(STAT_KEE_PKT_DOWN_RX_PKT, kee_d_rx_P, downlink_rx.n_pkts) \ + XX(STAT_KEE_PKT_DOWN_RX_B, kee_d_rx_B, downlink_rx.n_bytes) \ + XX(STAT_KEE_PKT_DOWN_TX_PKT, kee_d_tx_P, downlink_tx.n_pkts) \ + XX(STAT_KEE_PKT_DOWN_TX_B, kee_d_tx_B, downlink_tx.n_bytes) \ + /* raw traffic */ \ + XX(STAT_RAW_TRAFFIC_RX_PKT, raw_rx_P, raw_rx.n_pkts) \ + XX(STAT_RAW_TRAFFIC_RX_B, raw_rx_B, raw_rx.n_bytes) \ + XX(STAT_RAW_TRAFFIC_TX_PKT, raw_tx_P, raw_tx.n_pkts) \ + XX(STAT_RAW_TRAFFIC_TX_B, raw_tx_B, raw_tx.n_bytes) \ + /* decrypted traffic */ \ + XX(STAT_DECRYPTED_TRAFFIC_RX_PKT, dec_rx_P, dec_rx.n_pkts) \ + XX(STAT_DECRYPTED_TRAFFIC_RX_B, dec_rx_B, dec_rx.n_bytes) \ + XX(STAT_DECRYPTED_TRAFFIC_TX_PKT, dec_tx_P, dec_tx.n_pkts) \ + XX(STAT_DECRYPTED_TRAFFIC_TX_B, dec_tx_B, dec_tx.n_bytes) \ + /* device_endpoint_vxlan */ \ + XX(STAT_DEVICE_ENDPOINT_VXLAN_RX_PKT, dev_l3_rx_P, endpoint_vxlan_rx.n_pkts) \ + XX(STAT_DEVICE_ENDPOINT_VXLAN_RX_B, dev_l3_rx_B, endpoint_vxlan_rx.n_bytes) \ + XX(STAT_DEVICE_ENDPOINT_VXLAN_TX_PKT, dev_l3_tx_P, endpoint_vxlan_tx.n_pkts) \ + XX(STAT_DEVICE_ENDPOINT_VXLAN_TX_B, dev_l3_tx_B, endpoint_vxlan_tx.n_bytes) \ + XX(STAT_DEVICE_ENDPOINT_VXLAN_DROP_PKT, dev_l3_dop_P, endpoint_vxlan_drop.n_pkts) \ + XX(STAT_DEVICE_ENDPOINT_VXLAN_DROP_B, dev_l3_dop_B, endpoint_vxlan_drop.n_bytes) \ + XX(STAT_KEE_PKT_UP_RX_PKT, kee_u_rx_P, uplink_rx.n_pkts) \ + XX(STAT_KEE_PKT_UP_RX_B, kee_u_rx_B, uplink_rx.n_bytes) \ + XX(STAT_KEE_PKT_UP_TX_DROP_PKT, kee_u_rxdop_P, uplink_tx_drop.n_pkts) \ + XX(STAT_KEE_PKT_UP_TX_DROP_B, kee_u_rxdop_B, uplink_tx_drop.n_bytes) \ + /* device_endpoint_vlan */ \ + XX(STAT_DEVICE_ENDPOINT_VLAN_RX_PKT, dev_l2_rx_P, endpoint_vlan_rx.n_pkts) \ + XX(STAT_DEVICE_ENDPOINT_VLAN_RX_B, dev_l2_rx_B, endpoint_vlan_rx.n_bytes) \ + XX(STAT_DEVICE_ENDPOINT_VLAN_TX_PKT, dev_l2_tx_P, endpoint_vlan_tx.n_pkts) \ + XX(STAT_DEVICE_ENDPOINT_VLAN_TX_B, dev_l2_tx_B, endpoint_vlan_tx.n_bytes) \ + XX(STAT_DEVICE_ENDPOINT_VLAN_DROP_PKT, dev_l2_dop_P, endpoint_vlan_drop.n_pkts) \ + XX(STAT_DEVICE_ENDPOINT_VLAN_DROP_B, dev_l2_dop_B, endpoint_vlan_drop.n_bytes) \ + /* data_pkt_metrics */ \ + XX(STAT_DATA_PKT_MIRR_BYPASS_PKT, mirr_bypass_P, mirr_bypass.n_pkts) \ + XX(STAT_DATA_PKT_MIRR_BYPASS_B, mirr_bypass_B, mirr_bypass.n_bytes) \ + XX(STAT_DATA_PKT_MIRR_BLOCK_PKT, mirr_block_P, mirr_block.n_pkts) \ + XX(STAT_DATA_PKT_MIRR_BLOCK_B, mirr_block_B, mirr_block.n_bytes) \ + XX(STAT_DATA_PKT_MIRR_RX_DROP_PKT, mirr_rxdop_P, mirr_rx_drop.n_pkts) \ + XX(STAT_DATA_PKT_MIRR_RX_DROP_B, mirr_rxdop_B, mirr_rx_drop.n_bytes) \ + XX(STAT_DATA_PKT_MIRR_TX_PKT, mirr_tx_P, mirr_tx.n_pkts) \ + XX(STAT_DATA_PKT_MIRR_TX_B, mirr_tx_B, mirr_tx.n_bytes) \ + XX(STAT_DATA_PKT_STEE_BYPASS_PKT, stee_bypass_P, stee_bypass.n_pkts) \ + XX(STAT_DATA_PKT_STEE_BYPASS_B, stee_bypass_B, stee_bypass.n_bytes) \ + XX(STAT_DATA_PKT_STEE_BLOCK_PKT, stee_block_P, stee_block.n_pkts) \ + XX(STAT_DATA_PKT_STEE_BLOCK_B, stee_block_B, stee_block.n_bytes) \ + XX(STAT_DATA_PKT_STEE_RX_PKT, stee_rx_P, stee_rx.n_pkts) \ + XX(STAT_DATA_PKT_STEE_RX_B, stee_rx_B, stee_rx.n_bytes) \ + XX(STAT_DATA_PKT_STEE_TX_PKT, stee_tx_P, stee_tx.n_pkts) \ + XX(STAT_DATA_PKT_STEE_TX_B, stee_tx_B, stee_tx.n_bytes) \ + XX(STAT_DATA_PKT_MISS_SESS_PKT, miss_sess_P, miss_sess.n_pkts) \ + XX(STAT_DATA_PKT_MISS_SESS_B, miss_sess_B, miss_sess.n_bytes) \ + XX(STAT_DATA_PKT_ERROR_BYPASS_PKT, err_bypass_P, error_bypass.n_pkts) \ + XX(STAT_DATA_PKT_ERROR_BYPASS_B, err_bypass_B, error_bypass.n_bytes) \ + XX(STAT_DATA_PKT_ERROR_BLOCK_PKT, err_block_P, error_block.n_pkts) \ + XX(STAT_DATA_PKT_ERROR_BLOCK_B, err_block_B, error_block.n_bytes) \ + /* sf_status_metrics */ \ + XX(STAT_SF_STATUS_ACTIVE, sf_active, sf_active) \ + XX(STAT_SF_STATUS_INACTIVE, sf_inactive, sf_inactive) \ + /* ctrl_pkt_metrics */ \ + XX(STAT_CTRL_PKT_RX_PKT, ctrl_rx_P, ctrl_rx.n_pkts) \ + XX(STAT_CTRL_PKT_RX_B, ctrl_rx_B, ctrl_rx.n_bytes) \ + XX(STAT_CTRL_PKT_TX_PKT, ctrl_tx_P, ctrl_tx.n_pkts) \ + XX(STAT_CTRL_PKT_TX_B, ctrl_tx_B, ctrl_tx.n_bytes) \ + XX(STAT_CTRL_PKT_OPENING, ctrl_opening, ctrl_opening) \ + XX(STAT_CTRL_PKT_ACTIVE, ctrl_active, ctrl_active) \ + XX(STAT_CTRL_PKT_CLOSING, ctrl_closing, ctrl_closing) \ + XX(STAT_CTRL_PKT_RESETALL, ctrl_resetall, ctrl_resetall) \ + XX(STAT_CTRL_PKT_ERROR, ctrl_error, ctrl_error) \ + /* sf_session_metrics */ \ + XX(STAT_SF_SESSION_NUM, curr_sessions, session_num) \ + XX(STAT_SF_SESSION_LOG, session_logs, session_log) \ + XX(STAT_SESSION_NEW, session_new, session_new) \ + XX(STAT_SESSION_FREE, session_free, session_free) \ + /* stateless inject */ \ + XX(STAT_STATELESS_INJECT_PKT, stateless_inject_P, stateless_inject.n_pkts) \ + XX(STAT_STATELESS_INJECT_B, stateless_inject_B, stateless_inject.n_bytes) + +enum stat_type { - // device_nf - STAT_DEVICE_NF_RX_PKT, - STAT_DEVICE_NF_RX_B, - - STAT_DEVICE_NF_TX_PKT, - STAT_DEVICE_NF_TX_B, - - STAT_KEE_PKT_DOWN_RX_PKT, - STAT_KEE_PKT_DOWN_RX_B, - - STAT_KEE_PKT_DOWN_TX_PKT, - STAT_KEE_PKT_DOWN_TX_B, - - // raw traffic - STAT_RAW_TRAFFIC_RX_PKT, - STAT_RAW_TRAFFIC_RX_B, - - STAT_RAW_TRAFFIC_TX_PKT, - STAT_RAW_TRAFFIC_TX_B, - - // decrypted traffic - STAT_DECRYPTED_TRAFFIC_RX_PKT, - STAT_DECRYPTED_TRAFFIC_RX_B, - - STAT_DECRYPTED_TRAFFIC_TX_PKT, - STAT_DECRYPTED_TRAFFIC_TX_B, - - // device_endpoint_vxlan - STAT_DEVICE_ENDPOINT_VXLAN_RX_PKT, - STAT_DEVICE_ENDPOINT_VXLAN_RX_B, - - STAT_DEVICE_ENDPOINT_VXLAN_TX_PKT, - STAT_DEVICE_ENDPOINT_VXLAN_TX_B, - - STAT_KEE_PKT_UP_RX_PKT, - STAT_KEE_PKT_UP_RX_B, - - STAT_KEE_PKT_UP_TX_DROP_PKT, - STAT_KEE_PKT_UP_TX_DROP_B, - - // device_endpoint_vlan - STAT_DEVICE_ENDPOINT_VLAN_RX_PKT, - STAT_DEVICE_ENDPOINT_VLAN_RX_B, - - STAT_DEVICE_ENDPOINT_VLAN_TX_PKT, - STAT_DEVICE_ENDPOINT_VLAN_TX_B, - - STAT_DEVICE_ENDPOINT_VXLAN_DROP_PKT, - STAT_DEVICE_ENDPOINT_VXLAN_DROP_B, - - STAT_DEVICE_ENDPOINT_VLAN_DROP_PKT, - STAT_DEVICE_ENDPOINT_VLAN_DROP_B, - - // data_pkt_metrics - STAT_DATA_PKT_MIRR_BYPASS_PKT, - STAT_DATA_PKT_MIRR_BYPASS_B, - - STAT_DATA_PKT_MIRR_BLOCK_PKT, - STAT_DATA_PKT_MIRR_BLOCK_B, - - STAT_DATA_PKT_MIRR_RX_DROP_PKT, - STAT_DATA_PKT_MIRR_RX_DROP_B, - - STAT_DATA_PKT_MIRR_TX_PKT, - STAT_DATA_PKT_MIRR_TX_B, - - STAT_DATA_PKT_STEE_BYPASS_PKT, - STAT_DATA_PKT_STEE_BYPASS_B, - - STAT_DATA_PKT_STEE_BLOCK_PKT, - STAT_DATA_PKT_STEE_BLOCK_B, - - STAT_DATA_PKT_STEE_RX_PKT, - STAT_DATA_PKT_STEE_RX_B, - - STAT_DATA_PKT_STEE_TX_PKT, - STAT_DATA_PKT_STEE_TX_B, - - STAT_DATA_PKT_MISS_SESS_PKT, - STAT_DATA_PKT_MISS_SESS_B, - - STAT_DATA_PKT_ERROR_BYPASS_PKT, - STAT_DATA_PKT_ERROR_BYPASS_B, - - STAT_DATA_PKT_ERROR_BLOCK_PKT, - STAT_DATA_PKT_ERROR_BLOCK_B, - - // sf_status_metrics - STAT_SF_STATUS_ACTIVE, - STAT_SF_STATUS_INACTIVE, - - // ctrl_pkt_metrics - STAT_CTRL_PKT_RX_PKT, - STAT_CTRL_PKT_RX_B, - - STAT_CTRL_PKT_TX_PKT, - STAT_CTRL_PKT_TX_B, - - STAT_CTRL_PKT_OPENING, - STAT_CTRL_PKT_ACTIVE, - STAT_CTRL_PKT_CLOSING, - STAT_CTRL_PKT_RESETALL, - STAT_CTRL_PKT_ERROR, - - // sf_session_metrics - STAT_SF_SESSION_NUM, - STAT_SF_SESSION_LOG, - - STAT_SESSION_NEW, - STAT_SESSION_FREE, - - // stateless inject - STAT_STATELESS_INJECT_PKT, - STAT_STATELESS_INJECT_B, - - // max - STAT_MAX, +#define XX(_type, _name, _value) _type, + STAT_MAP(XX) +#undef XX + STAT_MAX }; - -static const char *stat_map[] = +static const char *stat_str[] = { - // device_nf - [STAT_DEVICE_NF_RX_PKT] = "dev_nf_rx_P", - [STAT_DEVICE_NF_RX_B] = "dev_nf_rx_B", - - [STAT_DEVICE_NF_TX_PKT] = "dev_nf_tx_P", - [STAT_DEVICE_NF_TX_B] = "dev_nf_tx_B", - - [STAT_KEE_PKT_DOWN_RX_PKT] = "kee_d_rx_P", - [STAT_KEE_PKT_DOWN_RX_B] = "kee_d_rx_B", - - [STAT_KEE_PKT_DOWN_TX_PKT] = "kee_d_tx_P", - [STAT_KEE_PKT_DOWN_TX_B] = "kee_d_tx_B", - - // raw traffic - [STAT_RAW_TRAFFIC_RX_PKT] = "raw_rx_P", - [STAT_RAW_TRAFFIC_RX_B] = "raw_rx_B", - - [STAT_RAW_TRAFFIC_TX_PKT] = "raw_tx_P", - [STAT_RAW_TRAFFIC_TX_B] = "raw_tx_B", - - // decypted traffic - [STAT_DECRYPTED_TRAFFIC_RX_PKT] = "dec_rx_P", - [STAT_DECRYPTED_TRAFFIC_RX_B] = "dec_rx_B", - - [STAT_DECRYPTED_TRAFFIC_TX_PKT] = "dec_tx_P", - [STAT_DECRYPTED_TRAFFIC_TX_B] = "dec_tx_B", - - // device_endpoint_vxlan - [STAT_DEVICE_ENDPOINT_VXLAN_RX_PKT] = "dev_l3_rx_P", - [STAT_DEVICE_ENDPOINT_VXLAN_RX_B] = "dev_l3_rx_B", - - [STAT_DEVICE_ENDPOINT_VXLAN_TX_PKT] = "dev_l3_tx_P", - [STAT_DEVICE_ENDPOINT_VXLAN_TX_B] = "dev_l3_tx_B", - - [STAT_KEE_PKT_UP_RX_PKT] = "kee_u_rx_P", - [STAT_KEE_PKT_UP_RX_B] = "kee_u_rx_B", - - [STAT_KEE_PKT_UP_TX_DROP_PKT] = "kee_u_rxdop_P", - [STAT_KEE_PKT_UP_TX_DROP_B] = "kee_u_rxdop_B", - - // device_endpoint_vlan - [STAT_DEVICE_ENDPOINT_VLAN_RX_PKT] = "dev_l2_rx_P", - [STAT_DEVICE_ENDPOINT_VLAN_RX_B] = "dev_l2_rx_B", - - [STAT_DEVICE_ENDPOINT_VLAN_TX_PKT] = "dev_l2_tx_P", - [STAT_DEVICE_ENDPOINT_VLAN_TX_B] = "dev_l2_tx_B", - - [STAT_DEVICE_ENDPOINT_VXLAN_DROP_PKT] = "dev_l3_dop_P", - [STAT_DEVICE_ENDPOINT_VXLAN_DROP_B] = "dev_l3_dop_B", - - [STAT_DEVICE_ENDPOINT_VLAN_DROP_PKT] = "dev_l2_dop_P", - [STAT_DEVICE_ENDPOINT_VLAN_DROP_B] = "dev_l2_dop_B", - - // data_pkt_metrics - [STAT_DATA_PKT_MIRR_BYPASS_PKT] = "mirr_bypass_P", - [STAT_DATA_PKT_MIRR_BYPASS_B] = "mirr_bypass_B", - - [STAT_DATA_PKT_MIRR_BLOCK_PKT] = "mirr_block_P", - [STAT_DATA_PKT_MIRR_BLOCK_B] = "mirr_block_B", - - [STAT_DATA_PKT_MIRR_RX_DROP_PKT] = "mirr_rxdop_P", - [STAT_DATA_PKT_MIRR_RX_DROP_B] = "mirr_rxdop_B", - - [STAT_DATA_PKT_MIRR_TX_PKT] = "mirr_tx_P", - [STAT_DATA_PKT_MIRR_TX_B] = "mirr_tx_B", - - [STAT_DATA_PKT_STEE_BYPASS_PKT] = "stee_bypass_P", - [STAT_DATA_PKT_STEE_BYPASS_B] = "stee_bypass_B", - - [STAT_DATA_PKT_STEE_BLOCK_PKT] = "stee_block_P", - [STAT_DATA_PKT_STEE_BLOCK_B] = "stee_block_B", - - [STAT_DATA_PKT_STEE_RX_PKT] = "stee_rx_P", - [STAT_DATA_PKT_STEE_RX_B] = "stee_rx_B", - - [STAT_DATA_PKT_STEE_TX_PKT] = "stee_tx_P", - [STAT_DATA_PKT_STEE_TX_B] = "stee_tx_B", - - [STAT_DATA_PKT_MISS_SESS_PKT] = "miss_sess_P", - [STAT_DATA_PKT_MISS_SESS_B] = "miss_sess_B", - - [STAT_DATA_PKT_ERROR_BYPASS_PKT] = "err_bypass_P", - [STAT_DATA_PKT_ERROR_BYPASS_B] = "err_bypass_B", - - [STAT_DATA_PKT_ERROR_BLOCK_PKT] = "err_block_P", - [STAT_DATA_PKT_ERROR_BLOCK_B] = "err_block_B", - - // sf_status_metrics - [STAT_SF_STATUS_ACTIVE] = "sf_active", - [STAT_SF_STATUS_INACTIVE] = "sf_inactive", - - // ctrl_pkt_metrics - [STAT_CTRL_PKT_RX_PKT] = "ctrl_rx_P", - [STAT_CTRL_PKT_RX_B] = "ctrl_rx_B", - - [STAT_CTRL_PKT_TX_PKT] = "ctrl_tx_P", - [STAT_CTRL_PKT_TX_B] = "ctrl_tx_B", - - [STAT_CTRL_PKT_OPENING] = "ctrl_opening", - [STAT_CTRL_PKT_ACTIVE] = "ctrl_active", - [STAT_CTRL_PKT_CLOSING] = "ctrl_closing", - [STAT_CTRL_PKT_RESETALL] = "ctrl_resetall", - [STAT_CTRL_PKT_ERROR] = "ctrl_error", - - // sf_session_metrics - [STAT_SF_SESSION_NUM] = "curr_sessions", - [STAT_SF_SESSION_LOG] = "session_logs", - - [STAT_SESSION_NEW] = "session_new", - [STAT_SESSION_FREE] = "session_free", +#define XX(_type, _name, _value) #_name, + STAT_MAP(XX) +#undef XX +}; - // stateless inject - [STAT_STATELESS_INJECT_PKT] = "stateless_inject_P", - [STAT_STATELESS_INJECT_B] = "stateless_inject_B", +static uint64_t thread_metrics_get_value(struct thread_metrics *metrics, enum stat_type type) +{ + switch (type) + { +#define XX(_type, _name, _value) \ + case _type: \ + return metrics->_value; + STAT_MAP(XX) +#undef XX + default: + return 0; + } +} - [STAT_MAX] = NULL}; +static void thread_metrics_add_value(struct thread_metrics *metrics, enum stat_type type, uint64_t value) +{ + switch (type) + { +#define XX(_type, _name, _value) \ + case _type: \ + metrics->_value += value; \ + break; + STAT_MAP(XX) +#undef XX + default: + break; + } +} static void global_metrics_parse_config(const char *profile, struct metrics_config *config) { - MESA_load_profile_string_def(profile, "STAT", "output_file", config->output_file, sizeof(config->output_file), "log/sce.fs2"); - MESA_load_profile_string_def(profile, "STAT", "statsd_server", config->statsd_server, sizeof(config->statsd_server), "127.0.0.1"); - MESA_load_profile_int_def(profile, "STAT", "statsd_port", &(config->statsd_port), 8100); - MESA_load_profile_int_def(profile, "STAT", "statsd_format", &(config->statsd_format), 1); // FS_OUTPUT_STATSD=1, FS_OUTPUT_INFLUX_LINE=2 + MESA_load_profile_string_def(profile, "STAT", "output_file", config->output_file, sizeof(config->output_file), "log/sce.fs4"); MESA_load_profile_int_def(profile, "STAT", "statsd_cycle", &(config->statsd_cycle), 1); - MESA_load_profile_int_def(profile, "STAT", "prometheus_listen_port", &(config->prometheus_listen_port), 9001); - MESA_load_profile_string_def(profile, "STAT", "prometheus_listen_url", config->prometheus_listen_url, sizeof(config->prometheus_listen_url), "/sce_prometheus"); - - if (config->statsd_format != 1 && config->statsd_format != 2) - { - config->statsd_format = 1; - } - LOG_DEBUG("STAT->output_file : %s", config->output_file); - LOG_DEBUG("STAT->statsd_server : %s", config->statsd_server); - LOG_DEBUG("STAT->statsd_port : %d", config->statsd_port); - LOG_DEBUG("STAT->statsd_format : %d", config->statsd_format); LOG_DEBUG("STAT->statsd_cycle : %d", config->statsd_cycle); - LOG_DEBUG("STAT->prometheus_listen_port : %d", config->prometheus_listen_port); - LOG_DEBUG("STAT->prometheus_listen_url : %s", config->prometheus_listen_url); } struct global_metrics *global_metrics_create(const char *profile, int thread_num) @@ -283,26 +153,19 @@ struct global_metrics *global_metrics_create(const char *profile, int thread_num global_metrics_parse_config(profile, &global_metrics->config); - FS_library_set_prometheus_port(global_metrics->config.prometheus_listen_port); - FS_library_set_prometheus_url_path(global_metrics->config.prometheus_listen_url); - FS_library_init(); - - int value = 0; - global_metrics->fs_handle = FS_create_handle(); // TODO memleak no free() API - FS_set_para(global_metrics->fs_handle, APP_NAME, "SCE", 3); - FS_set_para(global_metrics->fs_handle, OUTPUT_DEVICE, global_metrics->config.output_file, strlen(global_metrics->config.output_file)); - value = 1; - FS_set_para(global_metrics->fs_handle, OUTPUT_PROMETHEUS, &value, sizeof(value)); - value = 1; - FS_set_para(global_metrics->fs_handle, PRINT_MODE, &value, sizeof(value)); - value = 0; - FS_set_para(global_metrics->fs_handle, CREATE_THREAD, &value, sizeof(value)); + global_metrics->fs_handle = fieldstat_easy_new(1, "SCE", NULL, 0); + if (global_metrics->fs_handle == NULL) + { + LOG_ERROR("failed to create fieldstat_easy"); + global_metrics_destory(global_metrics); + return NULL; + } - if (strlen(global_metrics->config.statsd_server) > 0 && global_metrics->config.statsd_port != 0) + if (fieldstat_easy_enable_auto_output(global_metrics->fs_handle, global_metrics->config.output_file, global_metrics->config.statsd_cycle) != 0) { - FS_set_para(global_metrics->fs_handle, STATS_SERVER_IP, global_metrics->config.statsd_server, strlen(global_metrics->config.statsd_server)); - FS_set_para(global_metrics->fs_handle, STATS_SERVER_PORT, &(global_metrics->config.statsd_port), sizeof(global_metrics->config.statsd_port)); - FS_set_para(global_metrics->fs_handle, STATS_FORMAT, &global_metrics->config.statsd_format, sizeof(global_metrics->config.statsd_format)); + LOG_ERROR("failed to enable auto output for fieldstat_easy"); + global_metrics_destory(global_metrics); + return NULL; } if (STAT_MAX >= (sizeof(global_metrics->fs_id) / sizeof(global_metrics->fs_id[0]))) @@ -314,11 +177,9 @@ struct global_metrics *global_metrics_create(const char *profile, int thread_num for (int i = 0; i < STAT_MAX; i++) { - global_metrics->fs_id[i] = FS_register(global_metrics->fs_handle, FS_STYLE_FIELD, FS_CALC_CURRENT, stat_map[i]); + global_metrics->fs_id[i] = fieldstat_easy_register_counter(global_metrics->fs_handle, stat_str[i]); } - FS_start(global_metrics->fs_handle); - return global_metrics; } @@ -338,7 +199,11 @@ void global_metrics_destory(struct global_metrics *global_metrics) global_metrics->thread_metrics_cache = NULL; } - FS_library_destroy(); + if (global_metrics->fs_handle) + { + fieldstat_easy_free(global_metrics->fs_handle); + global_metrics->fs_handle = NULL; + } free(global_metrics); global_metrics = NULL; } @@ -347,7 +212,7 @@ void global_metrics_destory(struct global_metrics *global_metrics) #define THREAD_METRICS_CACHE_IS_FREE 0 #define THREAD_METRICS_CACHE_IS_BUSY 0xf -void global_metrics_update(struct global_metrics *global_metrics, struct thread_metrics *thread_metrics, int thread_id) +void global_metrics_sync(struct global_metrics *global_metrics, struct thread_metrics *thread_metrics, int thread_id) { if (ATOMIC_READ(&(global_metrics->thread_metrics_flag[thread_id])) == THREAD_METRICS_CACHE_IS_FREE) { @@ -360,209 +225,28 @@ void global_metrics_update(struct global_metrics *global_metrics, struct thread_ } } -void global_metrics_dump(struct global_metrics *global_metrics) +void global_metrics_flush(struct global_metrics *global_metrics) { struct thread_metrics *sum = &global_metrics->sum; + struct thread_metrics last = *sum; for (int i = 0; i < global_metrics->thread_num; i++) { if (ATOMIC_READ(&(global_metrics->thread_metrics_flag[i])) == THREAD_METRICS_CACHE_IS_BUSY) { struct thread_metrics *thread = &global_metrics->thread_metrics_cache[i]; - - sum->nf_rx.n_pkts += thread->nf_rx.n_pkts; - sum->nf_rx.n_bytes += thread->nf_rx.n_bytes; - sum->nf_tx.n_pkts += thread->nf_tx.n_pkts; - sum->nf_tx.n_bytes += thread->nf_tx.n_bytes; - - sum->raw_rx.n_pkts += thread->raw_rx.n_pkts; - sum->raw_rx.n_bytes += thread->raw_rx.n_bytes; - sum->raw_tx.n_pkts += thread->raw_tx.n_pkts; - sum->raw_tx.n_bytes += thread->raw_tx.n_bytes; - - sum->dec_rx.n_pkts += thread->dec_rx.n_pkts; - sum->dec_rx.n_bytes += thread->dec_rx.n_bytes; - sum->dec_tx.n_pkts += thread->dec_tx.n_pkts; - sum->dec_tx.n_bytes += thread->dec_tx.n_bytes; - - sum->endpoint_vxlan_rx.n_pkts += thread->endpoint_vxlan_rx.n_pkts; - sum->endpoint_vxlan_rx.n_bytes += thread->endpoint_vxlan_rx.n_bytes; - sum->endpoint_vxlan_tx.n_pkts += thread->endpoint_vxlan_tx.n_pkts; - sum->endpoint_vxlan_tx.n_bytes += thread->endpoint_vxlan_tx.n_bytes; - sum->endpoint_vxlan_drop.n_pkts += thread->endpoint_vxlan_drop.n_pkts; - sum->endpoint_vxlan_drop.n_bytes += thread->endpoint_vxlan_drop.n_bytes; - - sum->endpoint_vlan_rx.n_pkts += thread->endpoint_vlan_rx.n_pkts; - sum->endpoint_vlan_rx.n_bytes += thread->endpoint_vlan_rx.n_bytes; - sum->endpoint_vlan_tx.n_pkts += thread->endpoint_vlan_tx.n_pkts; - sum->endpoint_vlan_tx.n_bytes += thread->endpoint_vlan_tx.n_bytes; - sum->endpoint_vlan_drop.n_pkts += thread->endpoint_vlan_drop.n_pkts; - sum->endpoint_vlan_drop.n_bytes += thread->endpoint_vlan_drop.n_bytes; - - sum->mirr_bypass.n_pkts += thread->mirr_bypass.n_pkts; - sum->mirr_bypass.n_bytes += thread->mirr_bypass.n_bytes; - sum->mirr_block.n_pkts += thread->mirr_block.n_pkts; - sum->mirr_block.n_bytes += thread->mirr_block.n_bytes; - sum->mirr_rx_drop.n_pkts += thread->mirr_rx_drop.n_pkts; - sum->mirr_rx_drop.n_bytes += thread->mirr_rx_drop.n_bytes; - sum->mirr_tx.n_pkts += thread->mirr_tx.n_pkts; - sum->mirr_tx.n_bytes += thread->mirr_tx.n_bytes; - sum->stee_bypass.n_pkts += thread->stee_bypass.n_pkts; - sum->stee_bypass.n_bytes += thread->stee_bypass.n_bytes; - sum->stee_block.n_pkts += thread->stee_block.n_pkts; - sum->stee_block.n_bytes += thread->stee_block.n_bytes; - sum->stee_rx.n_pkts += thread->stee_rx.n_pkts; - sum->stee_rx.n_bytes += thread->stee_rx.n_bytes; - sum->stee_tx.n_pkts += thread->stee_tx.n_pkts; - sum->stee_tx.n_bytes += thread->stee_tx.n_bytes; - sum->miss_sess.n_pkts += thread->miss_sess.n_pkts; - sum->miss_sess.n_bytes += thread->miss_sess.n_bytes; - sum->error_bypass.n_pkts += thread->error_bypass.n_pkts; - sum->error_bypass.n_bytes += thread->error_bypass.n_bytes; - sum->error_block.n_pkts += thread->error_block.n_pkts; - sum->error_block.n_bytes += thread->error_block.n_bytes; - sum->ctrl_rx.n_pkts += thread->ctrl_rx.n_pkts; - sum->ctrl_rx.n_bytes += thread->ctrl_rx.n_bytes; - sum->ctrl_tx.n_pkts += thread->ctrl_tx.n_pkts; - sum->ctrl_tx.n_bytes += thread->ctrl_tx.n_bytes; - sum->ctrl_opening += thread->ctrl_opening; - sum->ctrl_active += thread->ctrl_active; - sum->ctrl_closing += thread->ctrl_closing; - sum->ctrl_resetall += thread->ctrl_resetall; - sum->ctrl_error += thread->ctrl_error; - sum->downlink_rx.n_pkts += thread->downlink_rx.n_pkts; - sum->downlink_rx.n_bytes += thread->downlink_rx.n_bytes; - sum->downlink_tx.n_pkts += thread->downlink_tx.n_pkts; - sum->downlink_tx.n_bytes += thread->downlink_tx.n_bytes; - sum->uplink_rx.n_pkts += thread->uplink_rx.n_pkts; - sum->uplink_rx.n_bytes += thread->uplink_rx.n_bytes; - sum->uplink_tx_drop.n_pkts += thread->uplink_tx_drop.n_pkts; - sum->uplink_tx_drop.n_bytes += thread->uplink_tx_drop.n_bytes; - sum->sf_active += thread->sf_active; - sum->sf_inactive += thread->sf_inactive; - sum->session_num += thread->session_num; - sum->session_log += thread->session_log; - sum->session_new += thread->session_new; - sum->session_free += thread->session_free; - - sum->stateless_inject.n_pkts += thread->stateless_inject.n_pkts; - sum->stateless_inject.n_bytes += thread->stateless_inject.n_bytes; - + for (int j = 0; j < STAT_MAX; j++) + { + uint64_t val = thread_metrics_get_value(thread, (enum stat_type)j); + thread_metrics_add_value(sum, (enum stat_type)j, val); + } memset(thread, 0, sizeof(struct thread_metrics)); ATOMIC_SET(&(global_metrics->thread_metrics_flag[i]), THREAD_METRICS_CACHE_IS_FREE); } } - // device_metrics - FS_operate(global_metrics->fs_handle, global_metrics->fs_id[STAT_DEVICE_NF_RX_PKT], 0, FS_OP_SET, sum->nf_rx.n_pkts); - FS_operate(global_metrics->fs_handle, global_metrics->fs_id[STAT_DEVICE_NF_RX_B], 0, FS_OP_SET, sum->nf_rx.n_bytes); - - FS_operate(global_metrics->fs_handle, global_metrics->fs_id[STAT_DEVICE_NF_TX_PKT], 0, FS_OP_SET, sum->nf_tx.n_pkts); - FS_operate(global_metrics->fs_handle, global_metrics->fs_id[STAT_DEVICE_NF_TX_B], 0, FS_OP_SET, sum->nf_tx.n_bytes); - - FS_operate(global_metrics->fs_handle, global_metrics->fs_id[STAT_RAW_TRAFFIC_RX_PKT], 0, FS_OP_SET, sum->raw_rx.n_pkts); - FS_operate(global_metrics->fs_handle, global_metrics->fs_id[STAT_RAW_TRAFFIC_RX_B], 0, FS_OP_SET, sum->raw_rx.n_bytes); - - FS_operate(global_metrics->fs_handle, global_metrics->fs_id[STAT_RAW_TRAFFIC_TX_PKT], 0, FS_OP_SET, sum->raw_tx.n_pkts); - FS_operate(global_metrics->fs_handle, global_metrics->fs_id[STAT_RAW_TRAFFIC_TX_B], 0, FS_OP_SET, sum->raw_tx.n_bytes); - - FS_operate(global_metrics->fs_handle, global_metrics->fs_id[STAT_DECRYPTED_TRAFFIC_RX_PKT], 0, FS_OP_SET, sum->dec_rx.n_pkts); - FS_operate(global_metrics->fs_handle, global_metrics->fs_id[STAT_DECRYPTED_TRAFFIC_RX_B], 0, FS_OP_SET, sum->dec_rx.n_bytes); - - FS_operate(global_metrics->fs_handle, global_metrics->fs_id[STAT_DECRYPTED_TRAFFIC_TX_PKT], 0, FS_OP_SET, sum->dec_tx.n_pkts); - FS_operate(global_metrics->fs_handle, global_metrics->fs_id[STAT_DECRYPTED_TRAFFIC_TX_B], 0, FS_OP_SET, sum->dec_tx.n_bytes); - - FS_operate(global_metrics->fs_handle, global_metrics->fs_id[STAT_DEVICE_ENDPOINT_VXLAN_RX_PKT], 0, FS_OP_SET, sum->endpoint_vxlan_rx.n_pkts); - FS_operate(global_metrics->fs_handle, global_metrics->fs_id[STAT_DEVICE_ENDPOINT_VXLAN_RX_B], 0, FS_OP_SET, sum->endpoint_vxlan_rx.n_bytes); - - FS_operate(global_metrics->fs_handle, global_metrics->fs_id[STAT_DEVICE_ENDPOINT_VXLAN_TX_PKT], 0, FS_OP_SET, sum->endpoint_vxlan_tx.n_pkts); - FS_operate(global_metrics->fs_handle, global_metrics->fs_id[STAT_DEVICE_ENDPOINT_VXLAN_TX_B], 0, FS_OP_SET, sum->endpoint_vxlan_tx.n_bytes); - - FS_operate(global_metrics->fs_handle, global_metrics->fs_id[STAT_DEVICE_ENDPOINT_VXLAN_DROP_PKT], 0, FS_OP_SET, sum->endpoint_vxlan_drop.n_pkts); - FS_operate(global_metrics->fs_handle, global_metrics->fs_id[STAT_DEVICE_ENDPOINT_VXLAN_DROP_B], 0, FS_OP_SET, sum->endpoint_vxlan_drop.n_bytes); - - FS_operate(global_metrics->fs_handle, global_metrics->fs_id[STAT_DEVICE_ENDPOINT_VLAN_RX_PKT], 0, FS_OP_SET, sum->endpoint_vlan_rx.n_pkts); - FS_operate(global_metrics->fs_handle, global_metrics->fs_id[STAT_DEVICE_ENDPOINT_VLAN_RX_B], 0, FS_OP_SET, sum->endpoint_vlan_rx.n_bytes); - - FS_operate(global_metrics->fs_handle, global_metrics->fs_id[STAT_DEVICE_ENDPOINT_VLAN_TX_PKT], 0, FS_OP_SET, sum->endpoint_vlan_tx.n_pkts); - FS_operate(global_metrics->fs_handle, global_metrics->fs_id[STAT_DEVICE_ENDPOINT_VLAN_TX_B], 0, FS_OP_SET, sum->endpoint_vlan_tx.n_bytes); - - FS_operate(global_metrics->fs_handle, global_metrics->fs_id[STAT_DEVICE_ENDPOINT_VLAN_DROP_PKT], 0, FS_OP_SET, sum->endpoint_vlan_drop.n_pkts); - FS_operate(global_metrics->fs_handle, global_metrics->fs_id[STAT_DEVICE_ENDPOINT_VLAN_DROP_B], 0, FS_OP_SET, sum->endpoint_vlan_drop.n_bytes); - - // data_pkt_metrics - FS_operate(global_metrics->fs_handle, global_metrics->fs_id[STAT_DATA_PKT_MIRR_BYPASS_PKT], 0, FS_OP_SET, sum->mirr_bypass.n_pkts); - FS_operate(global_metrics->fs_handle, global_metrics->fs_id[STAT_DATA_PKT_MIRR_BYPASS_B], 0, FS_OP_SET, sum->mirr_bypass.n_bytes); - - FS_operate(global_metrics->fs_handle, global_metrics->fs_id[STAT_DATA_PKT_MIRR_BLOCK_PKT], 0, FS_OP_SET, sum->mirr_block.n_pkts); - FS_operate(global_metrics->fs_handle, global_metrics->fs_id[STAT_DATA_PKT_MIRR_BLOCK_B], 0, FS_OP_SET, sum->mirr_block.n_bytes); - - FS_operate(global_metrics->fs_handle, global_metrics->fs_id[STAT_DATA_PKT_MIRR_RX_DROP_PKT], 0, FS_OP_SET, sum->mirr_rx_drop.n_pkts); - FS_operate(global_metrics->fs_handle, global_metrics->fs_id[STAT_DATA_PKT_MIRR_RX_DROP_B], 0, FS_OP_SET, sum->mirr_rx_drop.n_bytes); - - FS_operate(global_metrics->fs_handle, global_metrics->fs_id[STAT_DATA_PKT_MIRR_TX_PKT], 0, FS_OP_SET, sum->mirr_tx.n_pkts); - FS_operate(global_metrics->fs_handle, global_metrics->fs_id[STAT_DATA_PKT_MIRR_TX_B], 0, FS_OP_SET, sum->mirr_tx.n_bytes); - - FS_operate(global_metrics->fs_handle, global_metrics->fs_id[STAT_DATA_PKT_STEE_BYPASS_PKT], 0, FS_OP_SET, sum->stee_bypass.n_pkts); - FS_operate(global_metrics->fs_handle, global_metrics->fs_id[STAT_DATA_PKT_STEE_BYPASS_B], 0, FS_OP_SET, sum->stee_bypass.n_bytes); - - FS_operate(global_metrics->fs_handle, global_metrics->fs_id[STAT_DATA_PKT_STEE_BLOCK_PKT], 0, FS_OP_SET, sum->stee_block.n_pkts); - FS_operate(global_metrics->fs_handle, global_metrics->fs_id[STAT_DATA_PKT_STEE_BLOCK_B], 0, FS_OP_SET, sum->stee_block.n_bytes); - - FS_operate(global_metrics->fs_handle, global_metrics->fs_id[STAT_DATA_PKT_STEE_RX_PKT], 0, FS_OP_SET, sum->stee_rx.n_pkts); - FS_operate(global_metrics->fs_handle, global_metrics->fs_id[STAT_DATA_PKT_STEE_RX_B], 0, FS_OP_SET, sum->stee_rx.n_bytes); - - FS_operate(global_metrics->fs_handle, global_metrics->fs_id[STAT_DATA_PKT_STEE_TX_PKT], 0, FS_OP_SET, sum->stee_tx.n_pkts); - FS_operate(global_metrics->fs_handle, global_metrics->fs_id[STAT_DATA_PKT_STEE_TX_B], 0, FS_OP_SET, sum->stee_tx.n_bytes); - - FS_operate(global_metrics->fs_handle, global_metrics->fs_id[STAT_DATA_PKT_MISS_SESS_PKT], 0, FS_OP_SET, sum->miss_sess.n_pkts); - FS_operate(global_metrics->fs_handle, global_metrics->fs_id[STAT_DATA_PKT_MISS_SESS_B], 0, FS_OP_SET, sum->miss_sess.n_bytes); - - FS_operate(global_metrics->fs_handle, global_metrics->fs_id[STAT_DATA_PKT_ERROR_BYPASS_PKT], 0, FS_OP_SET, sum->error_bypass.n_pkts); - FS_operate(global_metrics->fs_handle, global_metrics->fs_id[STAT_DATA_PKT_ERROR_BYPASS_B], 0, FS_OP_SET, sum->error_bypass.n_bytes); - - FS_operate(global_metrics->fs_handle, global_metrics->fs_id[STAT_DATA_PKT_ERROR_BLOCK_PKT], 0, FS_OP_SET, sum->error_block.n_pkts); - FS_operate(global_metrics->fs_handle, global_metrics->fs_id[STAT_DATA_PKT_ERROR_BLOCK_B], 0, FS_OP_SET, sum->error_block.n_bytes); - - // ctrl_pkt_metrics - FS_operate(global_metrics->fs_handle, global_metrics->fs_id[STAT_CTRL_PKT_RX_PKT], 0, FS_OP_SET, sum->ctrl_rx.n_pkts); - FS_operate(global_metrics->fs_handle, global_metrics->fs_id[STAT_CTRL_PKT_RX_B], 0, FS_OP_SET, sum->ctrl_rx.n_bytes); - - FS_operate(global_metrics->fs_handle, global_metrics->fs_id[STAT_CTRL_PKT_TX_PKT], 0, FS_OP_SET, sum->ctrl_tx.n_pkts); - FS_operate(global_metrics->fs_handle, global_metrics->fs_id[STAT_CTRL_PKT_TX_B], 0, FS_OP_SET, sum->ctrl_tx.n_bytes); - - FS_operate(global_metrics->fs_handle, global_metrics->fs_id[STAT_CTRL_PKT_OPENING], 0, FS_OP_SET, sum->ctrl_opening); - FS_operate(global_metrics->fs_handle, global_metrics->fs_id[STAT_CTRL_PKT_ACTIVE], 0, FS_OP_SET, sum->ctrl_active); - FS_operate(global_metrics->fs_handle, global_metrics->fs_id[STAT_CTRL_PKT_CLOSING], 0, FS_OP_SET, sum->ctrl_closing); - FS_operate(global_metrics->fs_handle, global_metrics->fs_id[STAT_CTRL_PKT_RESETALL], 0, FS_OP_SET, sum->ctrl_resetall); - FS_operate(global_metrics->fs_handle, global_metrics->fs_id[STAT_CTRL_PKT_ERROR], 0, FS_OP_SET, sum->ctrl_error); - - // keepalived_pkt_metrics - FS_operate(global_metrics->fs_handle, global_metrics->fs_id[STAT_KEE_PKT_DOWN_RX_PKT], 0, FS_OP_SET, sum->downlink_rx.n_pkts); - FS_operate(global_metrics->fs_handle, global_metrics->fs_id[STAT_KEE_PKT_DOWN_RX_B], 0, FS_OP_SET, sum->downlink_rx.n_bytes); - - FS_operate(global_metrics->fs_handle, global_metrics->fs_id[STAT_KEE_PKT_DOWN_TX_PKT], 0, FS_OP_SET, sum->downlink_tx.n_pkts); - FS_operate(global_metrics->fs_handle, global_metrics->fs_id[STAT_KEE_PKT_DOWN_TX_B], 0, FS_OP_SET, sum->downlink_tx.n_bytes); - - FS_operate(global_metrics->fs_handle, global_metrics->fs_id[STAT_KEE_PKT_UP_RX_PKT], 0, FS_OP_SET, sum->uplink_rx.n_pkts); - FS_operate(global_metrics->fs_handle, global_metrics->fs_id[STAT_KEE_PKT_UP_RX_B], 0, FS_OP_SET, sum->uplink_rx.n_bytes); - - FS_operate(global_metrics->fs_handle, global_metrics->fs_id[STAT_KEE_PKT_UP_TX_DROP_PKT], 0, FS_OP_SET, sum->uplink_tx_drop.n_pkts); - FS_operate(global_metrics->fs_handle, global_metrics->fs_id[STAT_KEE_PKT_UP_TX_DROP_B], 0, FS_OP_SET, sum->uplink_tx_drop.n_bytes); - - // sf_status_metrics - FS_operate(global_metrics->fs_handle, global_metrics->fs_id[STAT_SF_STATUS_ACTIVE], 0, FS_OP_SET, sum->sf_active); - FS_operate(global_metrics->fs_handle, global_metrics->fs_id[STAT_SF_STATUS_INACTIVE], 0, FS_OP_SET, sum->sf_inactive); - - // sf_session_metrics - FS_operate(global_metrics->fs_handle, global_metrics->fs_id[STAT_SF_SESSION_NUM], 0, FS_OP_SET, sum->session_num); - FS_operate(global_metrics->fs_handle, global_metrics->fs_id[STAT_SF_SESSION_LOG], 0, FS_OP_SET, sum->session_log); - - FS_operate(global_metrics->fs_handle, global_metrics->fs_id[STAT_SESSION_NEW], 0, FS_OP_SET, sum->session_new); - FS_operate(global_metrics->fs_handle, global_metrics->fs_id[STAT_SESSION_FREE], 0, FS_OP_SET, sum->session_free); - - // stateless inject - FS_operate(global_metrics->fs_handle, global_metrics->fs_id[STAT_STATELESS_INJECT_PKT], 0, FS_OP_SET, sum->stateless_inject.n_pkts); - FS_operate(global_metrics->fs_handle, global_metrics->fs_id[STAT_STATELESS_INJECT_B], 0, FS_OP_SET, sum->stateless_inject.n_bytes); - - FS_passive_output(global_metrics->fs_handle); + for (int i = 0; i < STAT_MAX; i++) + { + uint64_t delta = thread_metrics_get_value(sum, (enum stat_type)i) - thread_metrics_get_value(&last, (enum stat_type)i); + fieldstat_easy_counter_incrby(global_metrics->fs_handle, 0, global_metrics->fs_id[i], NULL, 0, delta); + } } diff --git a/platform/src/main.cpp b/platform/src/main.cpp index 1f58b91..f6c2241 100644 --- a/platform/src/main.cpp +++ b/platform/src/main.cpp @@ -103,7 +103,7 @@ static void *worker_thread_cycle(void *arg) packet_io_wait(handle, thread_ctx, timeout_ms); } - global_metrics_update(global_metrics, thread_metrics, thread_index); + global_metrics_sync(global_metrics, thread_metrics, thread_index); if (ATOMIC_READ(&thread_ctx->session_table_need_reset) > 0) { @@ -221,7 +221,7 @@ int main(int argc, char **argv) { if (timestamp_get_msec(ctx->ts) - g_metrics_last_send_ts >= g_metrics_send_interval) { - global_metrics_dump(ctx->metrics); + global_metrics_flush(ctx->metrics); g_metrics_last_send_ts = timestamp_get_msec(ctx->ts); } |
