summaryrefslogtreecommitdiff
path: root/plugin/business/doh/src/doh.cpp
diff options
context:
space:
mode:
authorfengweihao <[email protected]>2023-05-10 17:51:57 +0800
committerfengweihao <[email protected]>2023-05-10 17:51:57 +0800
commit2a55a2be7504a39dd19b4ea2ff2f73c4a0be35f2 (patch)
treeaabf3c11720cb382f576c0e9dc983d1b15773b21 /plugin/business/doh/src/doh.cpp
parent542f4cbdfa6f58dd8a07e35663116a08f54170bd (diff)
bugfix:修复管控策略Policy Hits Metrics误发送pinning_status,根据route_dir发送字节数
Diffstat (limited to 'plugin/business/doh/src/doh.cpp')
-rw-r--r--plugin/business/doh/src/doh.cpp33
1 files changed, 30 insertions, 3 deletions
diff --git a/plugin/business/doh/src/doh.cpp b/plugin/business/doh/src/doh.cpp
index 3cde45e..9ba291d 100644
--- a/plugin/business/doh/src/doh.cpp
+++ b/plugin/business/doh/src/doh.cpp
@@ -869,9 +869,36 @@ void doh_send_metric_log(const struct tfe_stream * stream, struct doh_ctx *ctx,
tfe_stream_info_get(stream, INFO_FROM_DOWNSTREAM_RX_OFFSET, &c2s_byte_num, sizeof(c2s_byte_num));
tfe_stream_info_get(stream, INFO_FROM_UPSTREAM_RX_OFFSET, &s2c_byte_num, sizeof(s2c_byte_num));
- tfe_fieldstat_metric_incrby(fieldstat, fieldstat->column_array[COLUMN_HIT_COUNT], 1, fieldstat->tags[thread_id], thread_id);
- tfe_fieldstat_metric_incrby(fieldstat, fieldstat->column_array[COLUMN_IN_BYTES], c2s_byte_num, fieldstat->tags[thread_id], thread_id);
- tfe_fieldstat_metric_incrby(fieldstat, fieldstat->column_array[COLUMN_OUT_BYTES], s2c_byte_num, fieldstat->tags[thread_id], thread_id);
+
+ uint16_t out_size;
+ unsigned int route_dir; int ret=0;
+ int in_bytes = 0, out_bytes = 0;
+
+ struct tfe_cmsg *cmsg = tfe_stream_get0_cmsg(stream);
+ if (cmsg != NULL)
+ {
+ ret = tfe_cmsg_get_value(cmsg, TFE_CMSG_COMMON_DIRECTION, (unsigned char *)&route_dir, sizeof(route_dir), &out_size);
+ if (ret != 0)
+ {
+ TFE_LOG_ERROR(g_doh_conf->local_logger, "failed at fetch route_dir from cmsg: %s", strerror(-ret));
+ return;
+ }
+ }
+ int dir_is_e2i=(route_dir==69) ? 0 : 1;
+ if (dir_is_e2i == 1)
+ {
+ in_bytes = c2s_byte_num;
+ out_bytes = s2c_byte_num;
+ }
+ else
+ {
+ in_bytes = s2c_byte_num;
+ out_bytes = c2s_byte_num;
+ }
+
+ tfe_fieldstat_metric_incrby(fieldstat, fieldstat->column_array[COLUMN_HIT_COUNT], 1, fieldstat->tags[thread_id], TAG_MAX - 1, thread_id);
+ tfe_fieldstat_metric_incrby(fieldstat, fieldstat->column_array[COLUMN_IN_BYTES], in_bytes, fieldstat->tags[thread_id], TAG_MAX - 1, thread_id);
+ tfe_fieldstat_metric_incrby(fieldstat, fieldstat->column_array[COLUMN_OUT_BYTES], out_bytes, fieldstat->tags[thread_id], TAG_MAX - 1, thread_id);
return;
}