cron.go 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. package cron
  2. import (
  3. "time"
  4. "github.com/0xJacky/Nginx-UI/internal/cert"
  5. "github.com/0xJacky/Nginx-UI/internal/logrotate"
  6. "github.com/0xJacky/Nginx-UI/query"
  7. "github.com/0xJacky/Nginx-UI/settings"
  8. "github.com/go-co-op/gocron/v2"
  9. "github.com/uozi-tech/cosy/logger"
  10. )
  11. var s gocron.Scheduler
  12. func init() {
  13. var err error
  14. s, err = gocron.NewScheduler()
  15. if err != nil {
  16. logger.Fatalf("Init Scheduler: %v\n", err)
  17. }
  18. }
  19. var logrotateJob gocron.Job
  20. func InitCronJobs() {
  21. _, err := s.NewJob(gocron.DurationJob(30*time.Minute),
  22. gocron.NewTask(cert.AutoCert),
  23. gocron.WithSingletonMode(gocron.LimitModeWait),
  24. gocron.JobOption(gocron.WithStartImmediately()))
  25. if err != nil {
  26. logger.Fatalf("AutoCert Err: %v\n", err)
  27. }
  28. startLogrotate()
  29. cleanExpiredAuthToken()
  30. s.Start()
  31. }
  32. func RestartLogrotate() {
  33. logger.Debug("Restart Logrotate")
  34. if logrotateJob != nil {
  35. err := s.RemoveJob(logrotateJob.ID())
  36. if err != nil {
  37. logger.Error(err)
  38. return
  39. }
  40. }
  41. startLogrotate()
  42. }
  43. func startLogrotate() {
  44. if !settings.LogrotateSettings.Enabled {
  45. return
  46. }
  47. var err error
  48. logrotateJob, err = s.NewJob(
  49. gocron.DurationJob(time.Duration(settings.LogrotateSettings.Interval)*time.Minute),
  50. gocron.NewTask(logrotate.Exec),
  51. gocron.WithSingletonMode(gocron.LimitModeWait))
  52. if err != nil {
  53. logger.Fatalf("LogRotate Job: Err: %v\n", err)
  54. }
  55. }
  56. func cleanExpiredAuthToken() {
  57. _, err := s.NewJob(gocron.DurationJob(5*time.Minute), gocron.NewTask(func() {
  58. logger.Debug("clean expired auth tokens")
  59. q := query.AuthToken
  60. _, _ = q.Where(q.ExpiredAt.Lt(time.Now().Unix())).Delete()
  61. }), gocron.WithSingletonMode(gocron.LimitModeWait), gocron.JobOption(gocron.WithStartImmediately()))
  62. if err != nil {
  63. logger.Fatalf("CleanExpiredAuthToken Err: %v\n", err)
  64. }
  65. }