nightly.go 979 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. package nightly
  2. import "time"
  3. /*
  4. Nightly.go
  5. Author: tobychui
  6. This module handles tasks that have to be done every night
  7. like updating all user storage capacity and clean trash etc
  8. */
  9. type TaskManager struct {
  10. NightlTasks []func()
  11. }
  12. func NewNightlyTaskManager(nightlyTaskRunTime int) *TaskManager {
  13. //Create a new return structure
  14. thisManager := TaskManager{
  15. NightlTasks: []func(){},
  16. }
  17. //Start the nightly scheduler
  18. go func(tm *TaskManager) {
  19. t := time.Now()
  20. n := time.Date(t.Year(), t.Month(), t.Day(), nightlyTaskRunTime, 0, 0, 0, t.Location())
  21. d := n.Sub(t)
  22. if d < 0 {
  23. n = n.Add(24 * time.Hour)
  24. d = n.Sub(t)
  25. }
  26. for {
  27. time.Sleep(d)
  28. d = 24 * time.Hour
  29. tm.NightlyTaskRun()
  30. }
  31. }(&thisManager)
  32. return &thisManager
  33. }
  34. func (tm *TaskManager) NightlyTaskRun() {
  35. for _, nightlyTask := range tm.NightlTasks {
  36. nightlyTask()
  37. }
  38. }
  39. func (tm *TaskManager) RegisterNightlyTask(task func()) {
  40. tm.NightlTasks = append(tm.NightlTasks, task)
  41. }