feat: catch interrupt signal

This commit is contained in:
lilong.129
2023-05-03 23:00:17 +08:00
parent 4ee3b43d1f
commit 1bb2079c87
6 changed files with 63 additions and 18 deletions

View File

@@ -12,8 +12,10 @@ import (
"mime/multipart"
"net/http"
"os"
"os/signal"
"path/filepath"
"strings"
"syscall"
"time"
"github.com/pkg/errors"
@@ -62,6 +64,7 @@ type DriverExt struct {
frame *bytes.Buffer
doneMjpegStream chan bool
OCRService IOCRService // used to get texts from image
interruptSignal chan os.Signal
// cache step data
cacheStepData cacheStepData
@@ -75,7 +78,9 @@ func NewDriverExt(device Device, driver WebDriver) (dExt *DriverExt, err error)
ScreenShots: make([]string, 0),
OcrResults: make(map[string]string),
},
interruptSignal: make(chan os.Signal, 1),
}
signal.Notify(dExt.interruptSignal, syscall.SIGTERM, syscall.SIGINT)
dExt.doneMjpegStream = make(chan bool, 1)
// get device window size

View File

@@ -148,7 +148,11 @@ func (l *LiveCrawler) Run(driver *DriverExt, enterPoint PointF) error {
for !l.currentStat.isLiveTargetAchieved() {
select {
case <-l.currentStat.timer.C:
return errors.Wrap(code.TimeoutError, "timeout in live crawler")
log.Warn().Msg("timeout in live crawler")
return errors.Wrap(code.TimeoutError, "live crawler timeout")
case <-l.driver.interruptSignal:
log.Warn().Msg("interrupted in live crawler")
return errors.Wrap(code.InterruptError, "live crawler interrupted")
default:
// check if live room
if err := l.driver.assertActivity(l.configs.AppPackageName, "live"); err != nil {
@@ -246,7 +250,11 @@ func (dExt *DriverExt) VideoCrawler(configs *VideoCrawlerConfigs) (err error) {
for {
select {
case <-currVideoStat.timer.C:
return errors.Wrap(code.TimeoutError, "timeout in feed crawler")
log.Warn().Msg("timeout in feed crawler")
return errors.Wrap(code.TimeoutError, "feed crawler timeout")
case <-dExt.interruptSignal:
log.Warn().Msg("interrupted in feed crawler")
return errors.Wrap(code.InterruptError, "feed crawler interrupted")
default:
// check if feed page
if err := dExt.assertActivity(configs.AppPackageName, "feed"); err != nil {
@@ -271,7 +279,7 @@ func (dExt *DriverExt) VideoCrawler(configs *VideoCrawlerConfigs) (err error) {
log.Info().Msg("live video found")
if !liveCrawler.currentStat.isLiveTargetAchieved() {
if err := liveCrawler.Run(dExt, enterPoint); err != nil {
if errors.Is(err, code.TimeoutError) {
if errors.Is(err, code.TimeoutError) || errors.Is(err, code.InterruptError) {
return err
}
log.Error().Err(err).Msg("run live crawler failed, continue")