122 lines
3.1 KiB
Go
122 lines
3.1 KiB
Go
package dao
|
|
|
|
import (
|
|
"bytes"
|
|
"context"
|
|
"crypto/md5"
|
|
"encoding/hex"
|
|
"strconv"
|
|
"time"
|
|
|
|
"go-common/app/interface/main/space/model"
|
|
"go-common/library/log"
|
|
|
|
"github.com/tsuna/gohbase/hrpc"
|
|
)
|
|
|
|
const (
|
|
_hBaseArticleTable = "read_auth_stats_daily"
|
|
_hBaseUpStatTablePrefix = "up_stats_"
|
|
)
|
|
|
|
func hbaseMd5Key(mid int64) string {
|
|
hasher := md5.New()
|
|
hasher.Write([]byte(strconv.Itoa(int(mid))))
|
|
return hex.EncodeToString(hasher.Sum(nil))
|
|
}
|
|
|
|
// UpArcStat get up archive stat.
|
|
func (d *Dao) UpArcStat(c context.Context, mid int64, date string) (stat *model.UpArcStat, err error) {
|
|
var (
|
|
result *hrpc.Result
|
|
ctx, cancel = context.WithTimeout(c, time.Duration(d.c.HBase.ReadTimeout))
|
|
key = hbaseMd5Key(mid)
|
|
tableName = _hBaseUpStatTablePrefix + date // change table at 12:00am
|
|
)
|
|
defer cancel()
|
|
if result, err = d.hbase.GetStr(ctx, tableName, key); err != nil {
|
|
log.Error("UpArcStat d.hbase.GetStr tableName(%s)|mid(%d)|key(%v)|error(%v)", tableName, mid, key, err)
|
|
return
|
|
}
|
|
if result == nil {
|
|
return
|
|
}
|
|
stat = &model.UpArcStat{}
|
|
for _, c := range result.Cells {
|
|
if c == nil {
|
|
continue
|
|
}
|
|
v, _ := strconv.ParseInt(string(c.Value[:]), 10, 64)
|
|
if !bytes.Equal(c.Family, []byte("u")) {
|
|
continue
|
|
}
|
|
switch {
|
|
case bytes.Equal(c.Qualifier, []byte("play")):
|
|
stat.View = v
|
|
case bytes.Equal(c.Qualifier, []byte("dm")):
|
|
stat.Dm = v
|
|
case bytes.Equal(c.Qualifier, []byte("reply")):
|
|
stat.Reply = v
|
|
case bytes.Equal(c.Qualifier, []byte("fans")):
|
|
stat.Fans = v
|
|
}
|
|
}
|
|
return
|
|
}
|
|
|
|
// UpArtStat get up article stat.
|
|
func (d *Dao) UpArtStat(c context.Context, mid int64) (stat *model.UpArtStat, err error) {
|
|
var (
|
|
result *hrpc.Result
|
|
ctx, cancel = context.WithTimeout(c, time.Duration(d.c.HBase.ReadTimeout))
|
|
key = hbaseMd5Key(mid)
|
|
tableName = _hBaseArticleTable
|
|
)
|
|
defer cancel()
|
|
if result, err = d.hbase.GetStr(ctx, tableName, key); err != nil {
|
|
log.Error("UpArtStat d.hbase.GetStr tableName(%s)|mid(%d)|key(%v)|error(%v)", tableName, mid, key, err)
|
|
return
|
|
}
|
|
if result == nil {
|
|
return
|
|
}
|
|
stat = &model.UpArtStat{}
|
|
for _, c := range result.Cells {
|
|
if c == nil {
|
|
continue
|
|
}
|
|
v, _ := strconv.ParseInt(string(c.Value[:]), 10, 64)
|
|
if !bytes.Equal(c.Family, []byte("r")) {
|
|
continue
|
|
}
|
|
switch {
|
|
case bytes.Equal(c.Qualifier, []byte("view1")):
|
|
stat.View = v
|
|
case bytes.Equal(c.Qualifier, []byte("reply1")):
|
|
stat.Reply = v
|
|
case bytes.Equal(c.Qualifier, []byte("coin1")):
|
|
stat.Coin = v
|
|
case bytes.Equal(c.Qualifier, []byte("like1")):
|
|
stat.Like = v
|
|
case bytes.Equal(c.Qualifier, []byte("fav1")):
|
|
stat.Fav = v
|
|
case bytes.Equal(c.Qualifier, []byte("view0")):
|
|
stat.PreView = v
|
|
case bytes.Equal(c.Qualifier, []byte("reply0")):
|
|
stat.PreReply = v
|
|
case bytes.Equal(c.Qualifier, []byte("coin0")):
|
|
stat.PreCoin = v
|
|
case bytes.Equal(c.Qualifier, []byte("like0")):
|
|
stat.PreLike = v
|
|
case bytes.Equal(c.Qualifier, []byte("fav0")):
|
|
stat.PreFav = v
|
|
}
|
|
}
|
|
stat.IncrView = stat.View - stat.PreView
|
|
stat.IncrReply = stat.Reply - stat.PreReply
|
|
stat.IncrCoin = stat.Coin - stat.PreCoin
|
|
stat.IncrLike = stat.Like - stat.PreLike
|
|
stat.IncrFav = stat.Fav - stat.PreFav
|
|
return
|
|
}
|