From b25684a5a677df493f7c8b72f1bb8ac27fdb8bf0 Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Thu, 22 May 2025 19:57:35 +0300 Subject: [PATCH] make default task schedules configurable --- classes/Config.php | 39 ++++++++++++++++++++++++++++++++++++++- classes/RSSUtils.php | 18 +++++++++--------- 2 files changed, 47 insertions(+), 10 deletions(-) diff --git a/classes/Config.php b/classes/Config.php index a4d2eb6b3..57878fb42 100644 --- a/classes/Config.php +++ b/classes/Config.php @@ -188,6 +188,33 @@ class Config { * key is a 32 byte hex string which may be generated using `update.php --gen-encryption-key` */ const ENCRYPTION_KEY = "ENCRYPTION_KEY"; + /** scheduled task to purge orphaned articles, value should be valid cron expression */ + const SCHEDULE_PURGE_ORPHANS = "SCHEDULE_PURGE_ORPHANS"; + + /** scheduled task to expire disk cache, value should be valid cron expression */ + const SCHEDULE_DISK_CACHE_EXPIRE_ALL = "SCHEDULE_DISK_CACHE_EXPIRE_ALL"; + + /** scheduled task, value should be valid cron expression */ + const SCHEDULE_DISABLE_FAILED_FEEDS = "SCHEDULE_DISABLE_FAILED_FEEDS"; + + /** scheduled task to migrate feed icons from legacy dir, value should be valid cron expression */ + const SCHEDULE_MIGRATE_FEED_ICONS = "SCHEDULE_MIGRATE_FEED_ICONS"; + + /** scheduled task to cleanup feed icons, value should be valid cron expression */ + const SCHEDULE_CLEANUP_FEED_ICONS = "SCHEDULE_CLEANUP_FEED_ICONS"; + + /** scheduled task to disable feed updates of inactive users, value should be valid cron expression */ + const SCHEDULE_LOG_DAEMON_UPDATE_LOGIN_LIMIT_USERS = "SCHEDULE_LOG_DAEMON_UPDATE_LOGIN_LIMIT_USERS"; + + /** scheduled task to cleanup error log, value should be valid cron expression */ + const SCHEDULE_EXPIRE_ERROR_LOG = "SCHEDULE_EXPIRE_ERROR_LOG"; + + /** scheduled task to cleanup update daemon lock files, value should be valid cron expression */ + const SCHEDULE_EXPIRE_LOCK_FILES = "SCHEDULE_EXPIRE_LOCK_FILES"; + + /** scheduled task to send digests, value should be valid cron expression */ + const SCHEDULE_SEND_HEADLINES_DIGESTS = "SCHEDULE_SEND_HEADLINES_DIGESTS"; + /** default values for all global configuration options */ private const _DEFAULTS = [ Config::DB_TYPE => [ "pgsql", Config::T_STRING ], @@ -244,7 +271,17 @@ class Config { Config::T_STRING ], Config::HTTP_429_THROTTLE_INTERVAL => [ 3600, Config::T_INT ], Config::DISABLE_LOGIN_FORM => [ "", Config::T_BOOL ], - Config::ENCRYPTION_KEY => [ "", Config::T_STRING ] + Config::ENCRYPTION_KEY => [ "", Config::T_STRING ], + Config::SCHEDULE_PURGE_ORPHANS => ["@daily", Config::T_STRING], + Config::SCHEDULE_DISK_CACHE_EXPIRE_ALL => ["@daily", Config::T_STRING], + Config::SCHEDULE_DISABLE_FAILED_FEEDS => ["@daily", Config::T_STRING], + Config::SCHEDULE_MIGRATE_FEED_ICONS => ["@daily", Config::T_STRING], + Config::SCHEDULE_CLEANUP_FEED_ICONS => ["@daily", Config::T_STRING], + Config::SCHEDULE_LOG_DAEMON_UPDATE_LOGIN_LIMIT_USERS => + ["@daily", Config::T_STRING], + Config::SCHEDULE_EXPIRE_ERROR_LOG => ["@hourly", Config::T_STRING], + Config::SCHEDULE_EXPIRE_LOCK_FILES => ["@hourly", Config::T_STRING], + Config::SCHEDULE_SEND_HEADLINES_DIGESTS => ["@hourly", Config::T_STRING], ]; private static ?Config $instance = null; diff --git a/classes/RSSUtils.php b/classes/RSSUtils.php index 376996a95..5fc8ddcef 100644 --- a/classes/RSSUtils.php +++ b/classes/RSSUtils.php @@ -1689,7 +1689,7 @@ class RSSUtils { $scheduler = Scheduler::getInstance(); - $scheduler->add_scheduled_task('purge_orphans', '@daily', + $scheduler->add_scheduled_task('purge_orphans', Config::get(Config::SCHEDULE_PURGE_ORPHANS), function() { Article::_purge_orphans(); @@ -1697,7 +1697,7 @@ class RSSUtils { } ); - $scheduler->add_scheduled_task('disk_cache_expire_all', '@daily', + $scheduler->add_scheduled_task('disk_cache_expire_all', Config::get(Config::SCHEDULE_PURGE_ORPHANS), function() { $cache = DiskCache::instance(""); $cache->expire_all(); @@ -1706,7 +1706,7 @@ class RSSUtils { } ); - $scheduler->add_scheduled_task('disable_failed_feeds', '@daily', + $scheduler->add_scheduled_task('disable_failed_feeds', Config::get(Config::SCHEDULE_DISABLE_FAILED_FEEDS), function() { self::disable_failed_feeds(); @@ -1714,7 +1714,7 @@ class RSSUtils { } ); - $scheduler->add_scheduled_task('migrate_feed_icons', '@daily', + $scheduler->add_scheduled_task('migrate_feed_icons', Config::get(Config::SCHEDULE_MIGRATE_FEED_ICONS), function() { self::migrate_feed_icons(); @@ -1722,7 +1722,7 @@ class RSSUtils { } ); - $scheduler->add_scheduled_task('cleanup_feed_icons', '@daily', + $scheduler->add_scheduled_task('cleanup_feed_icons', Config::get(Config::SCHEDULE_CLEANUP_FEED_ICONS), function() { self::cleanup_feed_icons(); @@ -1730,7 +1730,7 @@ class RSSUtils { } ); - $scheduler->add_scheduled_task('log_daemon_update_login_limit_users', '@daily', + $scheduler->add_scheduled_task('log_daemon_update_login_limit_users', Config::get(Config::SCHEDULE_LOG_DAEMON_UPDATE_LOGIN_LIMIT_USERS), function() { $login_limit = Config::get(Config::DAEMON_UPDATE_LOGIN_LIMIT); @@ -1753,7 +1753,7 @@ class RSSUtils { } ); - $scheduler->add_scheduled_task('expire_error_log', '@hourly', + $scheduler->add_scheduled_task('expire_error_log', Config::get(Config::SCHEDULE_EXPIRE_ERROR_LOG), function() { self::expire_error_log(); @@ -1761,7 +1761,7 @@ class RSSUtils { } ); - $scheduler->add_scheduled_task('expire_lock_files', '@hourly', + $scheduler->add_scheduled_task('expire_lock_files', Config::get(Config::SCHEDULE_EXPIRE_LOCK_FILES), function() { self::expire_lock_files(); @@ -1769,7 +1769,7 @@ class RSSUtils { } ); - $scheduler->add_scheduled_task('send_headlines_digests', '@hourly', + $scheduler->add_scheduled_task('send_headlines_digests', Config::get(Config::SCHEDULE_SEND_HEADLINES_DIGESTS), function() { Digest::send_headlines_digests();