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.
55 lines
1.2 KiB
55 lines
1.2 KiB
package dao |
|
|
|
import ( |
|
"bytes" |
|
"context" |
|
"fmt" |
|
"strconv" |
|
"time" |
|
|
|
"go-common/app/job/main/spy/model" |
|
"go-common/library/log" |
|
|
|
"github.com/pkg/errors" |
|
"github.com/tsuna/gohbase/hrpc" |
|
) |
|
|
|
var ( |
|
// table |
|
_hbaseTableActive = "active_data" |
|
// family |
|
_familyDays = "activeDays" |
|
_familyDaysB = []byte(_familyDays) |
|
) |
|
|
|
func strRowKey(mid int64) string { |
|
return fmt.Sprintf("%d", mid) |
|
} |
|
|
|
// GetActiveData get user active days and watched bangumi video time |
|
func (dao *Dao) GetActiveData(c context.Context, mid int64) (active *model.Active, err error) { |
|
var ( |
|
result *hrpc.Result |
|
key = strRowKey(mid) |
|
ctx, cancel = context.WithTimeout(c, time.Duration(dao.c.HBase.ReadTimeout)) |
|
) |
|
defer cancel() |
|
if result, err = dao.hbase.GetStr(ctx, _hbaseTableActive, key); err != nil { |
|
err = errors.Wrapf(err, "hbase.GetStr(%s,%s)", _hbaseTableActive, key) |
|
return |
|
} |
|
active = &model.Active{} |
|
for _, c := range result.Cells { |
|
h := &model.Active{} |
|
if c != nil && bytes.Equal(c.Family, _familyDaysB) { |
|
days, err := strconv.ParseInt(string(c.Qualifier), 10, 64) |
|
if err != nil { |
|
log.Error("strconv.ParseInt err(%v)", err) |
|
continue |
|
} |
|
h.Active = days |
|
active = h |
|
} |
|
} |
|
return |
|
}
|
|
|