summaryrefslogtreecommitdiff
path: root/src/http_decoder_stat.cpp
diff options
context:
space:
mode:
authorlijia <[email protected]>2024-05-24 22:47:32 +0800
committerlijia <[email protected]>2024-05-26 19:45:15 +0800
commit50a9fea27ca30d532bf89bc8fd7e6025a240e9e4 (patch)
treee066e771c8a4abb3f1997ea3e0aebcb2d259f85e /src/http_decoder_stat.cpp
parent22d071e23ff423242f51dce2eab1477b5fb9d106 (diff)
Adapt to stellar v2.0v2.0.1
Diffstat (limited to 'src/http_decoder_stat.cpp')
-rw-r--r--src/http_decoder_stat.cpp99
1 files changed, 99 insertions, 0 deletions
diff --git a/src/http_decoder_stat.cpp b/src/http_decoder_stat.cpp
new file mode 100644
index 0000000..ffa01eb
--- /dev/null
+++ b/src/http_decoder_stat.cpp
@@ -0,0 +1,99 @@
+#include <assert.h>
+#include <stdio.h>
+#include <unistd.h>
+#include "http_decoder_inc.h"
+
+static __thread struct http_decoder_stat _th_stat;
+
+int http_decoder_stat_init(struct http_decoder_context *ctx, int thread_num)
+{
+ ctx->fse = fieldstat_easy_new(thread_num, "http_decoder_statistics", NULL, 0);
+ if (NULL == ctx->fse)
+ {
+ fprintf(stderr, "fieldstat_easy_new failed.");
+ return -1;
+ }
+
+ ctx->fs_incoming_bytes_id =
+ fieldstat_easy_register_counter(ctx->fse, "incoming_bytes");
+ if (ctx->fs_incoming_bytes_id < 0)
+ {
+ fprintf(stderr, "fieldstat_easy_register_counter incoming_bytes failed.");
+ return -1;
+ }
+
+ ctx->fs_incoming_trans_id =
+ fieldstat_easy_register_counter(ctx->fse, "incoming_trans");
+ if (ctx->fs_incoming_trans_id < 0)
+ {
+ fprintf(stderr, "fieldstat_easy_register_counter incoming_trans failed.");
+ return -1;
+ }
+
+ ctx->fs_incoming_pkts_id =
+ fieldstat_easy_register_counter(ctx->fse, "incoming_pkts");
+ if (ctx->fs_incoming_pkts_id < 0)
+ {
+ fprintf(stderr, "fieldstat_easy_register_counter incoming_pkts failed.");
+ return -1;
+ }
+
+ ctx->fs_err_pkts_id = fieldstat_easy_register_counter(ctx->fse, "err_pkts");
+ if (ctx->fs_err_pkts_id < 0)
+ {
+ fprintf(stderr, "fieldstat_easy_register_counter err_pkts failed.");
+ return -1;
+ }
+
+ int stat_output_interval = DEFAULT_STAT_OUTPUT_INTERVAL;
+ if (ctx->hd_cfg.stat_output_interval > 0)
+ {
+ stat_output_interval = ctx->hd_cfg.stat_output_interval;
+ }
+
+ int ret = fieldstat_easy_enable_auto_output(ctx->fse, FILEDSTAT_OUTPUT_FILE,
+ stat_output_interval);
+ if (ret < 0)
+ {
+ fprintf(stderr, "fieldstat_easy_enable_auto_output failed.");
+ return -1;
+ }
+
+ return 0;
+}
+
+void http_decoder_stat_output(struct http_decoder_context *ctx, int thread_id)
+{
+ assert(ctx != NULL);
+
+ int stat_interval_pkts = DEFAULT_STAT_INTERVAL_PKTS;
+ if (ctx->hd_cfg.stat_interval_pkts > 0)
+ {
+ stat_interval_pkts = ctx->hd_cfg.stat_interval_pkts;
+ }
+
+ if (_th_stat.counter >= stat_interval_pkts)
+ {
+ fieldstat_easy_counter_incrby(ctx->fse, thread_id,
+ ctx->fs_incoming_bytes_id, NULL, 0,
+ _th_stat.incoming_bytes);
+
+ fieldstat_easy_counter_incrby(ctx->fse, thread_id,
+ ctx->fs_incoming_pkts_id, NULL, 0,
+ _th_stat.incoming_pkts);
+
+ fieldstat_easy_counter_incrby(ctx->fse, thread_id,
+ ctx->fs_incoming_trans_id, NULL, 0,
+ _th_stat.incoming_trans);
+
+ fieldstat_easy_counter_incrby(ctx->fse, thread_id,
+ ctx->fs_err_pkts_id, NULL, 0,
+ _th_stat.err_pkts);
+
+ _th_stat.counter = 0;
+ _th_stat.err_pkts = 0;
+ _th_stat.incoming_bytes = 0;
+ _th_stat.incoming_pkts = 0;
+ _th_stat.incoming_trans = 0;
+ }
+}