http.go 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. package http
  2. import (
  3. "fmt"
  4. "net/http"
  5. grpc "go-common/app/service/bbq/recsys-recall/api/grpc/v1"
  6. "go-common/app/service/bbq/recsys-recall/conf"
  7. "go-common/app/service/bbq/recsys-recall/service"
  8. "go-common/app/service/bbq/recsys-recall/service/index"
  9. "go-common/library/log"
  10. bm "go-common/library/net/http/blademaster"
  11. "go-common/library/net/http/blademaster/binding"
  12. "go-common/library/net/http/blademaster/middleware/verify"
  13. )
  14. var (
  15. srv *service.Service
  16. vfy *verify.Verify
  17. )
  18. // Init init
  19. func Init(c *conf.Config) {
  20. srv = service.New(c)
  21. vfy = verify.New(c.Verify)
  22. engine := bm.DefaultServer(c.BM)
  23. route(engine)
  24. if err := engine.Start(); err != nil {
  25. log.Error("bm Start error(%v)", err)
  26. panic(err)
  27. }
  28. }
  29. func route(e *bm.Engine) {
  30. e.Ping(ping)
  31. e.Register(register)
  32. g := e.Group("/bbq/internal/recall")
  33. {
  34. g.GET("/start", vfy.Verify, howToStart)
  35. g.GET("/forward_index", forwardIndex)
  36. g.GET("/inverted_index", invertedIndex)
  37. g.GET("/recall", recall)
  38. g.GET("/videos", videosByIndex)
  39. g.POST("/new_income", newIncomeVideos)
  40. }
  41. }
  42. func forwardIndex(c *bm.Context) {
  43. args := struct {
  44. Svid uint64 `form:"svid" json:"svid" validate:"required"`
  45. }{}
  46. var err error
  47. if err = c.Bind(&args); err != nil {
  48. log.Errorv(*c, log.KV("log", err))
  49. return
  50. }
  51. if res := index.Index.Get(args.Svid); res != nil {
  52. c.String(0, res.String())
  53. return
  54. }
  55. c.String(0, "error: %v", err)
  56. }
  57. func invertedIndex(c *bm.Context) {
  58. c.JSON(nil, nil)
  59. }
  60. func recall(c *bm.Context) {
  61. args := struct {
  62. MID int64 `json:"mid" form:"mid"`
  63. BUVID string `json:"buvid" form:"buvid"`
  64. TotalLimit int32 `json:"total_limit" form:"total_limit"`
  65. Tag string `json:"tag" form:"tag"`
  66. Name string `json:"name" form:"name"`
  67. Scorer string `json:"scorer" form:"scorer"`
  68. Filter string `json:"filter" form:"filter"`
  69. Ranker string `json:"ranker" form:"ranker"`
  70. Priority int32 `json:"priority" form:"priority"`
  71. Limit int32 `json:"limit" form:"limit"`
  72. }{}
  73. if err := c.Bind(&args); err != nil {
  74. return
  75. }
  76. req := &grpc.RecallRequest{
  77. MID: args.MID,
  78. BUVID: args.BUVID,
  79. TotalLimit: args.TotalLimit,
  80. Infos: []*grpc.RecallInfo{
  81. {
  82. Tag: args.Tag,
  83. Name: args.Name,
  84. Scorer: args.Scorer,
  85. Filter: args.Filter,
  86. Ranker: args.Ranker,
  87. Priority: args.Priority,
  88. Limit: args.Limit,
  89. },
  90. },
  91. }
  92. c.JSON(srv.Recall(c, req))
  93. }
  94. func newIncomeVideos(c *bm.Context) {
  95. args := &grpc.NewIncomeVideoRequest{}
  96. if err := c.BindWith(args, binding.JSON); err != nil {
  97. return
  98. }
  99. fmt.Println(args)
  100. c.JSON(srv.NewIncomeVideo(c, args))
  101. }
  102. func videosByIndex(c *bm.Context) {
  103. args := &grpc.VideosByIndexRequest{}
  104. if err := c.Bind(args); err != nil {
  105. return
  106. }
  107. c.JSON(srv.VideosByIndex(c, args))
  108. }
  109. func ping(c *bm.Context) {
  110. if err := srv.Ping(c); err != nil {
  111. log.Error("ping error(%v)", err)
  112. c.AbortWithStatus(http.StatusServiceUnavailable)
  113. }
  114. }
  115. func register(c *bm.Context) {
  116. c.JSON(map[string]interface{}{}, nil)
  117. }
  118. // example for http request handler
  119. func howToStart(c *bm.Context) {
  120. c.String(0, "Golang 大法好 !!!")
  121. }