scheduler.go 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. // SPDX-FileCopyrightText: Copyright The Miniflux Authors. All rights reserved.
  2. // SPDX-License-Identifier: Apache-2.0
  3. package cli // import "miniflux.app/v2/internal/cli"
  4. import (
  5. "time"
  6. "miniflux.app/v2/internal/config"
  7. "miniflux.app/v2/internal/logger"
  8. "miniflux.app/v2/internal/storage"
  9. "miniflux.app/v2/internal/worker"
  10. )
  11. func runScheduler(store *storage.Storage, pool *worker.Pool) {
  12. logger.Info(`Starting background scheduler...`)
  13. go feedScheduler(
  14. store,
  15. pool,
  16. config.Opts.PollingFrequency(),
  17. config.Opts.BatchSize(),
  18. )
  19. go cleanupScheduler(
  20. store,
  21. config.Opts.CleanupFrequencyHours(),
  22. )
  23. }
  24. func feedScheduler(store *storage.Storage, pool *worker.Pool, frequency, batchSize int) {
  25. for range time.Tick(time.Duration(frequency) * time.Minute) {
  26. jobs, err := store.NewBatch(batchSize)
  27. logger.Info("[Scheduler:Feed] Pushing %d jobs to the queue", len(jobs))
  28. if err != nil {
  29. logger.Error("[Scheduler:Feed] %v", err)
  30. } else {
  31. pool.Push(jobs)
  32. }
  33. }
  34. }
  35. func cleanupScheduler(store *storage.Storage, frequency int) {
  36. for range time.Tick(time.Duration(frequency) * time.Hour) {
  37. runCleanupTasks(store)
  38. }
  39. }