scheduler.go 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. package main
  2. import (
  3. "log"
  4. "net/http"
  5. "imuslab.com/arozos/mod/common"
  6. module "imuslab.com/arozos/mod/modules"
  7. prout "imuslab.com/arozos/mod/prouter"
  8. "imuslab.com/arozos/mod/time/nightly"
  9. "imuslab.com/arozos/mod/time/scheduler"
  10. )
  11. /*
  12. Nightly.go
  13. author: tobychui
  14. This is a handle for putting everything that is required to run everynight.
  15. Default: Run once every day 3am in the morning.
  16. */
  17. var (
  18. nightlyManager *nightly.TaskManager
  19. systemScheduler *scheduler.Scheduler
  20. )
  21. func NightlyTasksInit() {
  22. /*
  23. Nighty Task Manager
  24. The tasks that should be done once per night. Internal function only.
  25. */
  26. nightlyManager = nightly.NewNightlyTaskManager(*nightlyTaskRunTime)
  27. }
  28. func SchedulerInit() {
  29. /*
  30. System Scheudler
  31. The internal scheudler for arozos
  32. */
  33. //Create an user router and its module
  34. router := prout.NewModuleRouter(prout.RouterOption{
  35. ModuleName: "Tasks Scheduler",
  36. AdminOnly: false,
  37. UserHandler: userHandler,
  38. DeniedHandler: func(w http.ResponseWriter, r *http.Request) {
  39. common.SendErrorResponse(w, "Permission Denied")
  40. },
  41. })
  42. //Register the module
  43. moduleHandler.RegisterModule(module.ModuleInfo{
  44. Name: "Tasks Scheduler",
  45. Group: "System Tools",
  46. IconPath: "SystemAO/arsm/img/scheduler.png",
  47. Version: "1.2",
  48. StartDir: "SystemAO/arsm/scheduler.html",
  49. SupportFW: true,
  50. InitFWSize: []int{1080, 580},
  51. LaunchFWDir: "SystemAO/arsm/scheduler.html",
  52. SupportEmb: false,
  53. })
  54. //Startup the ArOZ Emulated Crontab Service
  55. newScheduler, err := scheduler.NewScheduler(userHandler, AGIGateway, "system/cron.json")
  56. if err != nil {
  57. log.Println("ArOZ Emulated Cron Startup Failed. Stopping all scheduled tasks.")
  58. }
  59. systemScheduler = newScheduler
  60. //Register Endpoints
  61. http.HandleFunc("/system/arsm/aecron/list", func(w http.ResponseWriter, r *http.Request) {
  62. if authAgent.CheckAuth(r) {
  63. //User logged in
  64. newScheduler.HandleListJobs(w, r)
  65. } else {
  66. //User not logged in
  67. errorHandlePermissionDenied(w, r)
  68. }
  69. })
  70. router.HandleFunc("/system/arsm/aecron/add", systemScheduler.HandleAddJob)
  71. router.HandleFunc("/system/arsm/aecron/remove", systemScheduler.HandleJobRemoval)
  72. router.HandleFunc("/system/arsm/aecron/listlog", systemScheduler.HandleShowLog)
  73. //Register settings
  74. registerSetting(settingModule{
  75. Name: "Tasks Scheduler",
  76. Desc: "System Tasks and Excution Scheduler",
  77. IconPath: "SystemAO/arsm/img/small_icon.png",
  78. Group: "Cluster",
  79. StartDir: "SystemAO/arsm/aecron.html",
  80. RequireAdmin: false,
  81. })
  82. }