diff --git a/server/elasticClient/client.go b/server/elasticClient/client.go index 2c3de8532334f3d42b747bb8ac5fd5d98707d36f..2ec838bbaec92cac39f4a7ab2a33a8943bc1c9f6 100644 --- a/server/elasticClient/client.go +++ b/server/elasticClient/client.go @@ -25,8 +25,8 @@ import ( var Global_elastic *ElasticClient_v7 type ElasticClient_v7 struct { - Client *elastic.Client - Ctx context.Context + Client *elastic.Client + Ctx context.Context } func InitElasticClient() { @@ -66,7 +66,7 @@ func InitElasticClient() { // 在elasticsearch中添加查询模板 func (client *ElasticClient_v7) initSearchTemplate() { for key, value := range template.DSL_template_map { - reqbody := strings.NewReader(value) + reqbody := strings.NewReader(value[0]) _, err := client.Client.PutScript( key, reqbody, diff --git a/server/handler/router.go b/server/handler/router.go index 5b514504a22da876594d85f0c509948234d3c849..0a1e8af9fcf34dae72724ef9f8135e6e30f14f4a 100644 --- a/server/handler/router.go +++ b/server/handler/router.go @@ -48,8 +48,10 @@ func InitRouter(router *gin.Engine) { api := router.Group("/plugin/elk/api") { api.POST("/create_policy", CreatePolicyHandle) - api.POST("/log_clusterhost_timeaxis_data", Search_LogTimeAxisDataHandle) - api.POST("/log_hostprocess_timeaxis_data", Search_LogTimeAxisDataHandle) + + api.POST("/log_clusterhost_timeaxis_data", SearchByTemplateHandle) + api.POST("/log_hostprocess_timeaxis_data", SearchByTemplateHandle) + api.POST("/log_stream_data", SearchByTemplateHandle) } timeoutapi := router.Group("/plugin/elk/api") diff --git a/server/handler/searchHandle.go b/server/handler/searchHandle.go index 6045094669ceadd5082ffd443b5a5d58c42c9ab6..53ee5ba4df0e07b70e4667931198ad84137cb68a 100644 --- a/server/handler/searchHandle.go +++ b/server/handler/searchHandle.go @@ -11,13 +11,13 @@ import ( "gitee.com/openeuler/PilotGo-plugin-elk/server/errormanager" "gitee.com/openeuler/PilotGo-plugin-elk/server/global" "gitee.com/openeuler/PilotGo-plugin-elk/server/pluginclient" - "gitee.com/openeuler/PilotGo-plugin-elk/server/service/cluster" + "gitee.com/openeuler/PilotGo-plugin-elk/server/service" "gitee.com/openeuler/PilotGo/sdk/response" "github.com/gin-gonic/gin" ) // 查询日志时间轴相关数据 -func Search_LogTimeAxisDataHandle(ctx *gin.Context) { +func SearchByTemplateHandle(ctx *gin.Context) { if elasticClient.Global_elastic.Client == nil { err := errors.New("global_elastic is null **warn**0") // err top errormanager.ErrorTransmit(pluginclient.Global_Context, err, false) @@ -48,7 +48,7 @@ func Search_LogTimeAxisDataHandle(ctx *gin.Context) { } params[k] = v } - + // TODO: 判断索引 index := "logs-*" @@ -56,7 +56,7 @@ func Search_LogTimeAxisDataHandle(ctx *gin.Context) { "id": req_body.Id, "params": params, } - data, err := cluster.ProcessLogTimeAixsData(index, query_body) + data, err := service.TemplateHandleFuncMap[query_body["id"].(string)](index, query_body) if err != nil { wrapError(ctx, err) return diff --git a/server/service/cluster/LogStream.go b/server/service/cluster/LogStream.go index 494b718b85ae49a2dc1ea5d4f1cc3564126e98ed..b239fb06b3657824984fdeb12a7c880fb632ba9d 100644 --- a/server/service/cluster/LogStream.go +++ b/server/service/cluster/LogStream.go @@ -1 +1,41 @@ -package cluster \ No newline at end of file +package cluster + +import ( + "encoding/json" + + "gitee.com/openeuler/PilotGo-plugin-elk/server/elasticClient" + "github.com/pkg/errors" + "github.com/tidwall/gjson" +) + +func ProcessLogStreamData(index string, querybody map[string]interface{}) (interface{}, error) { + search_result_body_bytes, err := elasticClient.Global_elastic.SearchByTemplate(index, querybody) + if err != nil { + err = errors.Wrap(err, "fail to process log timeaxis data") + return nil, err + } + + data := map[string]interface{}{} + returned_logs := []map[string]interface{}{} + hits_raw_arr := gjson.GetBytes(search_result_body_bytes, "hits.hits").Array() + for _, hit_raw := range hits_raw_arr { + hit_map := map[string][]interface{}{} + json.Unmarshal([]byte(hit_raw.Get("fields").Raw), &hit_map) + + log := map[string]interface{}{} + log["date"] = hit_map["@timestamp"][0].(string) + if hit_map["log.level"] != nil { + log["level"] = hit_map["log.level"][0].(string) + } else { + log["level"] = "" + } + log["processname"] = hit_map["process.name"][0].(string) + log["message"] = hit_map["message"][0].(string) + + returned_logs = append(returned_logs, log) + } + + data["total"] = gjson.GetBytes(search_result_body_bytes, "hits.total.value").Int() + data["hits"] = returned_logs + return data, nil +} diff --git a/server/service/cluster/LogTimeAixs.go b/server/service/cluster/LogTimeAixs.go index ea0b832304fd1eca0f58c5b7dc23668b28791c78..169b4c870211d2d880e560ace2bf8170ea108ad3 100644 --- a/server/service/cluster/LogTimeAixs.go +++ b/server/service/cluster/LogTimeAixs.go @@ -8,7 +8,7 @@ import ( "github.com/tidwall/gjson" ) -func ProcessLogTimeAixsData(index string, querybody map[string]interface{}) ([]map[string]interface{}, error) { +func ProcessLogTimeAixsData(index string, querybody map[string]interface{}) (interface{}, error) { search_result_body_bytes, err := elasticClient.Global_elastic.SearchByTemplate(index, querybody) if err != nil { err = errors.Wrap(err, "fail to process log timeaxis data") diff --git a/server/service/meta.go b/server/service/meta.go new file mode 100644 index 0000000000000000000000000000000000000000..10fffed9f2075f85c7fff3505c3b5a803bc3aa64 --- /dev/null +++ b/server/service/meta.go @@ -0,0 +1,22 @@ +package service + +import ( + "gitee.com/openeuler/PilotGo-plugin-elk/server/global/template" + "gitee.com/openeuler/PilotGo-plugin-elk/server/service/cluster" +) + +type SearchTemplateFunc func(string, map[string]interface{}) (interface{}, error) + +var TemplateHandleFuncMap map[string]SearchTemplateFunc + +func init() { + TemplateHandleFuncMap = make(map[string]SearchTemplateFunc) + for template_id, content := range template.DSL_template_map { + switch content[1] { + case "ProcessLogTimeAixsData": + TemplateHandleFuncMap[template_id] = cluster.ProcessLogTimeAixsData + case "ProcessLogStreamData": + TemplateHandleFuncMap[template_id] = cluster.ProcessLogStreamData + } + } +}