bilibili-backup/app/service/bbq/recsys-recall/server/http/http.go

139 lines
3.1 KiB
Go
Raw Normal View History

2019-04-22 10:59:20 +08:00
package http
import (
"fmt"
"net/http"
grpc "go-common/app/service/bbq/recsys-recall/api/grpc/v1"
"go-common/app/service/bbq/recsys-recall/conf"
"go-common/app/service/bbq/recsys-recall/service"
"go-common/app/service/bbq/recsys-recall/service/index"
"go-common/library/log"
bm "go-common/library/net/http/blademaster"
"go-common/library/net/http/blademaster/binding"
"go-common/library/net/http/blademaster/middleware/verify"
)
var (
srv *service.Service
vfy *verify.Verify
)
// Init init
func Init(c *conf.Config) {
srv = service.New(c)
vfy = verify.New(c.Verify)
engine := bm.DefaultServer(c.BM)
route(engine)
if err := engine.Start(); err != nil {
log.Error("bm Start error(%v)", err)
panic(err)
}
}
func route(e *bm.Engine) {
e.Ping(ping)
e.Register(register)
g := e.Group("/bbq/internal/recall")
{
g.GET("/start", vfy.Verify, howToStart)
g.GET("/forward_index", forwardIndex)
g.GET("/inverted_index", invertedIndex)
g.GET("/recall", recall)
g.GET("/videos", videosByIndex)
g.POST("/new_income", newIncomeVideos)
}
}
func forwardIndex(c *bm.Context) {
args := struct {
Svid uint64 `form:"svid" json:"svid" validate:"required"`
}{}
var err error
if err = c.Bind(&args); err != nil {
log.Errorv(*c, log.KV("log", err))
return
}
if res := index.Index.Get(args.Svid); res != nil {
c.String(0, res.String())
return
}
c.String(0, "error: %v", err)
}
func invertedIndex(c *bm.Context) {
c.JSON(nil, nil)
}
func recall(c *bm.Context) {
args := struct {
MID int64 `json:"mid" form:"mid"`
BUVID string `json:"buvid" form:"buvid"`
TotalLimit int32 `json:"total_limit" form:"total_limit"`
Tag string `json:"tag" form:"tag"`
Name string `json:"name" form:"name"`
Scorer string `json:"scorer" form:"scorer"`
Filter string `json:"filter" form:"filter"`
Ranker string `json:"ranker" form:"ranker"`
Priority int32 `json:"priority" form:"priority"`
Limit int32 `json:"limit" form:"limit"`
}{}
if err := c.Bind(&args); err != nil {
return
}
req := &grpc.RecallRequest{
MID: args.MID,
BUVID: args.BUVID,
TotalLimit: args.TotalLimit,
Infos: []*grpc.RecallInfo{
{
Tag: args.Tag,
Name: args.Name,
Scorer: args.Scorer,
Filter: args.Filter,
Ranker: args.Ranker,
Priority: args.Priority,
Limit: args.Limit,
},
},
}
c.JSON(srv.Recall(c, req))
}
func newIncomeVideos(c *bm.Context) {
args := &grpc.NewIncomeVideoRequest{}
if err := c.BindWith(args, binding.JSON); err != nil {
return
}
fmt.Println(args)
c.JSON(srv.NewIncomeVideo(c, args))
}
func videosByIndex(c *bm.Context) {
args := &grpc.VideosByIndexRequest{}
if err := c.Bind(args); err != nil {
return
}
c.JSON(srv.VideosByIndex(c, args))
}
func ping(c *bm.Context) {
if err := srv.Ping(c); err != nil {
log.Error("ping error(%v)", err)
c.AbortWithStatus(http.StatusServiceUnavailable)
}
}
func register(c *bm.Context) {
c.JSON(map[string]interface{}{}, nil)
}
// example for http request handler
func howToStart(c *bm.Context) {
c.String(0, "Golang 大法好 !!!")
}