|
@@ -33,8 +33,8 @@ const (
|
|
|
execute_return_type_list = 1
|
|
|
execute_return_type_table = 2
|
|
|
|
|
|
- qlm_list_lua = "/script/qlm_list.lua"
|
|
|
- qlm_detail_lua = "/script/qlm_detail.lua"
|
|
|
+ qlm_list_lua = "/qlm_list.lua"
|
|
|
+ qlm_detail_lua = "/qlm_detail.lua"
|
|
|
)
|
|
|
|
|
|
var (
|
|
@@ -43,7 +43,9 @@ var (
|
|
|
)
|
|
|
|
|
|
type GLVm struct {
|
|
|
- AttachesDir string
|
|
|
+ ScriptDir string
|
|
|
+ LogsDir string
|
|
|
+ LogsFile *os.File
|
|
|
Dnf backend.EventNotifyFace
|
|
|
Headless bool
|
|
|
ShowImage bool
|
|
@@ -59,9 +61,10 @@ type GLBrowser struct {
|
|
|
CancelFn context.CancelFunc
|
|
|
}
|
|
|
|
|
|
-func NewGLVM(attachesDir string, dnf be.EventNotifyFace) *GLVm {
|
|
|
+func NewGLVM(scriptDir, logsDir string, dnf be.EventNotifyFace) *GLVm {
|
|
|
return &GLVm{
|
|
|
- AttachesDir: attachesDir,
|
|
|
+ ScriptDir: scriptDir,
|
|
|
+ LogsDir: logsDir,
|
|
|
Dnf: dnf,
|
|
|
DataSaveOver: make(chan bool, 1),
|
|
|
}
|
|
@@ -71,9 +74,9 @@ func NewGLVM(attachesDir string, dnf be.EventNotifyFace) *GLVm {
|
|
|
func (glvm *GLVm) LoadScript(page string) string {
|
|
|
var path string
|
|
|
if page == "list" {
|
|
|
- path = glvm.AttachesDir + qlm_list_lua
|
|
|
+ path = glvm.ScriptDir + qlm_list_lua
|
|
|
} else if page == "detail" {
|
|
|
- path = glvm.AttachesDir + qlm_detail_lua
|
|
|
+ path = glvm.ScriptDir + qlm_detail_lua
|
|
|
}
|
|
|
|
|
|
bs, err := os.ReadFile(path)
|
|
@@ -85,9 +88,20 @@ func (glvm *GLVm) LoadScript(page string) string {
|
|
|
|
|
|
// RunScript 执行lua代码
|
|
|
func (glvm *GLVm) RunScript(script, recordId string) error {
|
|
|
- defer Catch()
|
|
|
+ defer qu.Catch()
|
|
|
var s *lua.LState = lua.NewState()
|
|
|
defer s.Close()
|
|
|
+ //日志文件
|
|
|
+ now := time.Now()
|
|
|
+ path := glvm.LogsDir + fmt.Sprintf("/%s.log", qu.FormatDate(&now, qu.Date_Short_Layout))
|
|
|
+ qu.Debug("log path:", path)
|
|
|
+ file, err := os.OpenFile(path, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0666)
|
|
|
+ if err != nil {
|
|
|
+ qu.Debug("日志创建失败:", err)
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ glvm.LogsFile = file
|
|
|
+ defer glvm.LogsFile.Close()
|
|
|
//方法绑定
|
|
|
glvm.ResetBrowser() //先创建浏览器对象
|
|
|
glvm.BindLuaState(s) //绑定虚拟机函数
|
|
@@ -97,6 +111,7 @@ func (glvm *GLVm) RunScript(script, recordId string) error {
|
|
|
b.CancelFn()
|
|
|
b.Ctx = nil
|
|
|
b.CancelFn = nil
|
|
|
+ b = nil
|
|
|
}
|
|
|
}()
|
|
|
|
|
@@ -137,29 +152,26 @@ func (glvm *GLVm) ResetBrowser() {
|
|
|
}
|
|
|
|
|
|
// BindLuaState 绑定虚拟机函数
|
|
|
-func (glvm *GLVm) BindLuaState(state *lua.LState) {
|
|
|
- state.SetGlobal("browser_reset", state.NewFunction(func(l *lua.LState) int {
|
|
|
+func (glvm *GLVm) BindLuaState(s *lua.LState) {
|
|
|
+ s.SetGlobal("browser_reset", s.NewFunction(func(l *lua.LState) int {
|
|
|
glvm.ResetBrowser()
|
|
|
return 0
|
|
|
}))
|
|
|
- //
|
|
|
- state.SetGlobal("browser_save", state.NewFunction(func(l *lua.LState) int {
|
|
|
- //spiderCode := l.ToString(-5)
|
|
|
- //siteName := l.ToString(-4)
|
|
|
- //siteChannelName := l.ToString(-3)
|
|
|
- //siteChannelUrl := l.ToString(-2)
|
|
|
- /*table := l.ToTable(-1)
|
|
|
- data := TableToMap(table)*/
|
|
|
- //vm.S.Save(spiderCode, siteName, siteChannelName, siteChannelUrl, data)
|
|
|
+ s.SetGlobal("browser_savelog", s.NewFunction(func(l *lua.LState) int {
|
|
|
+ text := l.ToString(-1)
|
|
|
+ qu.Debug("log:", text)
|
|
|
+ now := time.Now()
|
|
|
+ glvm.LogsFile.Write([]byte(fmt.Sprintf("%s%s%s%s", qu.FormatDate(&now, qu.Date_Full_Layout), "---", text, "\n")))
|
|
|
return 0
|
|
|
}))
|
|
|
}
|
|
|
|
|
|
func (glvm *GLVm) CloseTabs() {
|
|
|
- if b := glvm.B; b != nil {
|
|
|
- b.CancelFn()
|
|
|
- b.Ctx = nil
|
|
|
- b.CancelFn = nil
|
|
|
+ if glvm.B != nil && glvm.B.CancelFn != nil {
|
|
|
+ glvm.B.CancelFn()
|
|
|
+ glvm.B.Ctx = nil
|
|
|
+ glvm.B.CancelFn = nil
|
|
|
+ glvm.B = nil
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -588,7 +600,7 @@ func (b *GLBrowser) BindLuaState(s *lua.LState, recordId string) {
|
|
|
}))
|
|
|
//保存数据
|
|
|
s.SetGlobal("browser_savedata", s.NewFunction(func(l *lua.LState) int {
|
|
|
- fmt.Println("---browser_upsertdata---")
|
|
|
+ //fmt.Println("---browser_savedata---")
|
|
|
page := l.ToString(-2)
|
|
|
data := l.ToTable(-1)
|
|
|
result := TableToMap(data)
|