go-common/app/interface/bbq/common/http/uilog.go
2019-04-22 18:49:16 +08:00

88 lines
1.7 KiB
Go

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)
}