@@ -159,3 +159,40 @@ SELECT id,pattern,grouping,capture INTO mts,@pattern,@grouping,Ccapture FROM abu
159159END;//
160160
161161
162+ /*
163+ * Procedure to process old archive log entries and delete them
164+ */
165+ DROP PROCEDURE IF EXISTS eproc_rotate_archive//
166+ CREATE PROCEDURE eproc_rotate_archive()
167+ BEGIN
168+ DROP TABLE IF EXISTS archive_ids;
169+ SET @archive_days= IFNULL((SELECT val FROM sysconf WHERE id= ' archive_delete_days' ),7 );
170+ SET @archive_limit= IFNULL((SELECT val FROM sysconf WHERE id= ' archive_delete_limit' ),0 );
171+ SET @use_mem= IFNULL((SELECT val FROM sysconf WHERE id= ' archive_delete_use_mem' ),' no' );
172+ IF @archive_days> 0 THEN
173+ IF @use_mem != ' yes' THEN
174+ CREATE TEMPORARY TABLE IF NOT EXISTS archive_ids (id BIGINT UNSIGNED NOT NULL PRIMARY KEY );
175+ ELSE
176+ CREATE TEMPORARY TABLE IF NOT EXISTS archive_ids (id BIGINT UNSIGNED NOT NULL PRIMARY KEY ) ENGINE= MEMORY;
177+ END IF;
178+
179+ SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
180+ START TRANSACTION ;
181+ IF @archive_limit > 0 THEN
182+ PREPARE choose_archive_ids FROM ' INSERT INTO archive_ids SELECT id FROM `archive` WHERE received_ts < NOW() - INTERVAL ? DAY LIMIT ?' ;
183+ EXECUTE choose_archive_ids USING @archive_days, @archive_limit;
184+ ELSE
185+ PREPARE choose_archive_ids FROM ' INSERT INTO archive_ids SELECT id FROM `archive` WHERE received_ts < NOW() - INTERVAL ? DAY' ;
186+ EXECUTE choose_archive_ids USING @archive_days;
187+ END IF;
188+ DEALLOCATE PREPARE choose_archive_ids;
189+ -- Ignore ID's from entries that exist on archive_unparse
190+ DELETE t1.* FROM archive_ids as t1 LEFT JOIN archive_unparse AS t2 ON t1 .id = t2 .id WHERE t2 .id IS NOT NULL ;
191+ -- Ignore ID's from entries that exist on syslog
192+ DELETE t1.* FROM archive_ids as t1 LEFT JOIN syslog AS t2 ON t1 .id = t2 .id WHERE t2 .id IS NOT NULL ;
193+ -- Ignore ID's from entries that exist on abuser_evidense
194+ DELETE t1.* FROM archive_ids as t1 LEFT JOIN abuser_evidence AS t2 ON t1 .id = t2 .archive_id WHERE t2 .archive_id IS NOT NULL ;
195+ DELETE t1.* FROM ` archive` AS t1 LEFT JOIN archive_ids AS t2 ON t1 .id = t2 .id WHERE t2 .id IS NOT NULL ;
196+ COMMIT ;
197+ END IF;
198+ END;//
0 commit comments