Initial commit

This commit is contained in:
Donny
2019-04-22 20:46:32 +08:00
commit 49ab8aadd1
25441 changed files with 4055000 additions and 0 deletions

View File

@@ -0,0 +1,48 @@
load(
"@io_bazel_rules_go//go:def.bzl",
"go_library",
)
package(default_visibility = ["//visibility:public"])
filegroup(
name = "package-srcs",
srcs = glob(["**"]),
tags = ["automanaged"],
visibility = ["//visibility:private"],
)
filegroup(
name = "all-srcs",
srcs = [":package-srcs"],
tags = ["automanaged"],
visibility = ["//visibility:public"],
)
go_library(
name = "go_default_library",
srcs = [
"archive.go",
"archive_update.go",
"copyright.go",
"http.go",
"log.go",
"log_delete.go",
"mng.go",
"mng_v2.go",
"query.go",
"upsert.go",
],
importpath = "go-common/app/admin/main/search/http",
tags = ["automanaged"],
deps = [
"//app/admin/main/search/conf:go_default_library",
"//app/admin/main/search/dao:go_default_library",
"//app/admin/main/search/model:go_default_library",
"//app/admin/main/search/service:go_default_library",
"//library/ecode:go_default_library",
"//library/log:go_default_library",
"//library/net/http/blademaster:go_default_library",
"//library/net/http/blademaster/middleware/permit:go_default_library",
],
)

View File

@@ -0,0 +1,145 @@
package http
import (
"strings"
"go-common/app/admin/main/search/model"
"go-common/library/ecode"
"go-common/library/log"
bm "go-common/library/net/http/blademaster"
)
func archiveSearch(c *bm.Context) {
form := c.Request.Form
appidStr := form.Get("appid")
switch appidStr {
case "archive_check":
archiveCheck(c)
case "video":
video(c)
case "task_qa":
taskQa(c)
case "archive_commerce":
archiveCommerce(c)
default:
c.JSON(nil, ecode.RequestErr)
return
}
}
func archiveCheck(c *bm.Context) {
var (
err error
sp = &model.ArchiveCheckParams{
Bsp: &model.BasicSearchParams{},
}
form = c.Request.Form
)
if err = c.Bind(sp); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
if err = c.Bind(sp.Bsp); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
orderStr := form.Get("order")
if len(sp.Bsp.Order) == 1 && sp.Bsp.Order[0] == "" {
sp.Bsp.Order = nil
}
if orderStr != "" {
sp.Bsp.Order = strings.Split(orderStr, ",")
}
kwFieldsStr := form.Get("kw_fields")
if kwFieldsStr == "" {
sp.Bsp.KwFields = []string{"title", "content", "tag", "author"}
} else {
sp.Bsp.KwFields = strings.Split(kwFieldsStr, ",")
}
res, err := svr.ArchiveCheck(c, sp)
if err != nil {
log.Error("svr.ArchiveCheck(%v) error(%v)", sp, err)
c.JSON(nil, err)
return
}
c.JSON(res, err)
}
func video(c *bm.Context) {
var (
err error
sp = &model.VideoParams{
Bsp: &model.BasicSearchParams{},
}
form = c.Request.Form
)
if err = c.Bind(sp); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
if err = c.Bind(sp.Bsp); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
if form.Get("order_type") == "" {
sp.OrderType = -1
}
if form.Get("kw_fields") == "" {
sp.Bsp.KwFields = []string{"arc_title", "arc_author"}
}
res, err := svr.Video(c, sp)
if err != nil {
log.Error("svr.ArchiveCheck(%v) error(%v)", sp, err)
c.JSON(nil, err)
return
}
c.JSON(res, err)
}
func taskQa(c *bm.Context) {
var (
err error
sp = &model.TaskQa{
Bsp: &model.BasicSearchParams{},
}
)
if err = c.Bind(sp); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
if err = c.Bind(sp.Bsp); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
res, err := svr.TaskQa(c, sp)
if err != nil {
log.Error("svr.TaskQa(%v) error(%v)", sp, err)
c.JSON(nil, err)
return
}
c.JSON(res, err)
}
func archiveCommerce(c *bm.Context) {
var (
err error
sp = &model.ArchiveCommerce{
Bsp: &model.BasicSearchParams{},
}
)
if err = c.Bind(sp); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
if err = c.Bind(sp.Bsp); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
res, err := svr.ArchiveCommerce(c, sp)
if err != nil {
log.Error("svr.ArchiveCommerce(%v) error(%v)", sp, err)
c.JSON(nil, err)
return
}
c.JSON(res, err)
}

View File

@@ -0,0 +1,50 @@
package http
import (
"encoding/json"
"go-common/app/admin/main/search/dao"
"go-common/app/admin/main/search/model"
"go-common/library/ecode"
"go-common/library/log"
bm "go-common/library/net/http/blademaster"
)
// updateBlocked .
func updateArchive(c *bm.Context) {
form := c.Request.Form
appid := form.Get("appid")
switch appid {
case "task_qa_fans":
updateTaskQaFans(c)
default:
c.JSON(nil, ecode.RequestErr)
}
}
func updateTaskQaFans(c *bm.Context) {
var (
err error
bulkItem []dao.BulkItem
d []*model.TaskQaFansParams
form = c.Request.Form
)
data := form.Get("data")
if data == "" {
c.JSON(nil, ecode.RequestErr)
return
}
if err = json.Unmarshal([]byte(data), &d); err != nil {
log.Error("json.Unmarshal error(%v)", err)
c.JSON(nil, err)
return
}
for _, v := range d {
bulkItem = append(bulkItem, v)
}
if err = svr.Update(c, "ssd_archive", bulkItem); err != nil {
log.Error("srv.Update error(%v)", err)
}
c.JSON(nil, err)
}

View File

@@ -0,0 +1,36 @@
package http
import (
"encoding/json"
"go-common/app/admin/main/search/dao"
"go-common/app/admin/main/search/model"
"go-common/library/ecode"
"go-common/library/log"
bm "go-common/library/net/http/blademaster"
)
func copyRight(c *bm.Context) {
var (
err error
bulkItem []dao.BulkItem
d []*model.CopyRight
form = c.Request.Form
)
data := form.Get("data")
if data == "" {
c.JSON(nil, ecode.RequestErr)
return
}
if err = json.Unmarshal([]byte(data), &d); err != nil {
log.Error("json.Unmarshal error(%v)", err)
c.JSON(nil, ecode.RequestErr)
return
}
for _, v := range d {
bulkItem = append(bulkItem, v)
}
if err = svr.Index(c, "internalPublic", bulkItem); err != nil {
log.Error("srv.Index error(%v)", err)
}
c.JSON(nil, err)
}

View File

@@ -0,0 +1,103 @@
package http
import (
"net/http"
"go-common/app/admin/main/search/conf"
"go-common/app/admin/main/search/service"
"go-common/library/log"
bm "go-common/library/net/http/blademaster"
"go-common/library/net/http/blademaster/middleware/permit"
)
var (
authSrv *permit.Permit
svr *service.Service
)
// Init init http
func Init(c *conf.Config, s *service.Service) {
svr = s
authSrv = permit.New(c.Auth)
engine := bm.DefaultServer(c.BM)
route(engine)
if err := engine.Start(); err != nil {
log.Error("engine.Start error(%v)", err)
panic(err)
}
}
func route(e *bm.Engine) {
e.Ping(ping)
searchG := e.Group("/x/admin/search")
{
// V3新版查询和更新接口
searchG.GET("/query", querySearch)
searchG.GET("/query/debug", queryDebug)
searchG.POST("/upsert", upsert)
// V2老接口
searchG.GET("/archive", archiveSearch)
searchG.GET("/log", logSearch)
searchG.POST("/log/delete", logDelete)
searchG.GET("/log/audit", bMlogAudit)
searchG.GET("/log/audit_group", bMlogAuditGroupBy)
searchG.GET("/log/user_action", bMlogUserAction)
// update (deprecated)
searchG.POST("/archive/update", updateArchive)
// index insert (deprecated)
searchG.POST("/copyright/index", copyRight)
// sven
mng := searchG.Group("/mng")
{
mng.GET("/business/list", businessList)
mng.GET("/business/all", businessAll)
mng.GET("/business/info", businessInfo)
mng.POST("/business/add", addBusiness)
mng.POST("/business/update", updateBusiness)
mng.POST("/business/update_app", updateBusinessApp)
mng.GET("/asset/list", assetList)
mng.GET("/asset/all", assetAll)
mng.GET("/asset/info", assetInfo)
mng.POST("/asset/add", addAsset)
mng.POST("/asset/update", updateAsset)
mng.GET("/app/list", appList)
mng.GET("/app/info", appInfo)
mng.POST("/app/add", addApp)
mng.POST("/app/update", updateApp)
mng.GET("/countlist", countlist)
mng.GET("/count", count)
mng.GET("/percent", percent)
}
// sven v2
mng2 := searchG.Group("/mng/v2")
{
mng2.GET("/business/all", businessAllV2)
mng2.GET("/business/info", businessInfoV2)
mng2.POST("/business/add", businessAdd)
mng2.POST("/business/update", businessUpdate)
mng2.GET("/asset/list", assetDBTables)
mng2.GET("/asset/info", assetInfoV2)
mng2.GET("/asset/dbconnect", assetDBConnect)
mng2.POST("/asset/dbadd", assetDBAdd)
mng2.POST("/asset/tableadd", assetTableAdd)
mng2.POST("/asset/tableupdate", updateAssetTable)
mng2.GET("/asset/showtables", assetShowTables)
mng2.GET("/asset/tablefields", assetTableFields)
mng2.GET("/cluster/owners", clusterOwners)
}
}
}
// ping check health
func ping(ctx *bm.Context) {
if err := svr.Ping(ctx); err != nil {
ctx.Error = err
ctx.AbortWithStatus(http.StatusServiceUnavailable)
}
}

View File

@@ -0,0 +1,215 @@
package http
import (
"context"
"go-common/app/admin/main/search/model"
"go-common/library/ecode"
"go-common/library/log"
bm "go-common/library/net/http/blademaster"
)
func logSearch(c *bm.Context) {
form := c.Request.Form
appidStr := form.Get("appid")
switch appidStr {
case "log_audit":
logAudit(c)
case "log_audit_group":
logAuditGroupBy(c)
case "log_user_action":
logUserAction(c)
default:
c.JSON(nil, ecode.RequestErr)
}
}
func bAuth(c *bm.Context, appID string, businessID int) bool {
if business, ok := svr.Check(appID, businessID); ok && business.PermissionPoint != "" {
authSrv.Permit(business.PermissionPoint)(c)
return !c.IsAborted()
}
c.JSON(nil, ecode.AccessDenied)
c.Abort()
return false
}
func logAudit(c *bm.Context) {
var (
err error
sp = &model.LogParams{
Bsp: &model.BasicSearchParams{},
}
)
if err = c.Bind(sp); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
if err = c.Bind(sp.Bsp); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
business, ok := svr.Check("log_audit", sp.Business)
if !ok {
c.JSON(nil, ecode.RequestErr)
return
}
res, err := svr.LogAudit(c, c.Request.Form, sp, business)
if err != nil {
log.Error("srv.LogAudit(%v) error(%v)", sp, err)
c.JSON(nil, err)
return
}
c.JSON(res, err)
}
func logAuditGroupBy(c *bm.Context) {
var (
err error
sp = &model.LogParams{
Bsp: &model.BasicSearchParams{},
}
)
if err = c.Bind(sp); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
if err = c.Bind(sp.Bsp); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
business, ok := svr.Check("log_audit", sp.Business)
if !ok {
c.JSON(nil, ecode.RequestErr)
return
}
res, err := svr.LogAuditGroupBy(c, c.Request.Form, sp, business)
if err != nil {
log.Error("srv.LogAuditGroupBy(%v) error(%v)", sp, err)
c.JSON(nil, err)
return
}
c.JSON(res, err)
}
func logUserAction(c *bm.Context) {
var (
err error
sp = &model.LogParams{
Bsp: &model.BasicSearchParams{},
}
)
if err = c.Bind(sp); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
if err = c.Bind(sp.Bsp); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
business, ok := svr.Check("log_user_action", sp.Business)
if !ok {
c.JSON(nil, ecode.RequestErr)
return
}
res, err := svr.LogUserAction(c, c.Request.Form, sp, business)
if err != nil {
log.Error("srv.LogUserAction(%v) error(%v)", sp, err)
c.JSON(nil, err)
return
}
c.JSON(res, err)
}
func bMlogAudit(c *bm.Context) {
var (
err error
sp = &model.LogParams{
Bsp: &model.BasicSearchParams{},
}
)
if err = c.Bind(sp); err != nil {
return
}
if err = c.Bind(sp.Bsp); err != nil {
return
}
if !bAuth(c, "log_audit", sp.Business) {
return
}
business, ok := svr.Check("log_audit", sp.Business)
if !ok {
c.JSON(nil, ecode.RequestErr)
return
}
if uid, ok := c.Get("uid"); ok {
go svr.LogCount(context.Background(), "log_audit", sp.Business, uid)
}
res, err := svr.LogAudit(c, c.Request.Form, sp, business)
if err != nil {
log.Error("srv.bMlogAudit(%v) error(%v)", sp, err)
return
}
c.JSON(res, err)
}
func bMlogAuditGroupBy(c *bm.Context) {
var (
err error
sp = &model.LogParams{
Bsp: &model.BasicSearchParams{},
}
)
if err = c.Bind(sp); err != nil {
return
}
if err = c.Bind(sp.Bsp); err != nil {
return
}
if !bAuth(c, "log_audit", sp.Business) {
return
}
business, ok := svr.Check("log_audit", sp.Business)
if !ok {
c.JSON(nil, ecode.RequestErr)
return
}
res, err := svr.LogAuditGroupBy(c, c.Request.Form, sp, business)
if err != nil {
log.Error("srv.bMlogAuditGroupBy(%v) error(%v)", sp, err)
return
}
c.JSON(res, err)
}
func bMlogUserAction(c *bm.Context) {
var (
err error
sp = &model.LogParams{
Bsp: &model.BasicSearchParams{},
}
)
if err = c.Bind(sp); err != nil {
return
}
if err = c.Bind(sp.Bsp); err != nil {
return
}
if !bAuth(c, "log_user_action", sp.Business) {
return
}
business, ok := svr.Check("log_user_action", sp.Business)
if !ok {
c.JSON(nil, ecode.RequestErr)
return
}
if uid, ok := c.Get("uid"); ok {
go svr.LogCount(context.Background(), "log_user_action", sp.Business, uid)
}
res, err := svr.LogUserAction(c, c.Request.Form, sp, business)
if err != nil {
log.Error("srv.bMlogUserAction(%v) error(%v)", sp, err)
return
}
c.JSON(res, err)
}

View File

@@ -0,0 +1,79 @@
package http
import (
"go-common/app/admin/main/search/model"
"go-common/library/ecode"
"go-common/library/log"
bm "go-common/library/net/http/blademaster"
)
func logDelete(c *bm.Context) {
form := c.Request.Form
appidStr := form.Get("appid")
switch appidStr {
case "log_audit":
logAuditDelete(c)
case "log_user_action":
logUserActionDelete(c)
default:
c.JSON(nil, ecode.RequestErr)
}
}
func logAuditDelete(c *bm.Context) {
var (
err error
sp = &model.LogParams{
Bsp: &model.BasicSearchParams{},
}
)
if err = c.Bind(sp); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
if err = c.Bind(sp.Bsp); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
business, ok := svr.Check("log_audit", sp.Business)
if !ok {
c.JSON(nil, ecode.RequestErr)
return
}
res, err := svr.LogAuditDelete(c, c.Request.Form, sp, business)
if err != nil {
log.Error("srv.LogAuditDelete(%v) error(%v)", sp, err)
c.JSON(nil, err)
return
}
c.JSON(res, err)
}
func logUserActionDelete(c *bm.Context) {
var (
err error
sp = &model.LogParams{
Bsp: &model.BasicSearchParams{},
}
)
if err = c.Bind(sp); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
if err = c.Bind(sp.Bsp); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
business, ok := svr.Check("log_user_action", sp.Business)
if !ok {
c.JSON(nil, ecode.RequestErr)
return
}
res, err := svr.LogUserActionDelete(c, c.Request.Form, sp, business)
if err != nil {
log.Error("srv.logUserActionDelete(%v) error(%v)", sp, err)
c.JSON(nil, err)
return
}
c.JSON(res, err)
}

View File

@@ -0,0 +1,166 @@
package http
import (
"go-common/app/admin/main/search/model"
bm "go-common/library/net/http/blademaster"
)
func businessList(ctx *bm.Context) {
p := &model.ParamMngBusiness{}
if err := ctx.Bind(p); err != nil {
return
}
list, total, err := svr.BusinessList(ctx, p.Name, p.Pn, p.Ps)
if err != nil {
ctx.JSON(nil, err)
return
}
data := make(map[string]interface{}, 2)
data["list"] = list
data["page"] = &model.Page{
Pn: p.Pn,
Ps: p.Ps,
Total: total,
}
ctx.JSON(data, nil)
}
func businessAll(ctx *bm.Context) {
ctx.JSON(svr.BusinessAll(ctx))
}
func businessInfo(ctx *bm.Context) {
p := &model.ParamMngBusiness{}
if err := ctx.Bind(p); err != nil {
return
}
ctx.JSON(svr.BusinessInfo(ctx, p.ID))
}
func addBusiness(ctx *bm.Context) {
p := &model.ParamMngBusiness{}
if err := ctx.Bind(p); err != nil {
return
}
b := &model.MngBusiness{Name: p.Name, Desc: p.Desc, AppsJSON: "[]"}
ctx.JSON(svr.AddBusiness(ctx, b))
}
func updateBusiness(ctx *bm.Context) {
p := &model.ParamMngBusiness{}
if err := ctx.Bind(p); err != nil {
return
}
b := &model.MngBusiness{ID: p.ID, Name: p.Name, Desc: p.Desc, AppsJSON: p.Apps}
ctx.JSON(nil, svr.UpdateBusiness(ctx, b))
}
func updateBusinessApp(ctx *bm.Context) {
p := &model.ParamMngBusinessApp{}
if err := ctx.Bind(p); err != nil {
return
}
ctx.JSON(nil, svr.UpdateBusinessApp(ctx, p.Business, p.App, p.IncrWay, p.IsJob, p.IncrOpen))
}
func assetList(ctx *bm.Context) {
p := &model.ParamMngAsset{}
if err := ctx.Bind(p); err != nil {
return
}
list, total, err := svr.AssetList(ctx, p.Type, p.Name, p.Pn, p.Ps)
if err != nil {
ctx.JSON(nil, err)
return
}
data := make(map[string]interface{}, 2)
data["list"] = list
data["page"] = &model.Page{
Pn: p.Pn,
Ps: p.Ps,
Total: total,
}
ctx.JSON(data, nil)
}
func assetAll(ctx *bm.Context) {
ctx.JSON(svr.AssetAll(ctx))
}
func assetInfo(ctx *bm.Context) {
p := &model.ParamMngAsset{}
if err := ctx.Bind(p); err != nil {
return
}
ctx.JSON(svr.AssetInfo(ctx, p.ID))
}
func addAsset(ctx *bm.Context) {
p := &model.ParamMngAsset{}
if err := ctx.Bind(p); err != nil {
return
}
a := &model.MngAsset{Name: p.Name, Type: p.Type, Config: p.Config, Desc: p.Desc}
ctx.JSON(svr.AddAsset(ctx, a))
}
func updateAsset(ctx *bm.Context) {
p := &model.ParamMngAsset{}
if err := ctx.Bind(p); err != nil {
return
}
a := &model.MngAsset{ID: p.ID, Name: p.Name, Type: p.Type, Config: p.Config, Desc: p.Desc}
ctx.JSON(nil, svr.UpdateAsset(ctx, a))
}
func appList(ctx *bm.Context) {
p := &model.MngApp{}
if err := ctx.Bind(p); err != nil {
return
}
ctx.JSON(svr.AppList(ctx, p.Business))
}
func appInfo(ctx *bm.Context) {
p := &model.MngApp{}
if err := ctx.Bind(p); err != nil {
return
}
ctx.JSON(svr.AppInfo(ctx, p.ID))
}
func addApp(ctx *bm.Context) {
p := &model.MngApp{}
if err := ctx.Bind(p); err != nil {
return
}
ctx.JSON(svr.AddApp(ctx, p))
}
func updateApp(ctx *bm.Context) {
p := &model.MngApp{}
if err := ctx.Bind(p); err != nil {
return
}
ctx.JSON(nil, svr.UpdateApp(ctx, p))
}
func countlist(ctx *bm.Context) {
ctx.JSON(svr.MngCountList(ctx))
}
func count(ctx *bm.Context) {
p := &model.MngCount{}
if err := ctx.Bind(p); err != nil {
return
}
ctx.JSON(svr.MngCount(ctx, p))
}
func percent(ctx *bm.Context) {
p := &model.MngCount{}
if err := ctx.Bind(p); err != nil {
return
}
ctx.JSON(svr.MngPercent(ctx, p))
}

View File

@@ -0,0 +1,143 @@
package http
import (
"go-common/app/admin/main/search/model"
bm "go-common/library/net/http/blademaster"
)
func businessAllV2(c *bm.Context) {
c.JSON(svr.BusinessAllV2(c))
}
func businessInfoV2(c *bm.Context) {
p := new(struct {
Name string `form:"name" validate:"required"`
})
if err := c.Bind(p); err != nil {
return
}
c.JSON(svr.BusinessInfoV2(c, p.Name))
}
func businessAdd(c *bm.Context) {
p := new(struct {
Pid int64 `form:"pid" validate:"required,min=1"`
Name string `form:"name" validate:"required"`
Description string `form:"description" validate:"required"`
})
if err := c.Bind(p); err != nil {
return
}
c.JSON(svr.BusinessAdd(c, p.Pid, p.Name, p.Description))
}
func businessUpdate(c *bm.Context) {
p := new(struct {
Name string `form:"name" validate:"required"`
Field string `form:"field" validate:"required"`
Value string `form:"value"`
})
if err := c.Bind(p); err != nil {
return
}
c.JSON(svr.BusinessUpdate(c, p.Name, p.Field, p.Value))
}
func assetDBTables(c *bm.Context) {
c.JSON(svr.AssetDBTables(c))
}
func assetDBConnect(c *bm.Context) {
p := new(struct {
Host string `form:"host" validate:"required"`
Port string `form:"port" validate:"required"`
User string `form:"user" validate:"required"`
Password string `form:"password" validate:"required"`
})
if err := c.Bind(p); err != nil {
return
}
c.JSON(svr.AssetDBConnect(c, p.Host, p.Port, p.User, p.Password))
}
func assetDBAdd(c *bm.Context) {
p := new(struct {
Name string `form:"name" validate:"required"`
Description string `form:"description"`
Host string `form:"host" validate:"required"`
Port string `form:"port" validate:"required"`
User string `form:"user" validate:"required"`
Password string `form:"password" validate:"required"`
})
if err := c.Bind(p); err != nil {
return
}
c.JSON(svr.AssetDBAdd(c, p.Name, p.Description, p.Host, p.Port, p.User, p.Password))
}
func assetTableAdd(c *bm.Context) {
p := new(struct {
DB string `form:"db" validate:"required"`
Regex string `form:"regex" validate:"required"`
Fields string `form:"fields" validate:"required"`
Description string `form:"description"`
})
if err := c.Bind(p); err != nil {
return
}
c.JSON(svr.AssetTableAdd(c, p.DB, p.Regex, p.Fields, p.Description))
}
func updateAssetTable(c *bm.Context) {
p := new(struct {
Name string `form:"name" validate:"required"`
Fields string `form:"fields" validate:"required"`
})
if err := c.Bind(p); err != nil {
return
}
c.JSON(svr.UpdateAssetTable(c, p.Name, p.Fields))
}
func assetInfoV2(c *bm.Context) {
p := new(struct {
Name string `form:"name" validate:"required"`
})
if err := c.Bind(p); err != nil {
return
}
c.JSON(svr.AssetInfoV2(c, p.Name))
}
func assetShowTables(c *bm.Context) {
p := new(struct {
DB string `form:"db" validate:"required"`
})
if err := c.Bind(p); err != nil {
return
}
c.JSON(svr.AssetShowTables(c, p.DB))
}
func assetTableFields(c *bm.Context) {
p := new(struct {
DB string `form:"db" validate:"required"`
Regex string `form:"regex" validate:"required"`
})
if err := c.Bind(p); err != nil {
return
}
fs, count, err := svr.AssetTableFields(c, p.DB, p.Regex)
data := &struct {
Fields []*model.TableField `json:"fields"`
Count int `json:"count"`
}{
Fields: fs,
Count: count,
}
c.JSON(data, err)
}
func clusterOwners(c *bm.Context) {
c.JSON(svr.ClusterOwners(), nil)
}

View File

@@ -0,0 +1,157 @@
package http
import (
"encoding/json"
"errors"
"strings"
"go-common/app/admin/main/search/model"
"go-common/library/ecode"
"go-common/library/log"
bm "go-common/library/net/http/blademaster"
)
func checkParams(c *bm.Context) (sp *model.QueryParams, err error) {
sp = &model.QueryParams{
QueryBody: &model.QueryBody{},
}
if err = c.Bind(sp); err != nil {
return
}
decoder := json.NewDecoder(strings.NewReader(sp.QueryBodyStr))
decoder.UseNumber()
if err = decoder.Decode(&sp.QueryBody); err != nil {
log.Error("s.http.upsert(%v) json error(%v)", err, sp.QueryBodyStr)
}
if sp.QueryBody == nil {
c.JSON(nil, ecode.RequestErr)
return
}
// eq
if sp.QueryBody.Where != nil {
for k, v := range sp.QueryBody.Where.EQ {
if integer, ok := v.(json.Number); ok {
if sp.QueryBody.Where.EQ[k], err = integer.Int64(); err != nil {
log.Error("sp.QueryBody.Where.EQ.numberToInt64(%v)(%v)", integer, err)
}
}
}
// or
for k, v := range sp.QueryBody.Where.Or {
if integer, ok := v.(json.Number); ok {
if sp.QueryBody.Where.Or[k], err = integer.Int64(); err != nil {
log.Error("sp.QueryBody.Where.EQ.numberToInt64(%v)(%v)", integer, err)
}
}
}
// in
for k, v := range sp.QueryBody.Where.In {
vs := make([]interface{}, 0)
for _, v2 := range v {
if integer, ok := v2.(json.Number); ok {
vs = append(vs, integer)
} else {
vs = append(vs, v2)
}
}
sp.QueryBody.Where.In[k] = vs
}
}
if sp.QueryBody.From == "" {
err = errors.New("query from is empty")
return
}
// deny *
if b, ok := model.PermConf["star"][sp.Business]; !(ok && b == "true") {
if strings.Contains(sp.QueryBody.From, "*") {
err = errors.New("query from * is denied")
return
}
}
if err = svr.CheckQueryConf(c, sp); err != nil {
log.Error("svr.QueryConf(%+v) error(%v)", sp, err)
return
}
if sp.QueryBody.Pn == 0 {
sp.QueryBody.Pn = 1
}
if sp.QueryBody.Ps == 0 {
sp.QueryBody.Ps = 10
}
return
}
func querySearch(c *bm.Context) {
var (
err error
sp *model.QueryParams
res *model.QueryResult
)
res = &model.QueryResult{}
if sp, err = checkParams(c); err != nil {
log.Error("checkParams(%v) error(%v)", sp, err)
c.JSON(res, err)
return
}
//query mode
switch sp.AppIDConf.QueryMode {
case model.QueryModeBasic: //完全通用查询支持nested方式
res, _, err = svr.QueryBasic(c, sp)
case model.QueryModeExtra: //半自定义,在查询体基础上加额外条件
res, _, err = svr.QueryExtra(c, sp)
case 4: //完整自定义查询
// todo
default:
res, _, err = svr.QueryBasic(c, sp)
}
if err != nil {
log.Error("srv.QueryBasic(%v) error(%v)", sp, err)
c.JSON(nil, err)
return
}
c.JSON(res, err)
}
// queryDebug 1. queryBody is right or not 2. return dsl body 3. return dsl profile
func queryDebug(c *bm.Context) {
var (
err error
sp *model.QueryParams
resDebug = &model.QueryDebugResult{}
)
if sp, err = checkParams(c); err != nil {
log.Error("checkParams(%v) error(%v)", c, err)
resDebug.AddErrMsg(err.Error())
resDebug.QueryBody = sp.QueryBodyStr
c.JSON(resDebug, ecode.RequestErr)
return
}
// 默认高级debug
if sp.DebugLevel == 0 {
sp.DebugLevel = 2
}
switch sp.AppIDConf.QueryMode {
case 0, model.QueryModeBasic: //完全通用查询
if _, resDebug, err = svr.QueryBasic(c, sp); err != nil {
log.Error("QueryDebug(%v) error(%v)", sp, err)
resDebug.AddErrMsg(err.Error())
c.JSON(resDebug, ecode.RequestErr)
return
}
case model.QueryModeExtra: //半自定义,根据查询体基础再做额外处理
if _, resDebug, err = svr.QueryExtra(c, sp); err != nil {
log.Error("QueryDebug(%v) error(%v)", sp, err)
resDebug.AddErrMsg(err.Error())
c.JSON(resDebug, ecode.RequestErr)
return
}
case 3: //完全自定义
//todo
default:
}
resDebug.QueryBody = sp.QueryBodyStr
c.JSON(resDebug, err)
}

View File

@@ -0,0 +1,36 @@
package http
import (
"encoding/json"
"strings"
"go-common/app/admin/main/search/model"
"go-common/library/ecode"
"go-common/library/log"
bm "go-common/library/net/http/blademaster"
)
func upsert(c *bm.Context) {
up := &model.UpsertParams{}
if err := c.Bind(up); err != nil {
return
}
dataBody := map[string][]model.MapData{}
decoder := json.NewDecoder(strings.NewReader(up.DataStr))
decoder.UseNumber()
if err := decoder.Decode(&dataBody); err != nil {
log.Error("s.http.upsert(%v) json error(%v)", err, dataBody)
}
if len(dataBody) == 0 {
c.JSON(nil, ecode.RequestErr)
return
}
for _, n := range dataBody {
for _, m := range n {
if err := m.NumberToInt64(); err != nil {
log.Error("s.http.upsert(%v) to int64 error(%v)", err, m)
}
}
}
c.JSON(nil, svr.Upsert(c, up, dataBody))
}