scheduler.go 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  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 SchedulerInit() {
  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. System Scheudler
  28. The internal scheudler for arozos
  29. */
  30. //Create an user router and its module
  31. router := prout.NewModuleRouter(prout.RouterOption{
  32. ModuleName: "Tasks Scheduler",
  33. AdminOnly: false,
  34. UserHandler: userHandler,
  35. DeniedHandler: func(w http.ResponseWriter, r *http.Request) {
  36. sendErrorResponse(w, "Permission Denied")
  37. },
  38. })
  39. //Register the module
  40. moduleHandler.RegisterModule(module.ModuleInfo{
  41. Name: "Tasks Scheduler",
  42. Group: "System Tools",
  43. IconPath: "SystemAO/arsm/img/scheduler.png",
  44. Version: "1.2",
  45. StartDir: "SystemAO/arsm/scheduler.html",
  46. SupportFW: true,
  47. InitFWSize: []int{1080, 580},
  48. LaunchFWDir: "SystemAO/arsm/scheduler.html",
  49. SupportEmb: false,
  50. })
  51. //Startup the ArOZ Emulated Crontab Service
  52. newScheduler, err := scheduler.NewScheduler(userHandler, AGIGateway, "system/cron.json")
  53. if err != nil {
  54. log.Println("ArOZ Emulated Cron Startup Failed. Stopping all scheduled tasks.")
  55. }
  56. systemScheduler = newScheduler
  57. //Register Endpoints
  58. http.HandleFunc("/system/arsm/aecron/list", func(w http.ResponseWriter, r *http.Request) {
  59. if authAgent.CheckAuth(r) {
  60. //User logged in
  61. newScheduler.HandleListJobs(w, r)
  62. } else {
  63. //User not logged in
  64. errorHandlePermissionDenied(w, r)
  65. }
  66. })
  67. router.HandleFunc("/system/arsm/aecron/add", newScheduler.HandleAddJob)
  68. router.HandleFunc("/system/arsm/aecron/remove", newScheduler.HandleJobRemoval)
  69. router.HandleFunc("/system/arsm/aecron/listlog", newScheduler.HandleShowLog)
  70. //Register settings
  71. registerSetting(settingModule{
  72. Name: "Tasks Scheduler",
  73. Desc: "System Tasks and Excution Scheduler",
  74. IconPath: "SystemAO/arsm/img/small_icon.png",
  75. Group: "Cluster",
  76. StartDir: "SystemAO/arsm/aecron.html",
  77. RequireAdmin: false,
  78. })
  79. }