Files
go-common/app/interface/main/app-show/service/region/infoc.go
2019-04-22 18:49:16 +08:00

102 lines
2.1 KiB
Go

package region
import (
"bytes"
"strconv"
"time"
"go-common/app/interface/main/app-show/conf"
"go-common/library/log"
binfoc "go-common/library/log/infoc"
)
type infoc struct {
mid string
rid string
tid string
pn string
hotavid []int64
newavid []int64
now string
}
// Infoc write data for Hadoop do analytics
func (s *Service) infoc(mid int64, hotavid, newavid []int64, rid, tid int, pull bool, now time.Time) {
var pn string
if pull {
pn = "1"
} else {
pn = "2"
}
select {
case s.logCh <- infoc{strconv.FormatInt(mid, 10), strconv.Itoa(rid), strconv.Itoa(tid), pn, hotavid, newavid, strconv.FormatInt(now.Unix(), 10)}:
default:
log.Warn("infoc log buffer is full")
}
}
// writeInfoc
func (s *Service) infocproc() {
const (
noItem1 = `{"section":{"rid":`
noItem2 = `,"tagid":`
noItem3 = `,"mid":`
noItem4 = `,"pn":`
noItem5 = `,"hot_avids":[],"item_avids":[]}}`
)
var (
msg1 = []byte(`{"section":{"rid":`)
msg2 = []byte(`,"tagid":`)
msg3 = []byte(`,"mid":`)
msg4 = []byte(`,"pn":`)
msg5 = []byte(`,"hot_avids":[`)
msg6 = []byte(`,`)
msg7 = []byte(`],"item_avids":[`)
msg8 = []byte(`,`)
msg9 = []byte(`]}}`)
inf2 = binfoc.New(conf.Conf.FeedInfoc2)
buf bytes.Buffer
list string
)
for {
i, ok := <-s.logCh
if !ok {
log.Warn("infoc proc exit")
return
}
switch v := i.(type) {
case infoc:
if len(v.newavid) > 0 {
buf.Write(msg1)
buf.WriteString(v.rid)
buf.Write(msg2)
buf.WriteString(v.tid)
buf.Write(msg3)
buf.WriteString(v.mid)
buf.Write(msg4)
buf.WriteString(v.pn)
buf.Write(msg5)
for _, v := range v.hotavid {
buf.WriteString(strconv.FormatInt(v, 10))
buf.Write(msg6)
}
if len(v.hotavid) > 0 {
buf.Truncate(buf.Len() - 1)
}
buf.Write(msg7)
for _, v := range v.newavid {
buf.WriteString(strconv.FormatInt(v, 10))
buf.Write(msg8)
}
buf.Truncate(buf.Len() - 1)
buf.Write(msg9)
list = buf.String()
buf.Reset()
} else {
list = noItem1 + v.rid + noItem2 + v.tid + noItem3 + v.mid + noItem4 + v.pn + noItem5
}
inf2.Info(v.now, list)
}
}
}