You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
146 lines
4.4 KiB
146 lines
4.4 KiB
package service |
|
|
|
import ( |
|
"context" |
|
"fmt" |
|
"strconv" |
|
"strings" |
|
"time" |
|
|
|
"go-common/app/admin/main/search/dao" |
|
"go-common/app/admin/main/search/model" |
|
"go-common/library/log" |
|
) |
|
|
|
func (s *Service) loadQueryConfproc() { |
|
for { |
|
if err := s.loadQueryConf(); err != nil { |
|
time.Sleep(time.Second) |
|
continue |
|
} |
|
time.Sleep(time.Minute) |
|
} |
|
} |
|
|
|
func (s *Service) loadQueryConf() (err error) { |
|
confs, err := s.dao.QueryConf(context.Background()) |
|
if err != nil { |
|
return |
|
} |
|
if len(confs) > 0 { |
|
s.queryConf = confs |
|
} |
|
return |
|
} |
|
|
|
// CheckQueryConf check query conf |
|
func (s *Service) CheckQueryConf(c context.Context, sp *model.QueryParams) (err error) { |
|
app, ok := s.queryConf[sp.Business] |
|
if app2, ok2 := model.QueryConf[sp.Business]; ok2 { |
|
app = app2 |
|
ok = true |
|
} |
|
if !ok { |
|
err = fmt.Errorf("sp.Business(%s) not exist in queryConf", sp.Business) |
|
return |
|
} |
|
if app.ESCluster == "" { |
|
err = fmt.Errorf("app(%+v) escluster is empty", app) |
|
return |
|
} |
|
max := 1 |
|
if app.MaxIndicesNum > 0 { |
|
max = app.MaxIndicesNum |
|
} |
|
indecies := strings.Split(sp.QueryBody.From, ",") |
|
if len(indecies) == 0 { |
|
err = fmt.Errorf("index name is required") |
|
return |
|
} |
|
if len(indecies) > max { |
|
err = fmt.Errorf("too many indecies(%v)", indecies) |
|
return |
|
} |
|
for _, index := range indecies { |
|
if !strings.Contains(index, app.IndexPrefix) { |
|
err = fmt.Errorf("invalid index name(%s)", index) |
|
return |
|
} |
|
} |
|
sp.AppIDConf = app |
|
return |
|
} |
|
|
|
// QueryBasic . |
|
func (s *Service) QueryBasic(c context.Context, sp *model.QueryParams) (res *model.QueryResult, debug *model.QueryDebugResult, err error) { |
|
switch sp.Business { |
|
case "log_audit": |
|
t := strings.Split(sp.QueryBody.From, "_") |
|
if len(t) > 2 { |
|
logID, err := strconv.Atoi(t[2]) |
|
if err != nil { |
|
log.Error("strconv.Atoi(%s) error(%v)", t[2], err) |
|
} |
|
logBusiness, ok := s.dao.GetLogInfo(sp.Business, logID) |
|
if ok { |
|
sp.AppIDConf.ESCluster = logBusiness.IndexCluster |
|
} |
|
} |
|
case "log_user_action": |
|
t := strings.Split(sp.QueryBody.From, "_") |
|
if len(t) > 3 { |
|
logID, err := strconv.Atoi(t[3]) |
|
if err != nil { |
|
log.Error("strconv.Atoi(%s) error(%v)", t[3], err) |
|
} |
|
logBusiness, ok := s.dao.GetLogInfo(sp.Business, logID) |
|
if ok { |
|
sp.AppIDConf.ESCluster = logBusiness.IndexCluster |
|
} |
|
} |
|
} |
|
bQuery, qbDebug := s.dao.QueryBasic(c, sp) |
|
if res, debug, err = s.dao.QueryResult(c, bQuery, sp, qbDebug); err != nil { |
|
dao.PromError(fmt.Sprintf("es:%s 搜索失败", sp.Business), "s.dao.QueryBasic(%v) error(%v)", sp, err) |
|
} |
|
return |
|
} |
|
|
|
// QueryExtra . |
|
func (s *Service) QueryExtra(c context.Context, sp *model.QueryParams) (res *model.QueryResult, debug *model.QueryDebugResult, err error) { |
|
switch sp.Business { |
|
case "archive_video_score": |
|
if res, debug, err = s.dao.ArchiveVideoScore(c, sp); err != nil { |
|
dao.PromError(fmt.Sprintf("es:%s 搜索失败", sp.Business), "s.dao.QueryExtra(%v) error(%v)", sp, err) |
|
} |
|
case "archive_score": |
|
if res, debug, err = s.dao.ArchiveScore(c, sp); err != nil { |
|
dao.PromError(fmt.Sprintf("es:%s 搜索失败", sp.Business), "s.dao.QueryExtra(%v) error(%v)", sp, err) |
|
} |
|
case "task_qa_random": |
|
if res, debug, err = s.dao.TaskQaRandom(c, sp); err != nil { |
|
dao.PromError(fmt.Sprintf("es:%s 搜索失败", sp.Business), "s.dao.QueryExtra.TaskQaRandom(%v) error(%v)", sp, err) |
|
} |
|
case "esports_contests_date": |
|
if res, debug, err = s.dao.EsportsContestsDate(c, sp); err != nil { |
|
dao.PromError(fmt.Sprintf("es:%s 搜索失败", sp.Business), "s.dao.QueryExtra.EsportsContestsDate(%v) error(%v)", sp, err) |
|
} |
|
case "creative_archive_search": |
|
if res, debug, err = s.dao.CreativeArchiveSearch(c, sp); err != nil { |
|
dao.PromError(fmt.Sprintf("es:%s 搜索失败", sp.Business), "s.dao.QueryExtra.CreativeArchiveSearch(%v) error(%v)", sp, err) |
|
} |
|
case "creative_archive_staff": |
|
if res, debug, err = s.dao.CreativeArchiveStaff(c, sp); err != nil { |
|
dao.PromError(fmt.Sprintf("es:%s 搜索失败", sp.Business), "s.dao.QueryExtra.CreativeArchiveStaff(%v) error(%v)", sp, err) |
|
} |
|
case "creative_archive_apply": |
|
if res, debug, err = s.dao.CreativeArchiveApply(c, sp); err != nil { |
|
dao.PromError(fmt.Sprintf("es:%s 搜索失败", sp.Business), "s.dao.QueryExtra.CreativeArchiveApply(%v) error(%v)", sp, err) |
|
} |
|
case "dm_history": |
|
if res, debug, err = s.dao.Scroll(c, sp); err != nil { |
|
dao.PromError(fmt.Sprintf("es:%s 搜索失败", sp.Business), "s.dao.QueryExtra.Scroll(%v) error(%v)", sp, err) |
|
} |
|
} |
|
return |
|
}
|
|
|