From ab3c503aabb5182ab4ebd720b2a97600af1a5029 Mon Sep 17 00:00:00 2001 From: Wangjunqi123 Date: Thu, 27 Jun 2024 17:48:22 +0800 Subject: [PATCH] server: add interface /log_hostprocess_data and modify resolve procedure of log time axis data --- server/handler/router.go | 3 ++- server/service/cluster/LogTimeAixs.go | 39 +++++++++++++++++++++++---- server/service/cluster/meta.go | 14 ++++++++++ 3 files changed, 50 insertions(+), 6 deletions(-) diff --git a/server/handler/router.go b/server/handler/router.go index cc9f73e..5b51450 100644 --- a/server/handler/router.go +++ b/server/handler/router.go @@ -48,7 +48,8 @@ func InitRouter(router *gin.Engine) { api := router.Group("/plugin/elk/api") { api.POST("/create_policy", CreatePolicyHandle) - api.POST("/log_timeaxis_data", Search_LogTimeAxisDataHandle) + api.POST("/log_clusterhost_timeaxis_data", Search_LogTimeAxisDataHandle) + api.POST("/log_hostprocess_timeaxis_data", Search_LogTimeAxisDataHandle) } timeoutapi := router.Group("/plugin/elk/api") diff --git a/server/service/cluster/LogTimeAixs.go b/server/service/cluster/LogTimeAixs.go index 5dbbf1d..ea0b832 100644 --- a/server/service/cluster/LogTimeAixs.go +++ b/server/service/cluster/LogTimeAixs.go @@ -1,6 +1,8 @@ package cluster import ( + "sort" + "gitee.com/openeuler/PilotGo-plugin-elk/server/elasticClient" "github.com/pkg/errors" "github.com/tidwall/gjson" @@ -16,23 +18,50 @@ func ProcessLogTimeAixsData(index string, querybody map[string]interface{}) ([]m results := []map[string]interface{}{} log_type_datas_map := map[string][][]int64{} time_agg_raw_arr := gjson.GetBytes(search_result_body_bytes, "aggregations.1.buckets").Array() + + empty_timestamp_doccount_map := InitEmptyLogTimeaxisData(time_agg_raw_arr) + + // 遍历查询结果的时间轴数组,获取每个日志类型的时间轴数组 for _, time_agg_data_raw := range time_agg_raw_arr { timestamp := time_agg_data_raw.Get("key").Int() - for _, host_doc_data_raw := range time_agg_data_raw.Get("1-1.buckets").Array() { + for _, type_doc_data_raw := range time_agg_data_raw.Get("1-1.buckets").Array() { time_doc_arr := []int64{} time_doc_arr = append(time_doc_arr, timestamp) - time_doc_arr = append(time_doc_arr, host_doc_data_raw.Get("doc_count").Int()) - log_type_datas_map[host_doc_data_raw.Get("key").String()] = append(log_type_datas_map[host_doc_data_raw.Get("key").String()], time_doc_arr) + time_doc_arr = append(time_doc_arr, type_doc_data_raw.Get("doc_count").Int()) + log_type_datas_map[type_doc_data_raw.Get("key").String()] = append(log_type_datas_map[type_doc_data_raw.Get("key").String()], time_doc_arr) } } - for log_type, log_type_data := range log_type_datas_map { + for log_type, log_type_datas := range log_type_datas_map { + // 补全相对空的日志时间轴数组缺失的时间戳 + for ts, empty_time_doc_arr := range empty_timestamp_doccount_map { + for _, time_doc_arr := range log_type_datas { + if ts == time_doc_arr[0] { + empty_time_doc_arr[1] = time_doc_arr[1] + break + } + } + } + + // 日志时间轴数组按照时间戳升序排序 + ts_arr := []int{} + for ts := range empty_timestamp_doccount_map { + ts_arr = append(ts_arr, int(ts)) + } + sort.Ints(ts_arr) + data := [][]int64{} + for _, ts := range ts_arr { + data = append(data, empty_timestamp_doccount_map[int64(ts)]) + } + results = append(results, map[string]interface{}{ "name": log_type, - "data": log_type_data, + "data": data, }, ) + + empty_timestamp_doccount_map = InitEmptyLogTimeaxisData(time_agg_raw_arr) } return results, nil } diff --git a/server/service/cluster/meta.go b/server/service/cluster/meta.go index 22d5d77..f59383b 100644 --- a/server/service/cluster/meta.go +++ b/server/service/cluster/meta.go @@ -1,2 +1,16 @@ package cluster +import "github.com/tidwall/gjson" + +// 初始化空的日志时间轴数据 +func InitEmptyLogTimeaxisData(time_buckets_raw_arr []gjson.Result) map[int64][]int64 { + empty_timestamp_doccount := map[int64][]int64{} + for _, time_agg_data_raw := range time_buckets_raw_arr { + timestamp := time_agg_data_raw.Get("key").Int() + time_doc_arr := []int64{} + time_doc_arr = append(time_doc_arr, timestamp) + time_doc_arr = append(time_doc_arr, int64(0)) + empty_timestamp_doccount[timestamp] = time_doc_arr + } + return empty_timestamp_doccount +} -- Gitee