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.
110 lines
2.2 KiB
110 lines
2.2 KiB
package dao |
|
|
|
import ( |
|
"bytes" |
|
"context" |
|
"time" |
|
|
|
"go-common/library/log" |
|
) |
|
|
|
// Play push databus . |
|
func (d *Dao) Play(c context.Context, plat, aid, cid, part, mid, level, ftime, stime, did, ip, agent, buvid, cookieSid, refer, typeID, subType, sid, epid, playMode, platform, device, mobiAapp, autoPlay, session string) { |
|
bf := d.bfp.Get().(*bytes.Buffer) |
|
bf.WriteString(plat) |
|
bf.Write(d.spliter) |
|
bf.WriteString(aid) |
|
bf.Write(d.spliter) |
|
bf.WriteString(cid) |
|
bf.Write(d.spliter) |
|
bf.WriteString(part) |
|
bf.Write(d.spliter) |
|
bf.WriteString(mid) |
|
bf.Write(d.spliter) |
|
bf.WriteString(level) |
|
bf.Write(d.spliter) |
|
bf.WriteString(ftime) |
|
bf.Write(d.spliter) |
|
bf.WriteString(stime) |
|
bf.Write(d.spliter) |
|
bf.WriteString(did) |
|
bf.Write(d.spliter) |
|
bf.WriteString(ip) |
|
bf.Write(d.spliter) |
|
bf.WriteString(agent) |
|
bf.Write(d.spliter) |
|
bf.WriteString(buvid) |
|
bf.Write(d.spliter) |
|
bf.WriteString(cookieSid) |
|
bf.Write(d.spliter) |
|
bf.WriteString(refer) |
|
bf.Write(d.spliter) |
|
bf.WriteString(typeID) |
|
bf.Write(d.spliter) |
|
bf.WriteString(subType) |
|
bf.Write(d.spliter) |
|
bf.WriteString(sid) |
|
bf.Write(d.spliter) |
|
bf.WriteString(epid) |
|
bf.Write(d.spliter) |
|
bf.WriteString(playMode) |
|
bf.Write(d.spliter) |
|
bf.WriteString(platform) |
|
bf.Write(d.spliter) |
|
bf.WriteString(device) |
|
bf.Write(d.spliter) |
|
bf.WriteString(mobiAapp) |
|
bf.Write(d.spliter) |
|
bf.WriteString(autoPlay) |
|
bf.Write(d.spliter) |
|
bf.WriteString(session) |
|
|
|
buf := make([]byte, len(bf.Bytes())) |
|
copy(buf, bf.Bytes()) |
|
select { |
|
case d.msgs <- buf: |
|
default: |
|
log.Warn("d.Play() msgs is full !") |
|
} |
|
bf.Reset() |
|
d.bfp.Put(bf) |
|
} |
|
|
|
// pubproc send history to databus. |
|
func (d *Dao) pubproc() { |
|
var ( |
|
msg []byte |
|
ms [][]byte |
|
ticker = time.NewTicker(time.Second) |
|
) |
|
for { |
|
select { |
|
case msg = <-d.msgs: |
|
if len(msg) == 0 { |
|
continue |
|
} |
|
if d.spliter[0] != msg[0] { |
|
ms = append(ms, msg) |
|
if len(ms) < 100 { |
|
continue |
|
} |
|
} |
|
case <-ticker.C: |
|
} |
|
if len(ms) == 0 { |
|
continue |
|
} |
|
d.mergePub(ms) |
|
ms = make([][]byte, 0, 100) |
|
} |
|
} |
|
|
|
func (d *Dao) mergePub(ms [][]byte) { |
|
key := string(ms[0][:50]) |
|
for j := 0; j < 3; j++ { |
|
if err := d.merge.Send(context.Background(), key, ms); err == nil { |
|
break |
|
} |
|
log.Error("d.merge.Send(%+v)", ms) |
|
} |
|
}
|
|
|