weekly('purgeOldMetrics'); $this->monthly('purgeMetricsForDeletedSites'); } /** * To test execute the following command: * `./console core:run-scheduled-tasks --force "Piwik\Plugins\ArchivingMetrics\Tasks.purgeOldMetrics"` */ public function purgeOldMetrics() { $retentionDays = $this->getRetentionDays(); if ($retentionDays <= 0) { return; } $cutoff = Date::now()->subDay($retentionDays)->getDatetime(); $table = Common::prefixTable('archiving_metrics'); Db::query("DELETE FROM {$table} WHERE ts_started < ?", [$cutoff]); } public function purgeMetricsForDeletedSites() { $siteTable = Common::prefixTable('site'); $table = Common::prefixTable('archiving_metrics'); Db::query("DELETE a FROM {$table} a LEFT JOIN {$siteTable} s ON a.idsite = s.idsite WHERE s.idsite IS NULL"); } private function getRetentionDays(): int { $config = Config::getInstance(); $retentionDays = $config->ArchivingMetrics['retention_days'] ?? self::DEFAULT_RETENTION_DAYS; return max(0, (int) $retentionDays); } }