You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
87 lines
1.7 KiB
87 lines
1.7 KiB
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) |
|
}
|
|
|