scheduler.go 2.5 KB

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