Create & Init Project...

This commit is contained in:
2019-04-22 18:49:16 +08:00
commit fc4fa37393
25440 changed files with 4054998 additions and 0 deletions

View File

@@ -0,0 +1,18 @@
filegroup(
name = "package-srcs",
srcs = glob(["**"]),
tags = ["automanaged"],
visibility = ["//visibility:private"],
)
filegroup(
name = "all-srcs",
srcs = [
":package-srcs",
"//app/interface/bbq/common/auth:all-srcs",
"//app/interface/bbq/common/http:all-srcs",
"//app/interface/bbq/common/model:all-srcs",
],
tags = ["automanaged"],
visibility = ["//visibility:public"],
)

View File

@@ -0,0 +1,3 @@
# 0.0.1
1. BBQ接口层公共类
2. 增加新的埋点字段

View File

@@ -0,0 +1,12 @@
# interface/bbq/common
# 项目简介
1. BBQ接口层公共类
# 编译环境
# 依赖包
# 编译执行

View File

@@ -0,0 +1,35 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_library",
)
go_library(
name = "go_default_library",
srcs = ["banned.go"],
importpath = "go-common/app/interface/bbq/common/auth",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = [
"//library/database/sql: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/auth:go_default_library",
],
)
filegroup(
name = "package-srcs",
srcs = glob(["**"]),
tags = ["automanaged"],
visibility = ["//visibility:private"],
)
filegroup(
name = "all-srcs",
srcs = [":package-srcs"],
tags = ["automanaged"],
visibility = ["//visibility:public"],
)

View File

@@ -0,0 +1,63 @@
package auth
import (
"strconv"
"time"
xsql "go-common/library/database/sql"
"go-common/library/ecode"
"go-common/library/log"
bm "go-common/library/net/http/blademaster"
xauth "go-common/library/net/http/blademaster/middleware/auth"
)
const (
_queryBannedUser = "select `expire_time`,`forbid_status` from `forbid_user` where `mid` = ?;"
)
// BannedAuth .
type BannedAuth struct {
*xauth.Auth
db *xsql.DB
}
// NewBannedAuth .
func NewBannedAuth(authConf *xauth.Config, dbConf *xsql.Config) *BannedAuth {
return &BannedAuth{
Auth: xauth.New(authConf),
db: xsql.NewMySQL(dbConf),
}
}
// User .
func (ba *BannedAuth) User(ctx *bm.Context) {
ba.Auth.User(ctx)
// 只过滤写接口
if ctx.Request.Method != "POST" {
return
}
// 获取MID
var mid int64
tmp, _ := ctx.Get("mid")
switch tmp.(type) {
case int64:
mid = tmp.(int64)
}
if mid == 0 {
return
}
// 过滤封禁用户
var expired, status int
row := ba.db.QueryRow(ctx, _queryBannedUser, mid)
row.Scan(&expired, &status)
if status == 1 && expired > 0 && expired > int(time.Now().Unix()) {
// 封禁用户
log.Infov(ctx, log.KV("log", "user banned "+strconv.Itoa(int(mid))), log.KV("err", ecode.BBQUserBanned))
ctx.Error = ecode.BBQUserBanned
ctx.JSON(nil, ecode.BBQUserBanned)
ctx.Abort()
}
}

View File

@@ -0,0 +1,41 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_library",
)
go_library(
name = "go_default_library",
srcs = [
"header.go",
"session.go",
"uilog.go",
],
importpath = "go-common/app/interface/bbq/common/http",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = [
"//app/interface/bbq/common/model:go_default_library",
"//library/log:go_default_library",
"//library/log/infoc:go_default_library",
"//library/net/http/blademaster:go_default_library",
"//library/net/trace:go_default_library",
"//vendor/github.com/Dai0522/go-hash/murmur3:go_default_library",
"//vendor/github.com/json-iterator/go:go_default_library",
],
)
filegroup(
name = "package-srcs",
srcs = glob(["**"]),
tags = ["automanaged"],
visibility = ["//visibility:private"],
)
filegroup(
name = "all-srcs",
srcs = [":package-srcs"],
tags = ["automanaged"],
visibility = ["//visibility:public"],
)

View File

@@ -0,0 +1,24 @@
package http
import (
"fmt"
bm "go-common/library/net/http/blademaster"
"go-common/library/net/trace"
)
// WrapHeader 为返回头添加自定义字段
func WrapHeader(ctx *bm.Context) {
// Traceid
tracer, _ := trace.FromContext(ctx.Context)
traceid := fmt.Sprintf("%s", tracer)
ctx.Writer.Header().Set("traceid", traceid)
// Sessionid
sid := ctx.Request.Header.Get("SessionID")
if sid == "" {
sid = SessionID(ctx)
}
ctx.Set("SessionID", sid)
ctx.Writer.Header().Set("SessionID", sid)
}

View File

@@ -0,0 +1,33 @@
package http
import (
"fmt"
"math/rand"
"time"
bm "go-common/library/net/http/blademaster"
"github.com/Dai0522/go-hash/murmur3"
)
// SessionID .
func SessionID(ctx *bm.Context) string {
ts := time.Now().Unix()
dev, _ := ctx.Get("device")
buvid := dev.(*bm.Device).Buvid
rnum := rand.Uint64()
str := fmt.Sprintf("%s:%d:%d", buvid, rnum, ts)
hc := murmur3.New().Murmur3_128([]byte(str))
result := ""
pattern := []string{"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"}
for _, v := range hc {
tmp := int(v & 15)
result += pattern[tmp]
tmp = int((v >> 4) & 15)
result += pattern[tmp]
}
return result
}

View File

@@ -0,0 +1,87 @@
package http
import (
"fmt"
"strings"
"time"
"go-common/app/interface/bbq/common/model"
"go-common/library/log"
"go-common/library/log/infoc"
bm "go-common/library/net/http/blademaster"
"go-common/library/net/trace"
jsoniter "github.com/json-iterator/go"
)
// UILog .
type UILog struct {
infoc *infoc.Infoc
}
// New .
func New(c *infoc.Config) *UILog {
return &UILog{
infoc: infoc.New(c),
}
}
// Infoc .
func (u *UILog) Infoc(ctx *bm.Context, action int, ext interface{}) {
arg := new(model.Base)
ctx.Bind(arg)
log.V(5).Info("uilog [%+v]", arg)
if action == model.ActionPlay {
// data type 1 心跳上报 2 暂停 3 home
switch arg.DataType {
case 2:
action = model.ActionPlayPause
case 3:
action = model.ActionPlayOut
}
}
// interface base field
app := arg.App
client := arg.Client
version := arg.Version
channel := arg.Channel
loc := arg.Location
cip := ctx.Request.RemoteAddr
if ips := ctx.Request.Header.Get("X-Forwarded-For"); ips != "" {
ipArr := strings.Split(ips, ",")
if len(ipArr) > 0 {
cip = ipArr[0]
}
}
// session id
sid, _ := ctx.Get("SessionID")
// trace id
tracer, _ := trace.FromContext(ctx.Context)
tid := tracer
// recsys query id
qid := arg.QueryID
if action == model.ActionRecommend {
qid = fmt.Sprintf("%s", tracer)
}
// video
svid := arg.SVID
// user
var mid int64
if tmp, ok := ctx.Get("mid"); ok {
mid = tmp.(int64)
}
buvid := ctx.Request.Header.Get("Buvid")
totalDuration := arg.TotalDuration
playDuration := arg.PlayDuration
ctime := time.Now().Unix()
b, _ := jsoniter.Marshal(ext)
u.infoc.Info(client, app, version, channel, loc, cip, qid, sid, tid, svid, mid, buvid, action, totalDuration, playDuration, ctime, string(b), arg.From, arg.FromID, arg.PFrom, arg.PFromID)
}

View File

@@ -0,0 +1,31 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_library",
)
go_library(
name = "go_default_library",
srcs = [
"base.go",
"const.go",
],
importpath = "go-common/app/interface/bbq/common/model",
tags = ["automanaged"],
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"],
)

View File

@@ -0,0 +1,20 @@
package model
// Base .
type Base struct {
App string `json:"mobi_app" form:"mobi_app"`
Client string `json:"platform" form:"platform"`
Version string `json:"version" form:"version"`
Channel string `json:"channel" form:"channel"`
Location string `json:"location" form:"location"`
QueryID string `json:"query_id" form:"query_id"`
BUVID string `json:"buvid"`
SVID int `json:"svid" form:"svid"`
TotalDuration int `json:"total_duration" form:"total_duration"`
PlayDuration int `json:"duration" form:"duration"`
DataType int `json:"data_type" form:"data_type"`
From string `json:"from" form:"from"`
PFrom string `json:"pfrom" form:"pfrom"`
FromID string `json:"from_id" form:"from_id"`
PFromID string `json:"pfrom_id" form:"pfrom_id"`
}

View File

@@ -0,0 +1,27 @@
package model
// 接口Action定义
const (
ActionRecommend = iota
ActionPlay
ActionLike
ActionCancelLike
ActionFollow
ActionCancelFollow
ActionCommentAdd
ActionCommentLike
ActionCommentReport
ActionFeedList
ActionShare
ActionDanmaku
ActionPlayPause
ActionPushRegister
ActionPushSucced
ActionPushCallback
ActionBlack
ActionCancelBlack
ActionVideoSearch
ActionUserSearch
ActionUserUnLike
ActionPlayOut
)