|
3 | 3 | SET FOREIGN_KEY_CHECKS=0; |
4 | 4 | SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO"; |
5 | 5 | SET time_zone = "+00:00"; |
6 | | - |
| 6 | +SET NAMES utf8 COLLATE 'utf8_unicode_ci'; |
7 | 7 |
|
8 | 8 | /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; |
9 | 9 | /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; |
|
32 | 32 | ALTER EVENT e_archive_parse_unparsed ENABLE; |
33 | 33 | END |
34 | 34 | // |
| 35 | + |
| 36 | +DROP EVENT IF EXISTS e_rotate_archive// |
| 37 | +CREATE EVENT e_rotate_archive |
| 38 | +ON SCHEDULE EVERY 1 DAY COMMENT 'ROTATE OLD ARCHIVE ENTRIES' DO |
| 39 | +BEGIN |
| 40 | +IF (SELECT count(*) FROM sysconf WHERE id='archive_rotate' and val='yes')>0 THEN |
| 41 | + SET @archive_days=IFNULL((SELECT val FROM sysconf WHERE id='archive_delete_days'),7); |
| 42 | + SET @archive_limit=IFNULL((SELECT val FROM sysconf WHERE id='archive_delete_limit'),0); |
| 43 | + SET @use_mem=IFNULL((SELECT val FROM sysconf WHERE id='archive_delete_use_mem'),'no'); |
| 44 | + IF @archive_days>0 THEN |
| 45 | + IF @use_mem != 'yes' THEN |
| 46 | + CREATE TEMPORARY TABLE archive_ids (id BIGINT UNSIGNED NOT NULL PRIMARY KEY); |
| 47 | + ELSE |
| 48 | + CREATE TEMPORARY TABLE archive_ids (id BIGINT UNSIGNED NOT NULL PRIMARY KEY) ENGINE=MEMORY; |
| 49 | + END IF; |
| 50 | + |
| 51 | + SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; |
| 52 | + START TRANSACTION; |
| 53 | + IF @archive_limit > 0 THEN |
| 54 | + PREPARE choose_archive_ids FROM 'INSERT INTO archive_ids SELECT id FROM `archive` WHERE received_ts < NOW() - INTERVAL ? DAY LIMIT ?'; |
| 55 | + EXECUTE choose_archive_ids USING @archive_days, @archive_limit; |
| 56 | + ELSE |
| 57 | + PREPARE choose_archive_ids FROM 'INSERT INTO archive_ids SELECT id FROM `archive` WHERE received_ts < NOW() - INTERVAL ?'; |
| 58 | + EXECUTE choose_archive_ids USING @archive_days; |
| 59 | + END IF; |
| 60 | + DEALLOCATE PREPARE choose_archive_ids; |
| 61 | + -- Ignore ID's from entries that exist on archive_unparse |
| 62 | + DELETE t1.* FROM archive_ids as t1 LEFT JOIN archive_unparse AS t2 ON t1.id=t2.id WHERE t2.id IS NOT NULL; |
| 63 | + -- Ignore ID's from entries that exist on syslog |
| 64 | + DELETE t1.* FROM archive_ids as t1 LEFT JOIN syslog AS t2 ON t1.id=t2.id WHERE t2.id IS NOT NULL; |
| 65 | + -- Ignore ID's from entries that exist on abuser_evidense |
| 66 | + 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; |
| 67 | + DELETE t1.* FROM `archive` AS t1 LEFT JOIN archive_ids AS t2 ON t1.id=t2.id WHERE t2.id IS NOT NULL; |
| 68 | + COMMIT; |
| 69 | + END IF; |
| 70 | +END IF; |
| 71 | +END |
| 72 | +// |
| 73 | + |
| 74 | + |
0 commit comments