2024-12-19 15:03:36 +08:00

70 lines
1.3 KiB
Go

/*
analysis:
对访问 es 的 api 做一个初步的分类:
- 是不是一次 client 的请求
- 操作的 indixes 是哪些
- 使用的对应的 es 的 api 是哪个?
*/
package analysis
import (
"strings"
"esway/internal/log"
"esway/internal/model"
"esway/internal/opt"
"github.com/loveuer/nf"
"github.com/samber/lo"
)
const LocalKey = "es"
func New() nf.HandlerFunc {
return func(c *nf.Ctx) error {
local := &model.ESReqRes{
ClientRequest: false,
Path: c.Path(),
Method: c.Method(),
Indixes: []string{},
Api: model.ESApiUnknown,
}
defer func() {
c.Locals(LocalKey, local)
if opt.Cfg.Debug {
log.Debug(c.Context(), "middleware.analysis: local = %#v", *local)
}
}()
if len(local.Path) == 0 || strings.HasPrefix(local.Path, "/_") || strings.HasPrefix(local.Method, "/.") {
return c.Next()
}
paths := strings.Split(local.Path[1:], "/")
local.ClientRequest = true
local.Indixes = lo.FilterMap(
strings.Split(paths[0], ","),
func(item string, idx int) (string, bool) {
val := strings.TrimSpace(item)
return val, val != ""
},
)
if len(paths) < 2 {
return c.Next()
}
switch paths[1] {
case "_doc":
case "_search":
case "_update":
case "_update_by_query":
}
return c.Next()
}
}