handler.go 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. package qyfw
  2. import (
  3. "io/ioutil"
  4. "log"
  5. "os"
  6. "path/filepath"
  7. "qfw/util"
  8. "strings"
  9. "sync"
  10. "time"
  11. )
  12. var (
  13. AllJobs = map[string]*Job{}
  14. LoadLuaScripePool = make(chan bool, 1)
  15. LoadLuaScripeWait = &sync.WaitGroup{}
  16. )
  17. //加载全部脚本
  18. func LoadAllLuaScript() {
  19. filepath.Walk("./luascript", func(path string, info os.FileInfo, err error) error {
  20. LoadLuaScripePool <- true
  21. LoadLuaScripeWait.Add(1)
  22. go func() {
  23. defer func() {
  24. <-LoadLuaScripePool
  25. LoadLuaScripeWait.Done()
  26. }()
  27. if info.IsDir() || !strings.HasSuffix(info.Name(), ".lua") {
  28. return
  29. }
  30. bs, _ := ioutil.ReadFile(path)
  31. sp := NewLuaScript(strings.TrimRight(info.Name(), ".lua"), string(bs))
  32. if sp != nil {
  33. AllJobs[sp.Name] = sp
  34. log.Println("成功加载脚本", info.Name())
  35. }
  36. }()
  37. return nil
  38. })
  39. LoadLuaScripeWait.Wait()
  40. go runJob()
  41. }
  42. //开始定时任务
  43. func runJob() {
  44. util.Try(func() {
  45. LoadDatasByEs(&SysConfig)
  46. util.WriteSysConfig(SysConfig)
  47. }, func(e interface{}) {})
  48. time.AfterFunc(time.Duration(util.IntAll(SysConfig["durationMinutes"]))*time.Minute, runJob)
  49. }
  50. //初始化脚本
  51. func NewLuaScript(name, luafile string) *Job {
  52. defer util.Catch()
  53. job := &Job{}
  54. job.Results = &[]map[string]interface{}{}
  55. job.Name = name
  56. job.ScriptFile = luafile
  57. job.EachListPool = make(chan bool, PoolSize)
  58. //只是单纯的验证一下,lua脚本是否有问题
  59. script := &Script{}
  60. if !script.LoadScript(name, luafile, true) {
  61. return nil
  62. }
  63. return job
  64. }