From 20c3c10152f4be66ede78bb8990e0d7c95485e73 Mon Sep 17 00:00:00 2001 From: shimon Date: Mon, 9 Jan 2023 11:13:02 +0200 Subject: [PATCH] maintenance switched loop internal functions to class scope --- src/Appwrite/Platform/Tasks/Maintenance.php | 199 ++++++++++---------- 1 file changed, 101 insertions(+), 98 deletions(-) diff --git a/src/Appwrite/Platform/Tasks/Maintenance.php b/src/Appwrite/Platform/Tasks/Maintenance.php index 405fd44d6c..60b389ea32 100644 --- a/src/Appwrite/Platform/Tasks/Maintenance.php +++ b/src/Appwrite/Platform/Tasks/Maintenance.php @@ -32,6 +32,98 @@ class Maintenance extends Action ->callback(fn (Database $dbForConsole, Certificate $queueForCertificates, Delete $queueForDeletes) => $this->action($dbForConsole, $queueForCertificates, $queueForDeletes)); } + private function notifyDeleteExecutionLogs(int $interval, Delete $queueForDeletes): void + { + ($queueForDeletes) + ->setType(DELETE_TYPE_EXECUTIONS) + ->setDatetime(DateTime::addSeconds(new \DateTime(), -1 * $interval)) + ->trigger(); + } + + private function notifyDeleteAbuseLogs(int $interval, Delete $queueForDeletes): void + { + $queueForDeletes + ->setType(DELETE_TYPE_ABUSE) + ->setDatetime(DateTime::addSeconds(new \DateTime(), -1 * $interval)) + ->trigger(); + } + + private function notifyDeleteAuditLogs(int $interval, Delete $queueForDeletes): void + { + $queueForDeletes + ->setType(DELETE_TYPE_AUDIT) + ->setDatetime(DateTime::addSeconds(new \DateTime(), -1 * $interval)) + ->trigger(); + } + + private function notifyDeleteUsageStats(int $usageStatsRetentionHourly, Delete $queueForDeletes): void + { + $queueForDeletes + ->setType(DELETE_TYPE_USAGE) + ->setUsageRetentionHourlyDateTime(DateTime::addSeconds(new \DateTime(), -1 * $usageStatsRetentionHourly)) + ->trigger(); + } + + private function notifyDeleteConnections(Delete $queueForDeletes): void + { + $queueForDeletes + ->setType(DELETE_TYPE_REALTIME) + ->setDatetime(DateTime::addSeconds(new \DateTime(), -60)) + ->trigger(); + } + + private function notifyDeleteExpiredSessions(Delete $queueForDeletes): void + { + $queueForDeletes + ->setType(DELETE_TYPE_SESSIONS) + ->trigger(); + } + + private function renewCertificates(Database $dbForConsole, Certificate $queueForCertificate): void + { + $time = DateTime::now(); + + $certificates = $dbForConsole->find('certificates', [ + Query::lessThan('attempts', 5), // Maximum 5 attempts + Query::lessThanEqual('renewDate', $time), // includes 60 days cooldown (we have 30 days to renew) + Query::limit(200), // Limit 200 comes from LetsEncrypt (300 orders per 3 hours, keeping some for new domains) + ]); + + + if (\count($certificates) > 0) { + Console::info("[{$time}] Found " . \count($certificates) . " certificates for renewal, scheduling jobs."); + + foreach ($certificates as $certificate) { + $queueForCertificate + ->setDomain(new Document([ + 'domain' => $certificate->getAttribute('domain') + ])) + ->trigger(); + } + } else { + Console::info("[{$time}] No certificates for renewal."); + } + } + + private function notifyDeleteCache($interval, Delete $queueForDeletes): void + { + + $queueForDeletes + ->setType(DELETE_TYPE_CACHE_BY_TIMESTAMP) + ->setDatetime(DateTime::addSeconds(new \DateTime(), -1 * $interval)) + ->trigger(); + } + + private function notifyDeleteSchedules($interval, Delete $queueForDeletes): void + { + + $queueForDeletes + ->setType(DELETE_TYPE_SCHEDULES) + ->setDatetime(DateTime::addSeconds(new \DateTime(), -1 * $interval)) + ->trigger(); + } + + /** * @throws \Exception */ @@ -40,96 +132,7 @@ class Maintenance extends Action Console::title('Maintenance V1'); Console::success(APP_NAME . ' maintenance process v1 has started'); - function notifyDeleteExecutionLogs(int $interval, Delete $queueForDeletes): void - { - ($queueForDeletes) - ->setType(DELETE_TYPE_EXECUTIONS) - ->setDatetime(DateTime::addSeconds(new \DateTime(), -1 * $interval)) - ->trigger(); - } - function notifyDeleteAbuseLogs(int $interval, Delete $queueForDeletes): void - { - $queueForDeletes - ->setType(DELETE_TYPE_ABUSE) - ->setDatetime(DateTime::addSeconds(new \DateTime(), -1 * $interval)) - ->trigger(); - } - - function notifyDeleteAuditLogs(int $interval, Delete $queueForDeletes): void - { - $queueForDeletes - ->setType(DELETE_TYPE_AUDIT) - ->setDatetime(DateTime::addSeconds(new \DateTime(), -1 * $interval)) - ->trigger(); - } - - function notifyDeleteUsageStats(int $usageStatsRetentionHourly, Delete $queueForDeletes): void - { - $queueForDeletes - ->setType(DELETE_TYPE_USAGE) - ->setUsageRetentionHourlyDateTime(DateTime::addSeconds(new \DateTime(), -1 * $usageStatsRetentionHourly)) - ->trigger(); - } - - function notifyDeleteConnections(Delete $queueForDeletes): void - { - $queueForDeletes - ->setType(DELETE_TYPE_REALTIME) - ->setDatetime(DateTime::addSeconds(new \DateTime(), -60)) - ->trigger(); - } - - function notifyDeleteExpiredSessions(Delete $queueForDeletes): void - { - $queueForDeletes - ->setType(DELETE_TYPE_SESSIONS) - ->trigger(); - } - - function renewCertificates(Database $dbForConsole, Certificate $queueForCertificate): void - { - $time = DateTime::now(); - - $certificates = $dbForConsole->find('certificates', [ - Query::lessThan('attempts', 5), // Maximum 5 attempts - Query::lessThanEqual('renewDate', $time), // includes 60 days cooldown (we have 30 days to renew) - Query::limit(200), // Limit 200 comes from LetsEncrypt (300 orders per 3 hours, keeping some for new domains) - ]); - - - if (\count($certificates) > 0) { - Console::info("[{$time}] Found " . \count($certificates) . " certificates for renewal, scheduling jobs."); - - foreach ($certificates as $certificate) { - $queueForCertificate - ->setDomain(new Document([ - 'domain' => $certificate->getAttribute('domain') - ])) - ->trigger(); - } - } else { - Console::info("[{$time}] No certificates for renewal."); - } - } - - function notifyDeleteCache($interval, Delete $queueForDeletes): void - { - - $queueForDeletes - ->setType(DELETE_TYPE_CACHE_BY_TIMESTAMP) - ->setDatetime(DateTime::addSeconds(new \DateTime(), -1 * $interval)) - ->trigger(); - } - - function notifyDeleteSchedules($interval, Delete $queueForDeletes): void - { - - $queueForDeletes - ->setType(DELETE_TYPE_SCHEDULES) - ->setDatetime(DateTime::addSeconds(new \DateTime(), -1 * $interval)) - ->trigger(); - } // # of days in seconds (1 day = 86400s) $interval = (int) App::getEnv('_APP_MAINTENANCE_INTERVAL', '86400'); @@ -144,15 +147,15 @@ class Maintenance extends Action $time = DateTime::now(); Console::info("[{$time}] Notifying workers with maintenance tasks every {$interval} seconds"); - notifyDeleteExecutionLogs($executionLogsRetention, $queueForDeletes); - notifyDeleteAbuseLogs($abuseLogsRetention, $queueForDeletes); - notifyDeleteAuditLogs($auditLogRetention, $queueForDeletes); - notifyDeleteUsageStats($usageStatsRetentionHourly, $queueForDeletes); - notifyDeleteConnections($queueForDeletes); - notifyDeleteExpiredSessions($queueForDeletes); - renewCertificates($dbForConsole, $queueForCertificates); - notifyDeleteCache($cacheRetention, $queueForDeletes); - notifyDeleteSchedules($schedulesDeletionRetention, $queueForDeletes); + $this->notifyDeleteExecutionLogs($executionLogsRetention, $queueForDeletes); + $this->notifyDeleteAbuseLogs($abuseLogsRetention, $queueForDeletes); + $this->notifyDeleteAuditLogs($auditLogRetention, $queueForDeletes); + $this->notifyDeleteUsageStats($usageStatsRetentionHourly, $queueForDeletes); + $this->notifyDeleteConnections($queueForDeletes); + $this->notifyDeleteExpiredSessions($queueForDeletes); + $this->renewCertificates($dbForConsole, $queueForCertificates); + $this->notifyDeleteCache($cacheRetention, $queueForDeletes); + $this->notifyDeleteSchedules($schedulesDeletionRetention, $queueForDeletes); }, $interval); } }