Browse Source

添加每轮下载字幕完成后执行清理 chrome 的逻辑 fix #29

Signed-off-by: allan716 <[email protected]>
allan716 4 năm trước cách đây
mục cha
commit
48f9326d09
4 tập tin đã thay đổi với 142 bổ sung81 xóa
  1. 99 70
      TestCode/test_timeout.go
  2. 2 0
      internal/pkg/hot_fix/hot_fix_hub.go
  3. 28 0
      internal/pkg/util.go
  4. 13 11
      main.go

+ 99 - 70
TestCode/test_timeout.go

@@ -19,80 +19,14 @@ func DownloadTest() error {
 		}()
 		println(inData.Index, "start...")
 
-		browser, err := rod_helper.NewBrowser("")
-		if err != nil {
-			println(inData.Index, "rod_helper.NewBrowser", err)
-			return err
-		}
-		defer func() {
-			browser.Close()
-			println(inData.Index, "browser closed")
-		}()
-		page, err := rod_helper.NewPageNavigate(browser, "https://www.baidu.com", 10*time.Second, 5)
-		if err != nil {
-			return err
+		err2 := oneStep(inData)
+		if err2 != nil {
+			return err2
 		}
-		page.MustSetUserAgent(&proto.NetworkSetUserAgentOverride{
-			UserAgent: pkg.RandomUserAgent(true),
-		})
-		err = page.WaitLoad()
-		time.Sleep(10 * time.Second)
 
 		return nil
 
-		//outDataChan := make(chan int)
-		//for i := 0; i < 2; i++ {
-		//	go func(in int) {
-		//
-		//		var outData int
-		//		outData = -1
-		//		defer func() {
-		//			println(inData.Index, in, "go func done")
-		//			outDataChan <- outData
-		//		}()
-		//
-		//		browser, err := rod_helper.NewBrowser("")
-		//		if err != nil {
-		//			println(inData.Index, in, "rod_helper.NewBrowser", err)
-		//			return
-		//		}
-		//		defer func() {
-		//			browser.Close()
-		//			println(inData.Index, in, "browser closed")
-		//		}()
-		//		page, err := rod_helper.NewPageNavigate(browser, "https://www.baidu.com", 10*time.Second, 5)
-		//		if err != nil {
-		//			return
-		//		}
-		//		page.MustSetUserAgent(&proto.NetworkSetUserAgentOverride{
-		//			UserAgent: pkg.RandomUserAgent(true),
-		//		})
-		//		err = page.WaitLoad()
-		//		time.Sleep(6 * time.Second)
-		//
-		//		outData = in
-		//	}(i)
-		//}
-		//
-		//countResult := 0
-		//for {
-		//	select {
-		//	case <-inData.Ctx.Done():
-		//		// 超时退出
-		//		return nil
-		//	case v, ok := <-outDataChan:
-		//		if ok == true {
-		//			println(inData.Index, "outData ok", v)
-		//		} else {
-		//			println(inData.Index, "outData not ok", v)
-		//		}
-		//		countResult++
-		//		// 跳出,收到够反馈了
-		//		if countResult == 2 {
-		//			return nil
-		//		}
-		//	}
-		//}
+		//return goStep(inData)
 	}
 
 	antPool, err := ants.NewPoolWithFunc(2, func(inData interface{}) {
@@ -146,6 +80,101 @@ func DownloadTest() error {
 	return nil
 }
 
+func goStep(inData InputData) error {
+	outDataChan := make(chan int)
+	for i := 0; i < 2; i++ {
+		go func(cxt context.Context, in int) {
+
+			var outData int
+			outData = -1
+			defer func() {
+				println(inData.Index, in, "go func done")
+				outDataChan <- outData
+			}()
+
+			browser, err := rod_helper.NewBrowser("")
+			if err != nil {
+				println(inData.Index, in, "rod_helper.NewBrowser", err)
+				return
+			}
+			defer func() {
+				browser.Close()
+				println(inData.Index, in, "browser closed")
+			}()
+
+			ontTime := false
+
+			for {
+				select {
+				case <-cxt.Done():
+					return
+				default:
+					if ontTime == true {
+						return
+					}
+					ontTime = true
+
+					page, err := rod_helper.NewPageNavigate(browser, "https://www.baidu.com", 5*time.Second, 5)
+					if err != nil {
+						println("NewPageNavigate time out", err)
+						return
+					}
+					page.MustSetUserAgent(&proto.NetworkSetUserAgentOverride{
+						UserAgent: pkg.RandomUserAgent(true),
+					})
+					err = page.WaitLoad()
+					time.Sleep(10 * time.Second)
+
+					outData = in
+				}
+			}
+
+		}(inData.Ctx, i)
+	}
+
+	countResult := 0
+	for {
+		select {
+		case <-inData.Ctx.Done():
+			// 超时退出
+			return nil
+		case v, ok := <-outDataChan:
+			if ok == true {
+				println(inData.Index, "outData ok", v)
+			} else {
+				println(inData.Index, "outData not ok", v)
+			}
+			countResult++
+			// 跳出,收到够反馈了
+			if countResult == 2 {
+				return nil
+			}
+		}
+	}
+}
+
+func oneStep(inData InputData) error {
+	browser, err := rod_helper.NewBrowser("")
+	if err != nil {
+		println(inData.Index, "rod_helper.NewBrowser", err)
+		return err
+	}
+	defer func() {
+		browser.Close()
+		println(inData.Index, "browser closed")
+	}()
+	page, err := rod_helper.NewPageNavigate(browser, "https://www.baidu.com", 10*time.Second, 5)
+	if err != nil {
+		return err
+	}
+	page.MustSetUserAgent(&proto.NetworkSetUserAgentOverride{
+		UserAgent: pkg.RandomUserAgent(true),
+	})
+	err = page.WaitLoad()
+	time.Sleep(10 * time.Second)
+	return nil
+}
+
 type InputData struct {
 	Ctx   context.Context
 	Index int

+ 2 - 0
internal/pkg/hot_fix/hot_fix_hub.go

@@ -35,6 +35,7 @@ func HotFixProcess(param types.HotFixParam) error {
 		_, bFound := hotFixRecord[hotfixCase.GetKey()]
 		if bFound == false {
 			// 没有找到那么就需要进行修复
+			log_helper.GetLogger().Infoln("hotfix", hotfixCase.GetKey(), "start...")
 			processResult, err := hotfixCase.Process()
 			// 找到对应的 hotfix 方案进行 interface 数据的转换输出
 			switch hotfixCase.GetKey() {
@@ -58,6 +59,7 @@ func HotFixProcess(param types.HotFixParam) error {
 			if result.Error != nil {
 				return errors.New(fmt.Sprintf("hotfix %s is done, but record failed, %s", hotfixCase.GetKey(), result.Error))
 			}
+			log_helper.GetLogger().Infoln("hotfix", hotfixCase.GetKey(), "is done")
 		}
 		// 找到了,目前的逻辑是成功才插入,那么查询到了,就默认是执行成功了
 	}

+ 28 - 0
internal/pkg/util.go

@@ -12,9 +12,11 @@ import (
 	"io/ioutil"
 	"net/http"
 	"os"
+	"os/exec"
 	"path"
 	"path/filepath"
 	"regexp"
+	"runtime"
 	"strconv"
 	"strings"
 	"time"
@@ -389,3 +391,29 @@ func CopyTestData(srcDir string) (string, error) {
 	}
 	return testDir, nil
 }
+
+// CloseChrome 强行结束没有关闭的 Chrome 进程
+func CloseChrome() {
+
+	cmdString := ""
+	sysType := runtime.GOOS
+	if sysType == "linux" {
+		// LINUX系统
+		cmdString = "pkill chrome"
+	}
+	if sysType == "windows" {
+		// windows系统
+		cmdString = "taskkill /F /im chromedriver.exe"
+	}
+
+	if cmdString == "" {
+		log_helper.GetLogger().Errorln("CloseChrome OS:", sysType)
+		return
+	}
+
+	command := exec.Command(cmdString)
+	err := command.Run()
+	if err != nil {
+		log_helper.GetLogger().Errorln("CloseChrome", err)
+	}
+}

+ 13 - 11
main.go

@@ -4,6 +4,7 @@ import (
 	"github.com/allanpk716/ChineseSubFinder/internal"
 	"github.com/allanpk716/ChineseSubFinder/internal/dao"
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg"
+	"github.com/allanpk716/ChineseSubFinder/internal/pkg/hot_fix"
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/log_helper"
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/notify_center"
 	"github.com/allanpk716/ChineseSubFinder/internal/types"
@@ -46,17 +47,17 @@ func main() {
 
 	// ------ Hot Fix Start ------
 	// 开始修复
-	//log.Infoln("HotFix Start...")
-	//err = hot_fix.HotFixProcess(types.HotFixParam{
-	//	MovieRootDir:  config.MovieFolder,
-	//	SeriesRootDir: config.SeriesFolder,
-	//})
-	//if err != nil {
-	//	log.Errorln("HotFixProcess()", err)
-	//	log.Infoln("HotFix End")
-	//	return
-	//}
-	//log.Infoln("HotFix End")
+	log.Infoln("HotFix Start...")
+	err = hot_fix.HotFixProcess(types.HotFixParam{
+		MovieRootDir:  config.MovieFolder,
+		SeriesRootDir: config.SeriesFolder,
+	})
+	if err != nil {
+		log.Errorln("HotFixProcess()", err)
+		log.Infoln("HotFix End")
+		return
+	}
+	log.Infoln("HotFix End")
 	// ------ Hot Fix End ------
 
 	// 初始化通知缓存模块
@@ -94,6 +95,7 @@ func DownLoadStart(httpProxy string) {
 	defer func() {
 		log.Infoln("Download One End...")
 		notify_center.Notify.Send()
+		pkg.CloseChrome()
 	}()
 	notify_center.Notify.Clear()