feat: log feed swipe timestamp

This commit is contained in:
lilong.129
2023-08-13 13:33:11 +08:00
parent 4fdc04368a
commit 9520ad1278
2 changed files with 26 additions and 15 deletions
+4
View File
@@ -56,6 +56,10 @@ type ScreenResult struct {
VideoType string `json:"video_type,omitempty"` // video type: feed, live-preview or live VideoType string `json:"video_type,omitempty"` // video type: feed, live-preview or live
Feed *FeedVideo `json:"feed,omitempty"` Feed *FeedVideo `json:"feed,omitempty"`
Live *LiveRoom `json:"live,omitempty"` Live *LiveRoom `json:"live,omitempty"`
SwipeStartTime int64 `json:"swipe_start_time"` // 滑动开始时间戳
SwipeFinishTime int64 `json:"swipe_finish_time"` // 滑动结束时间戳
Elapsed int64 `json:"elapsed"` // current_swipe_finish -> next_swipe_start 整体耗时(ms)
} }
type cacheStepData struct { type cacheStepData struct {
+22 -15
View File
@@ -85,6 +85,7 @@ func (s *VideoStat) isTargetAchieved() bool {
// incrFeed increases feed count and feed stat // incrFeed increases feed count and feed stat
func (s *VideoStat) incrFeed(screenResult *ScreenResult, driverExt *DriverExt) error { func (s *VideoStat) incrFeed(screenResult *ScreenResult, driverExt *DriverExt) error {
screenResult.VideoType = "feed" screenResult.VideoType = "feed"
screenResult.Feed = &FeedVideo{}
// find feed author // find feed author
actionOptions := []ActionOption{ actionOptions := []ActionOption{
@@ -97,9 +98,7 @@ func (s *VideoStat) incrFeed(screenResult *ScreenResult, driverExt *DriverExt) e
} }
author := ocrText.Text author := ocrText.Text
log.Info().Str("author", author).Msg("found feed author by OCR") log.Info().Str("author", author).Msg("found feed author by OCR")
screenResult.Feed = &FeedVideo{ screenResult.Feed.UserName = author
UserName: author,
}
// find target labels // find target labels
for _, targetLabel := range s.configs.Feed.TargetLabels { for _, targetLabel := range s.configs.Feed.TargetLabels {
@@ -358,7 +357,6 @@ func (dExt *DriverExt) VideoCrawler(configs *VideoCrawlerConfigs) (err error) {
// loop until target count achieved or timeout // loop until target count achieved or timeout
// the main loop is feed crawler // the main loop is feed crawler
currVideoStat.timer = time.NewTimer(time.Duration(configs.Timeout) * time.Second) currVideoStat.timer = time.NewTimer(time.Duration(configs.Timeout) * time.Second)
lastSwipeTime := time.Now()
for { for {
select { select {
case <-currVideoStat.timer.C: case <-currVideoStat.timer.C:
@@ -368,6 +366,15 @@ func (dExt *DriverExt) VideoCrawler(configs *VideoCrawlerConfigs) (err error) {
log.Warn().Msg("interrupted in feed crawler") log.Warn().Msg("interrupted in feed crawler")
return errors.Wrap(code.InterruptError, "feed crawler interrupted") return errors.Wrap(code.InterruptError, "feed crawler interrupted")
default: default:
// swipe to next feed video
log.Info().Msg("swipe to next feed video")
swipeStartTime := time.Now()
if err = dExt.SwipeUp(); err != nil {
log.Error().Err(err).Msg("swipe up failed")
return err
}
swipeFinishTime := time.Now()
// take screenshot and get screen texts by OCR // take screenshot and get screen texts by OCR
screenResult, err := dExt.GetScreenResult() screenResult, err := dExt.GetScreenResult()
if err != nil { if err != nil {
@@ -387,6 +394,8 @@ func (dExt *DriverExt) VideoCrawler(configs *VideoCrawlerConfigs) (err error) {
// check if live video && run live crawler // check if live video && run live crawler
if enterPoint, isLive := liveCrawler.checkLiveVideo(screenResult.Texts); isLive { if enterPoint, isLive := liveCrawler.checkLiveVideo(screenResult.Texts); isLive {
// 直播预览流
screenResult.VideoType = "live-preview"
log.Info().Msg("live video found") log.Info().Msg("live video found")
if !liveCrawler.currentStat.isLiveTargetAchieved() { if !liveCrawler.currentStat.isLiveTargetAchieved() {
if err := liveCrawler.Run(dExt, enterPoint); err != nil { if err := liveCrawler.Run(dExt, enterPoint); err != nil {
@@ -397,8 +406,6 @@ func (dExt *DriverExt) VideoCrawler(configs *VideoCrawlerConfigs) (err error) {
continue continue
} }
} }
// 直播预览流
screenResult.VideoType = "live-preview"
} else { } else {
// 点播 // 点播
// check feed type and incr feed count // check feed type and incr feed count
@@ -407,7 +414,7 @@ func (dExt *DriverExt) VideoCrawler(configs *VideoCrawlerConfigs) (err error) {
log.Warn().Err(err).Msg("incr feed failed") log.Warn().Err(err).Msg("incr feed failed")
} else { } else {
// simulation watch feed video // simulation watch feed video
sleepStrict(lastSwipeTime, screenResult.Feed.PlayDuration) sleepStrict(swipeFinishTime, screenResult.Feed.PlayDuration)
} }
} }
@@ -417,18 +424,15 @@ func (dExt *DriverExt) VideoCrawler(configs *VideoCrawlerConfigs) (err error) {
return nil return nil
} }
// swipe to next feed video
log.Info().Msg("swipe to next feed video")
if err = dExt.SwipeUp(); err != nil {
log.Error().Err(err).Msg("swipe up failed")
return err
}
lastSwipeTime = time.Now()
// check if feed page // check if feed page
if err := dExt.Driver.AssertForegroundApp(configs.AppPackageName, "feed"); err != nil { if err := dExt.Driver.AssertForegroundApp(configs.AppPackageName, "feed"); err != nil {
return err return err
} }
// log swipe timelines
screenResult.SwipeStartTime = swipeStartTime.UnixMilli()
screenResult.SwipeFinishTime = swipeFinishTime.UnixMilli()
screenResult.Elapsed = time.Since(swipeFinishTime).Milliseconds()
} }
} }
} }
@@ -475,6 +479,9 @@ type FeedVideo struct {
ShareCount int64 `json:"share_count"` // feed 分享数 ShareCount int64 `json:"share_count"` // feed 分享数
// 记录仿真决策信息 // 记录仿真决策信息
PlayDuration int64 `json:"play_duration"` // 播放时长(ms) PlayDuration int64 `json:"play_duration"` // 播放时长(ms)
// timelines
PreloadTimestamp int64 `json:"preload_timestamp"` // 预加载时间戳
} }
type LiveRoom struct { type LiveRoom struct {