cron.go 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. // Copyright 2015 The Gogs Authors. All rights reserved.
  2. // Copyright 2018 Gitote. All rights reserved.
  3. //
  4. // This source code is licensed under the MIT license found in the
  5. // LICENSE file in the root directory of this source tree.
  6. package cron
  7. import (
  8. "gitote/gitote/models"
  9. "gitote/gitote/pkg/setting"
  10. "time"
  11. raven "github.com/getsentry/raven-go"
  12. "gitlab.com/gitote/cron"
  13. log "gopkg.in/clog.v1"
  14. )
  15. var c = cron.New()
  16. func NewContext() {
  17. var (
  18. entry *cron.Entry
  19. err error
  20. )
  21. if setting.Cron.UpdateMirror.Enabled {
  22. entry, err = c.AddFunc("Update mirrors", setting.Cron.UpdateMirror.Schedule, models.MirrorUpdate)
  23. if err != nil {
  24. raven.CaptureErrorAndWait(err, nil)
  25. log.Fatal(2, "Cron.(update mirrors): %v", err)
  26. }
  27. if setting.Cron.UpdateMirror.RunAtStart {
  28. entry.Prev = time.Now()
  29. entry.ExecTimes++
  30. go models.MirrorUpdate()
  31. }
  32. }
  33. if setting.Cron.RepoHealthCheck.Enabled {
  34. entry, err = c.AddFunc("Repository health check", setting.Cron.RepoHealthCheck.Schedule, models.GitFsck)
  35. if err != nil {
  36. raven.CaptureErrorAndWait(err, nil)
  37. log.Fatal(2, "Cron.(repository health check): %v", err)
  38. }
  39. if setting.Cron.RepoHealthCheck.RunAtStart {
  40. entry.Prev = time.Now()
  41. entry.ExecTimes++
  42. go models.GitFsck()
  43. }
  44. }
  45. if setting.Cron.CheckRepoStats.Enabled {
  46. entry, err = c.AddFunc("Check repository statistics", setting.Cron.CheckRepoStats.Schedule, models.CheckRepoStats)
  47. if err != nil {
  48. raven.CaptureErrorAndWait(err, nil)
  49. log.Fatal(2, "Cron.(check repository statistics): %v", err)
  50. }
  51. if setting.Cron.CheckRepoStats.RunAtStart {
  52. entry.Prev = time.Now()
  53. entry.ExecTimes++
  54. go models.CheckRepoStats()
  55. }
  56. }
  57. if setting.Cron.RepoArchiveCleanup.Enabled {
  58. entry, err = c.AddFunc("Repository archive cleanup", setting.Cron.RepoArchiveCleanup.Schedule, models.DeleteOldRepositoryArchives)
  59. if err != nil {
  60. raven.CaptureErrorAndWait(err, nil)
  61. log.Fatal(2, "Cron.(repository archive cleanup): %v", err)
  62. }
  63. if setting.Cron.RepoArchiveCleanup.RunAtStart {
  64. entry.Prev = time.Now()
  65. entry.ExecTimes++
  66. go models.DeleteOldRepositoryArchives()
  67. }
  68. }
  69. c.Start()
  70. }
  71. // ListTasks returns all running cron tasks.
  72. func ListTasks() []*cron.Entry {
  73. return c.Entries()
  74. }