70 lines
1.3 KiB
Go
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()
|
|
}
|
|
}
|